@salla.sa/twilight-components 2.14.220 → 2.14.222
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/{app-globals-2vTvVXxF.js → app-globals-DPedpk8u.js} +3 -3
- package/dist/cjs/{app-globals-2vTvVXxF.js.map → app-globals-DPedpk8u.js.map} +1 -1
- package/dist/cjs/{index-B04Y8RyW.js → index-BDn6fH9S.js} +8 -4
- package/dist/cjs/index-BDn6fH9S.js.map +1 -0
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/salla-accordion-body.cjs.entry.js +1 -1
- package/dist/cjs/salla-accordion-head.cjs.entry.js +1 -1
- package/dist/cjs/salla-accordion.cjs.entry.js +1 -1
- package/dist/cjs/salla-add-product-button_51.cjs.entry.js +1 -1
- package/dist/cjs/salla-advertisement.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-booking-field_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-cart-item-offers.cjs.entry.js +1 -1
- package/dist/cjs/salla-conditional-offer.cjs.entry.js +16 -5
- package/dist/cjs/salla-conditional-offer.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-conditional-offer.entry.cjs.js.map +1 -1
- package/dist/cjs/salla-contacts.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-installment.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 +1 -1
- package/dist/cjs/salla-metadata.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.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-summary.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-price-range.cjs.entry.js +1 -1
- package/dist/cjs/salla-product-options.cjs.entry.js +1 -1
- package/dist/cjs/salla-review-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-reviews-page.cjs.entry.js +1 -1
- package/dist/cjs/salla-reviews.cjs.entry.js +1 -1
- package/dist/cjs/salla-social.cjs.entry.js +1 -1
- package/dist/cjs/salla-tiered-offer.cjs.entry.js +338 -0
- package/dist/cjs/salla-tiered-offer.cjs.entry.js.map +1 -0
- package/dist/cjs/salla-tiered-offer.entry.cjs.js.map +1 -0
- package/dist/cjs/salla-tooltip.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/twilight.cjs.js +3 -3
- package/dist/collection/assets/svg/diamond-02.svg +4 -0
- package/dist/collection/assets/svg/gold.svg +6 -0
- package/dist/collection/assets/svg/star-rounded.svg +3 -0
- package/dist/collection/assets/svg/stars.svg +5 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/salla-conditional-offer/salla-conditional-offer.js +15 -4
- package/dist/collection/components/salla-conditional-offer/salla-conditional-offer.js.map +1 -1
- package/dist/collection/components/salla-tiered-offer/constants.js +12 -0
- package/dist/collection/components/salla-tiered-offer/constants.js.map +1 -0
- package/dist/collection/components/salla-tiered-offer/interfaces.js +9 -0
- package/dist/collection/components/salla-tiered-offer/interfaces.js.map +1 -0
- package/dist/collection/components/salla-tiered-offer/salla-tiered-offer.css +26 -0
- package/dist/collection/components/salla-tiered-offer/salla-tiered-offer.js +288 -0
- package/dist/collection/components/salla-tiered-offer/salla-tiered-offer.js.map +1 -0
- package/dist/collection/components/salla-tiered-offer/utils.js +38 -0
- package/dist/collection/components/salla-tiered-offer/utils.js.map +1 -0
- package/dist/components/index.js +2 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/salla-conditional-offer.js +15 -4
- package/dist/components/salla-conditional-offer.js.map +1 -1
- package/dist/components/salla-tiered-offer.d.ts +11 -0
- package/dist/components/salla-tiered-offer.js +371 -0
- package/dist/components/salla-tiered-offer.js.map +1 -0
- package/dist/esm/{app-globals-DRz9_J1y.js → app-globals-wLakfxcp.js} +3 -3
- package/dist/esm/{app-globals-DRz9_J1y.js.map → app-globals-wLakfxcp.js.map} +1 -1
- package/dist/esm/{index-L1Wml9tS.js → index-Dj2SrCy0.js} +8 -4
- package/dist/esm/index-Dj2SrCy0.js.map +1 -0
- package/dist/esm/loader.js +4 -4
- package/dist/esm/salla-accordion-body.entry.js +1 -1
- package/dist/esm/salla-accordion-head.entry.js +1 -1
- package/dist/esm/salla-accordion.entry.js +1 -1
- package/dist/esm/salla-add-product-button_51.entry.js +1 -1
- package/dist/esm/salla-advertisement.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-booking-field_2.entry.js +1 -1
- package/dist/esm/salla-cart-item-offers.entry.js +1 -1
- package/dist/esm/salla-conditional-offer.entry.js +16 -5
- package/dist/esm/salla-conditional-offer.entry.js.map +1 -1
- package/dist/esm/salla-contacts.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-installment.entry.js +1 -1
- package/dist/esm/salla-loyalty-prize-item.entry.js +1 -1
- package/dist/esm/salla-loyalty-program.entry.js +1 -1
- package/dist/esm/salla-metadata.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.entry.js +1 -1
- package/dist/esm/salla-order-summary.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-price-range.entry.js +1 -1
- package/dist/esm/salla-product-options.entry.js +1 -1
- package/dist/esm/salla-review-card.entry.js +1 -1
- package/dist/esm/salla-reviews-page.entry.js +1 -1
- package/dist/esm/salla-reviews.entry.js +1 -1
- package/dist/esm/salla-social.entry.js +1 -1
- package/dist/esm/salla-tiered-offer.entry.js +336 -0
- package/dist/esm/salla-tiered-offer.entry.js.map +1 -0
- package/dist/esm/salla-tooltip.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/twilight.js +4 -4
- package/dist/esm-es5/{app-globals-DRz9_J1y.js → app-globals-wLakfxcp.js} +2 -2
- package/dist/esm-es5/{app-globals-DRz9_J1y.js.map → app-globals-wLakfxcp.js.map} +1 -1
- package/dist/esm-es5/{index-L1Wml9tS.js → index-Dj2SrCy0.js} +3 -3
- package/dist/esm-es5/index-Dj2SrCy0.js.map +1 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/salla-accordion-body.entry.js +1 -1
- package/dist/esm-es5/salla-accordion-head.entry.js +1 -1
- package/dist/esm-es5/salla-accordion.entry.js +1 -1
- package/dist/esm-es5/salla-add-product-button_51.entry.js +1 -1
- package/dist/esm-es5/salla-advertisement.entry.js +1 -1
- package/dist/esm-es5/salla-app-install-alert.entry.js +1 -1
- package/dist/esm-es5/salla-apps-icons.entry.js +1 -1
- package/dist/esm-es5/salla-booking-field_2.entry.js +1 -1
- package/dist/esm-es5/salla-cart-item-offers.entry.js +1 -1
- package/dist/esm-es5/salla-conditional-offer.entry.js +1 -1
- package/dist/esm-es5/salla-conditional-offer.entry.js.map +1 -1
- package/dist/esm-es5/salla-contacts.entry.js +1 -1
- package/dist/esm-es5/salla-filters-widget.entry.js +2 -2
- package/dist/esm-es5/salla-filters.entry.js +1 -1
- package/dist/esm-es5/salla-installment.entry.js +1 -1
- package/dist/esm-es5/salla-loyalty-prize-item.entry.js +1 -1
- package/dist/esm-es5/salla-loyalty-program.entry.js +1 -1
- package/dist/esm-es5/salla-metadata.entry.js +2 -2
- package/dist/esm-es5/salla-notification-item.entry.js +1 -1
- package/dist/esm-es5/salla-notifications.entry.js +2 -2
- package/dist/esm-es5/salla-offer.entry.js +1 -1
- package/dist/esm-es5/salla-order-summary.entry.js +2 -2
- package/dist/esm-es5/salla-orders.entry.js +2 -2
- package/dist/esm-es5/salla-payments.entry.js +1 -1
- package/dist/esm-es5/salla-price-range.entry.js +1 -1
- package/dist/esm-es5/salla-product-options.entry.js +1 -1
- package/dist/esm-es5/salla-review-card.entry.js +1 -1
- package/dist/esm-es5/salla-reviews-page.entry.js +1 -1
- package/dist/esm-es5/salla-reviews.entry.js +1 -1
- package/dist/esm-es5/salla-social.entry.js +1 -1
- package/dist/esm-es5/salla-tiered-offer.entry.js +5 -0
- package/dist/esm-es5/salla-tiered-offer.entry.js.map +1 -0
- package/dist/esm-es5/salla-tooltip.entry.js +1 -1
- package/dist/esm-es5/salla-verify.entry.js +1 -1
- package/dist/esm-es5/salla-wallet.entry.js +1 -1
- package/dist/esm-es5/twilight.js +1 -1
- package/dist/twilight/{p-2ac20d02.entry.js → p-00ce3e65.entry.js} +2 -2
- package/dist/twilight/{p-e00746e9.system.entry.js → p-02cc2225.system.entry.js} +2 -2
- package/dist/twilight/{p-0a469ba7.system.entry.js → p-0b16f452.system.entry.js} +3 -3
- package/dist/twilight/{p-3bdebf0d.entry.js → p-109136fc.entry.js} +2 -2
- package/dist/twilight/{p-fe959c9a.system.entry.js → p-12adb702.system.entry.js} +2 -2
- package/dist/twilight/{p-12a13525.entry.js → p-16dfee33.entry.js} +2 -2
- package/dist/twilight/{p-1ccd8b8e.entry.js → p-18537486.entry.js} +2 -2
- package/dist/twilight/{p-2cd40336.system.entry.js → p-1cbc4329.system.entry.js} +2 -2
- package/dist/twilight/{p-fbaa093c.entry.js → p-1cf1344e.entry.js} +2 -2
- package/dist/twilight/{p-a477ee76.system.entry.js → p-1d6100c4.system.entry.js} +2 -2
- package/dist/twilight/{p-75ec194e.system.entry.js → p-29567106.system.entry.js} +2 -2
- package/dist/twilight/{p-962cd525.entry.js → p-315c5fd3.entry.js} +2 -2
- package/dist/twilight/{p-184f98b1.entry.js → p-337fca82.entry.js} +2 -2
- package/dist/twilight/{p-5b8bf0e6.system.entry.js → p-3b02f780.system.entry.js} +2 -2
- package/dist/twilight/{p-Burnn1Qt.js → p-4drPVtGP.js} +2 -2
- package/dist/twilight/{p-Burnn1Qt.js.map → p-4drPVtGP.js.map} +1 -1
- package/dist/twilight/{p-7b7618d5.entry.js → p-5394cdeb.entry.js} +2 -2
- package/dist/twilight/{p-38526ba5.system.entry.js → p-55306475.system.entry.js} +2 -2
- package/dist/twilight/{p-b1ad7c75.entry.js → p-59763129.entry.js} +2 -2
- package/dist/twilight/{p-52156f6d.system.entry.js → p-5cd7ff6d.system.entry.js} +2 -2
- package/dist/twilight/{p-5c918974.entry.js → p-5e1f0ddf.entry.js} +2 -2
- package/dist/twilight/p-618eb3f2.system.entry.js +5 -0
- package/dist/twilight/p-618eb3f2.system.entry.js.map +1 -0
- package/dist/twilight/{p-f6c410c6.entry.js → p-67b54ac4.entry.js} +2 -2
- package/dist/twilight/p-67ebf87e.system.entry.js +5 -0
- package/dist/twilight/{p-76137ff1.entry.js → p-688dd765.entry.js} +2 -2
- package/dist/twilight/{p-284dae41.system.entry.js → p-6ec767ac.system.entry.js} +2 -2
- package/dist/twilight/{p-1af18eb4.entry.js → p-70e74f3c.entry.js} +2 -2
- package/dist/twilight/{p-d9c2f2b0.system.entry.js → p-7236a037.system.entry.js} +2 -2
- package/dist/twilight/{p-30c8b458.system.entry.js → p-7436f972.system.entry.js} +2 -2
- package/dist/twilight/{p-8d9a5dc0.entry.js → p-74647582.entry.js} +2 -2
- package/dist/twilight/{p-Cl_CHxGj.system.js.map → p-78vq_YNh.system.js.map} +1 -1
- package/dist/twilight/{p-c781f7a7.entry.js → p-8162a820.entry.js} +2 -2
- package/dist/twilight/p-864f1430.system.entry.js +5 -0
- package/dist/twilight/{p-47b6e06b.system.entry.js → p-865fc401.system.entry.js} +2 -2
- package/dist/twilight/{p-bfb9457b.system.entry.js → p-87206bd7.system.entry.js} +2 -2
- package/dist/twilight/p-8c08dafb.entry.js +5 -0
- package/dist/twilight/{p-0e4f26bb.system.entry.js → p-8ce2a142.system.entry.js} +2 -2
- package/dist/twilight/{p-60e6d7e6.system.entry.js → p-8d28bf6e.system.entry.js} +2 -2
- package/dist/twilight/{p-d07e552b.system.entry.js → p-97337c52.system.entry.js} +2 -2
- package/dist/twilight/{p-08258532.entry.js → p-9e54e404.entry.js} +2 -2
- package/dist/twilight/{p-C9IwdXDn.system.js.map → p-B-EmhPha.system.js.map} +1 -1
- package/dist/twilight/{p-B0ThVjj_.system.js.map → p-B6apPCKk.system.js.map} +1 -1
- package/dist/twilight/{p-D_Of4cjl.system.js.map → p-BC5TR2o4.system.js.map} +1 -1
- package/dist/twilight/{p-Bvg9GRmu.system.js.map → p-BFLzwSRe.system.js.map} +1 -1
- package/dist/twilight/{p-DFlc0grl.system.js.map → p-BIlNLy1w.system.js.map} +1 -1
- package/dist/twilight/{p-j7nJelMY.system.js.map → p-B_H7JnAQ.system.js.map} +1 -1
- package/dist/twilight/{p-BWD1Mdmj.system.js.map → p-BfizdcIv.system.js.map} +1 -1
- package/dist/twilight/{p-BfxbBmpF.system.js.map → p-BgVK0PPB.system.js.map} +1 -1
- package/dist/twilight/{p-BUNm7oxn.system.js → p-BtfcvLWi.system.js} +2 -2
- package/dist/twilight/{p-BUNm7oxn.system.js.map → p-BtfcvLWi.system.js.map} +1 -1
- package/dist/twilight/{p-BP344v_q.system.js.map → p-BxPxFmIf.system.js.map} +1 -1
- package/dist/twilight/{p-9jT7Wo1H.system.js.map → p-C6Mc-nga.system.js.map} +1 -1
- package/dist/twilight/{p-nuRa4ECK.system.js.map → p-CAhB5SXO.system.js.map} +1 -1
- package/dist/twilight/{p-cWZujtjd.system.js.map → p-CD5EBKFr.system.js.map} +1 -1
- package/dist/twilight/{p-egmUBeji.system.js.map → p-CDPN9ikP.system.js.map} +1 -1
- package/dist/twilight/{p-YvHIMjOJ.system.js.map → p-CE_xhQMS.system.js.map} +1 -1
- package/dist/twilight/{p-Cee0DssD.system.js.map → p-CIzZIur3.system.js.map} +1 -1
- package/dist/twilight/p-CaVNqQXu.system.js +5 -0
- package/dist/twilight/{p-ByGP8fWO.system.js.map → p-CaVNqQXu.system.js.map} +1 -1
- package/dist/twilight/{p-DPreD4Hr.system.js.map → p-CfNLozg0.system.js.map} +1 -1
- package/dist/twilight/p-ClaSC-3N.system.js.map +1 -0
- package/dist/twilight/{p-CIghWdV5.system.js.map → p-Cm8GjH45.system.js.map} +1 -1
- package/dist/twilight/{p-BftU992I.system.js.map → p-CpJOChwF.system.js.map} +1 -1
- package/dist/twilight/{p-BWnEoSJY.system.js.map → p-CsweHiBJ.system.js.map} +1 -1
- package/dist/twilight/{p-CpzD5fce.system.js.map → p-CtiUKful.system.js.map} +1 -1
- package/dist/twilight/{p-nvgYekhd.system.js.map → p-D0vXKNzE.system.js.map} +1 -1
- package/dist/twilight/{p-BCvHzhOW.system.js.map → p-D6fGvShW.system.js.map} +1 -1
- package/dist/twilight/{p-BlpV9vce.system.js.map → p-DInbMpRZ.system.js.map} +1 -1
- package/dist/twilight/{p-DVqtOGyR.system.js.map → p-DRUO4ntA.system.js.map} +1 -1
- package/dist/twilight/{p-L1Wml9tS.js → p-Dj2SrCy0.js} +3 -3
- package/dist/twilight/p-Dj2SrCy0.js.map +1 -0
- package/dist/twilight/{p-DuTXkmaO.system.js → p-DvJ_tnSw.system.js} +6 -6
- package/dist/twilight/p-DvJ_tnSw.system.js.map +1 -0
- package/dist/twilight/{p-DUDOY-ZS.system.js.map → p-DvQIv_6Y.system.js.map} +1 -1
- package/dist/twilight/{p-DwLeLHva.system.js.map → p-Dx2JzDoP.system.js.map} +1 -1
- package/dist/twilight/{p-DmQdqVWv.system.js.map → p-Dzal8dOY.system.js.map} +1 -1
- package/dist/twilight/p-FGWU4ai_.system.js.map +1 -0
- package/dist/twilight/{p-DvZ3uG1Y.system.js.map → p-LondrlGD.system.js.map} +1 -1
- package/dist/twilight/{p-tI_9cOVN.system.js.map → p-Q2yReOd3.system.js.map} +1 -1
- package/dist/twilight/{p-ByVXW9BA.system.js.map → p-WlDhq-4G.system.js.map} +1 -1
- package/dist/twilight/{p-cbadf894.system.entry.js → p-a20b6984.system.entry.js} +2 -2
- package/dist/twilight/{p-b4b5a600.system.entry.js → p-a439d5c1.system.entry.js} +2 -2
- package/dist/twilight/{p-62ba5382.entry.js → p-a531e0e4.entry.js} +2 -2
- package/dist/twilight/{p-342e13e4.system.entry.js → p-acaa2f80.system.entry.js} +2 -2
- package/dist/twilight/{p-154d97db.system.entry.js → p-ae7962ba.system.entry.js} +2 -2
- package/dist/twilight/{p-039b45e6.system.entry.js → p-b167e712.system.entry.js} +2 -2
- package/dist/twilight/{p-9a3f6331.entry.js → p-b42c8720.entry.js} +2 -2
- package/dist/twilight/{p-4291c03c.system.entry.js → p-b477f55b.system.entry.js} +2 -2
- package/dist/twilight/{p-50f789e5.entry.js → p-bc918d89.entry.js} +2 -2
- package/dist/twilight/{p-96d501d2.entry.js → p-c3adc5d9.entry.js} +2 -2
- package/dist/twilight/{p-5a577bf3.system.entry.js → p-c842f73f.system.entry.js} +2 -2
- package/dist/twilight/{p-f72dd4b6.system.entry.js → p-c8cea269.system.entry.js} +2 -2
- package/dist/twilight/{p-90fc2489.entry.js → p-d37bad6f.entry.js} +2 -2
- package/dist/twilight/{p-af1f9cd6.entry.js → p-d85581c6.entry.js} +2 -2
- package/dist/twilight/{p-666189da.system.entry.js → p-d8d9cdcd.system.entry.js} +2 -2
- package/dist/twilight/{p-be1034af.system.entry.js → p-de891990.system.entry.js} +2 -2
- package/dist/twilight/{p-6c83517d.entry.js → p-def552bd.entry.js} +2 -2
- package/dist/twilight/{p-228d58df.system.entry.js → p-e4f73083.system.entry.js} +2 -2
- package/dist/twilight/{p-a3ab451d.entry.js → p-e5872e75.entry.js} +2 -2
- package/dist/twilight/{p-d0a760cc.entry.js → p-ed4c7158.entry.js} +2 -2
- package/dist/twilight/p-ee443b00.entry.js +5 -0
- package/dist/twilight/p-ee443b00.entry.js.map +1 -0
- package/dist/twilight/{p-789f0166.system.entry.js → p-f1f3d74e.system.entry.js} +2 -2
- package/dist/twilight/{p-ca88566e.entry.js → p-f3b8551c.entry.js} +2 -2
- package/dist/twilight/{p-c63ddf33.entry.js → p-f41e7eed.entry.js} +2 -2
- package/dist/twilight/{p-6fcc8ed3.entry.js → p-f4918259.entry.js} +2 -2
- package/dist/twilight/p-f594b721.entry.js +5 -0
- package/dist/twilight/p-f594b721.entry.js.map +1 -0
- package/dist/twilight/{p-5b4f648e.entry.js → p-f9d8f20d.entry.js} +2 -2
- package/dist/twilight/p-fb59e3b5.entry.js +5 -0
- package/dist/twilight/p-ffb9ab7b.system.entry.js +5 -0
- package/dist/twilight/p-ffb9ab7b.system.entry.js.map +1 -0
- package/dist/twilight/{p-DKke2twA.system.js.map → p-jlCh1xBh.system.js.map} +1 -1
- package/dist/twilight/salla-conditional-offer.entry.esm.js.map +1 -1
- package/dist/twilight/salla-tiered-offer.entry.esm.js.map +1 -0
- package/dist/twilight/twilight.esm.js +1 -1
- package/dist/twilight/twilight.js +1 -1
- package/dist/types/components/salla-tiered-offer/constants.d.ts +2 -0
- package/dist/types/components/salla-tiered-offer/interfaces.d.ts +44 -0
- package/dist/types/components/salla-tiered-offer/salla-tiered-offer.d.ts +39 -0
- package/dist/types/components/salla-tiered-offer/utils.d.ts +19 -0
- package/dist/types/components.d.ts +13 -0
- package/package.json +5 -5
- package/dist/cjs/index-B04Y8RyW.js.map +0 -1
- package/dist/esm/index-L1Wml9tS.js.map +0 -1
- package/dist/esm-es5/index-L1Wml9tS.js.map +0 -1
- package/dist/twilight/p-0225792d.system.entry.js +0 -5
- package/dist/twilight/p-0225792d.system.entry.js.map +0 -1
- package/dist/twilight/p-2c11821b.entry.js +0 -5
- package/dist/twilight/p-4fd3a01d.entry.js +0 -5
- package/dist/twilight/p-4fd3a01d.entry.js.map +0 -1
- package/dist/twilight/p-57bbd96b.system.entry.js +0 -5
- package/dist/twilight/p-BIOQiBj0.system.js.map +0 -1
- package/dist/twilight/p-ByGP8fWO.system.js +0 -5
- package/dist/twilight/p-DuTXkmaO.system.js.map +0 -1
- package/dist/twilight/p-L1Wml9tS.js.map +0 -1
- package/dist/twilight/p-a198f405.entry.js +0 -5
- package/dist/twilight/p-e58e21db.system.entry.js +0 -5
- /package/dist/twilight/{p-2ac20d02.entry.js.map → p-00ce3e65.entry.js.map} +0 -0
- /package/dist/twilight/{p-e00746e9.system.entry.js.map → p-02cc2225.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-0a469ba7.system.entry.js.map → p-0b16f452.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-3bdebf0d.entry.js.map → p-109136fc.entry.js.map} +0 -0
- /package/dist/twilight/{p-fe959c9a.system.entry.js.map → p-12adb702.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-12a13525.entry.js.map → p-16dfee33.entry.js.map} +0 -0
- /package/dist/twilight/{p-1ccd8b8e.entry.js.map → p-18537486.entry.js.map} +0 -0
- /package/dist/twilight/{p-2cd40336.system.entry.js.map → p-1cbc4329.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-fbaa093c.entry.js.map → p-1cf1344e.entry.js.map} +0 -0
- /package/dist/twilight/{p-a477ee76.system.entry.js.map → p-1d6100c4.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-75ec194e.system.entry.js.map → p-29567106.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-962cd525.entry.js.map → p-315c5fd3.entry.js.map} +0 -0
- /package/dist/twilight/{p-184f98b1.entry.js.map → p-337fca82.entry.js.map} +0 -0
- /package/dist/twilight/{p-5b8bf0e6.system.entry.js.map → p-3b02f780.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-7b7618d5.entry.js.map → p-5394cdeb.entry.js.map} +0 -0
- /package/dist/twilight/{p-38526ba5.system.entry.js.map → p-55306475.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-b1ad7c75.entry.js.map → p-59763129.entry.js.map} +0 -0
- /package/dist/twilight/{p-52156f6d.system.entry.js.map → p-5cd7ff6d.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-5c918974.entry.js.map → p-5e1f0ddf.entry.js.map} +0 -0
- /package/dist/twilight/{p-f6c410c6.entry.js.map → p-67b54ac4.entry.js.map} +0 -0
- /package/dist/twilight/{p-57bbd96b.system.entry.js.map → p-67ebf87e.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-76137ff1.entry.js.map → p-688dd765.entry.js.map} +0 -0
- /package/dist/twilight/{p-284dae41.system.entry.js.map → p-6ec767ac.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-1af18eb4.entry.js.map → p-70e74f3c.entry.js.map} +0 -0
- /package/dist/twilight/{p-d9c2f2b0.system.entry.js.map → p-7236a037.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-30c8b458.system.entry.js.map → p-7436f972.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-8d9a5dc0.entry.js.map → p-74647582.entry.js.map} +0 -0
- /package/dist/twilight/{p-c781f7a7.entry.js.map → p-8162a820.entry.js.map} +0 -0
- /package/dist/twilight/{p-e58e21db.system.entry.js.map → p-864f1430.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-47b6e06b.system.entry.js.map → p-865fc401.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-bfb9457b.system.entry.js.map → p-87206bd7.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-a198f405.entry.js.map → p-8c08dafb.entry.js.map} +0 -0
- /package/dist/twilight/{p-0e4f26bb.system.entry.js.map → p-8ce2a142.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-60e6d7e6.system.entry.js.map → p-8d28bf6e.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-d07e552b.system.entry.js.map → p-97337c52.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-08258532.entry.js.map → p-9e54e404.entry.js.map} +0 -0
- /package/dist/twilight/{p-cbadf894.system.entry.js.map → p-a20b6984.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-b4b5a600.system.entry.js.map → p-a439d5c1.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-62ba5382.entry.js.map → p-a531e0e4.entry.js.map} +0 -0
- /package/dist/twilight/{p-342e13e4.system.entry.js.map → p-acaa2f80.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-154d97db.system.entry.js.map → p-ae7962ba.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-039b45e6.system.entry.js.map → p-b167e712.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-9a3f6331.entry.js.map → p-b42c8720.entry.js.map} +0 -0
- /package/dist/twilight/{p-4291c03c.system.entry.js.map → p-b477f55b.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-50f789e5.entry.js.map → p-bc918d89.entry.js.map} +0 -0
- /package/dist/twilight/{p-96d501d2.entry.js.map → p-c3adc5d9.entry.js.map} +0 -0
- /package/dist/twilight/{p-5a577bf3.system.entry.js.map → p-c842f73f.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-f72dd4b6.system.entry.js.map → p-c8cea269.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-90fc2489.entry.js.map → p-d37bad6f.entry.js.map} +0 -0
- /package/dist/twilight/{p-af1f9cd6.entry.js.map → p-d85581c6.entry.js.map} +0 -0
- /package/dist/twilight/{p-666189da.system.entry.js.map → p-d8d9cdcd.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-be1034af.system.entry.js.map → p-de891990.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-6c83517d.entry.js.map → p-def552bd.entry.js.map} +0 -0
- /package/dist/twilight/{p-228d58df.system.entry.js.map → p-e4f73083.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-a3ab451d.entry.js.map → p-e5872e75.entry.js.map} +0 -0
- /package/dist/twilight/{p-d0a760cc.entry.js.map → p-ed4c7158.entry.js.map} +0 -0
- /package/dist/twilight/{p-789f0166.system.entry.js.map → p-f1f3d74e.system.entry.js.map} +0 -0
- /package/dist/twilight/{p-ca88566e.entry.js.map → p-f3b8551c.entry.js.map} +0 -0
- /package/dist/twilight/{p-c63ddf33.entry.js.map → p-f41e7eed.entry.js.map} +0 -0
- /package/dist/twilight/{p-6fcc8ed3.entry.js.map → p-f4918259.entry.js.map} +0 -0
- /package/dist/twilight/{p-5b4f648e.entry.js.map → p-f9d8f20d.entry.js.map} +0 -0
- /package/dist/twilight/{p-2c11821b.entry.js.map → p-fb59e3b5.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-BWD1Mdmj.system.js","sources":["src/components/salla-offer/interfaces.ts","src/components/salla-offer/salla-offer.scss?tag=salla-offer","src/components/salla-offer/salla-offer.tsx"],"sourcesContent":["export enum PageType {\n ProductDetail = \"product.single\",\n Cart = \"cart\"\n}\n\nexport enum OfferType {\n Conditional = \"conditional\",\n PercentageOrFixed = \"fixed\",\n DiscountsTable = \"discounts_table\",\n Bank = \"bank\",\n BuyXGetY = \"buy_x_get_y\",\n SpecialPrice = \"special_price\",\n}\n\n\nexport interface DiscountDetailFixed {\n discount_type: \"fixed\";\n min_spend: number;\n discount_value: number;\n}\n\nexport interface DiscountDetailFreeProduct {\n discount_type: \"free_product\";\n min_spend: number;\n discount_value: number;\n}\n\nexport interface DiscountDetailConditional extends Array<DiscountDetailFixed | DiscountDetailFreeProduct> {}\n\nexport interface DiscountDetailPercentageFixed {\n apply_to: \"all\" | \"products\" | \"categories\" | \"payment_methods\";\n targets: Array<string | number>;\n ends_at: number;\n min_spend: number;\n discount_value: number;\n}\n\nexport interface Discount {\n discounted_amount: any;\n quantity: number;\n percentage: number;\n}\n\nexport interface DiscountDetailTable {\n apply_to: \"all\" | \"products\" | \"categories\" | \"payment_methods\" | \"order\";\n discount_value: number;\n ends_at: string;\n min_items: number;\n min_spend: number;\n show_price_after_discount: boolean;\n discounts: Discount[];\n}\n\nexport interface BankOffer {\n logo: string;\n discount_value: number;\n discount_type: string;\n minimum_spend: number;\n payments: string[];\n}\n\nexport interface SpecialPriceDetail {\n apply_to: \"product\" | \"category\";\n discount_value: number;\n ends_at: number;\n min_items: number; \n min_spend: number;\n targets: Array<string | number>;\n products?: Product[];//we will set this dynamically\n categories?: Category[];//we will set this dynamically\n\n}\n\nexport interface BuyXGetYDetail {\n ends_at: number;\n buy: {\n source: \"product\" | \"category\";\n source_value: number[];\n quantity: number;\n };\n get: {\n source: \"products\" | \"category\";\n source_value: number[];\n type: \"free_product\" | \"percentage\" | \"fixed\";\n value: number;\n products?: Product[];//we will set this dynamically\n categories?: Category[];//we will set this dynamically\n };\n}\n\nexport interface Offer {\n id: number;\n title: string;\n description: string;\n type: OfferType | \"conditional\" | \"fixed\" | \"discounts_table\" | \"bank\" | \"buy_x_get_y\";\n details: DiscountDetailConditional | DiscountDetailPercentageFixed | DiscountDetailTable | BankOffer | BuyXGetYDetail | SpecialPriceDetail;\n}\n\nexport interface Product {\n id: number;\n type: string;\n status: string;\n is_available: boolean;\n sku: string;\n name: string;\n price: { amount: number; currency: string; };\n promotion: { title: string; sub_title: string; };\n sale_price: { amount: number; currency: string; };\n regular_price: { amount: number; currency: string; };\n currency: string;\n url: string;\n thumbnail: string;\n has_special_price: boolean;\n favorite?: any;\n}\n\nexport interface Category {\n id?: string;\n id_?: number;\n name?: string;\n url?: string;\n icon?: string;\n sub_categories?: Category[];\n items?: any[] | null;\n}\n\nexport interface Currency {\n code: string | 'SAR';\n name: string;\n symbol: string;\n amount?: number;\n country_code?: string;\n}\n",".s-offer-wrapper .s-slider-block__title {\n h2 {\n font-size: 1.125rem;\n line-height: 1.75rem;\n color: #f87171;\n\n &::before {\n font-family: \"sallaicons\";\n content: \"\\ee30\" !important;\n position: absolute;\n top: 1rem;\n font-size: 3rem;\n font-weight: 400;\n line-height: 1;\n color: #fef2f2;\n }\n }\n}\n\n.s-offer-bank-wrapper-sinlge-item{\n display: flex;\n align-items: center !important;\n gap: 14px;\n}\n\n.s-offer-bank-wrapper {\n display: flex !important;\n width: 100% !important;\n}\n\n// .s-offer-bank-wrapper {\n // \n// }","import { Component, Element, Prop, State, h } from '@stencil/core';\nimport { Offer, Category, Product, Discount, Currency, BuyXGetYDetail, PageType, OfferType, BankOffer,SpecialPriceDetail, DiscountDetailTable } from './interfaces';\n\n\n/**\n * `salla-offer` is a StencilJS component that displays offers, categories, products, banks, and discount information.\n * It uses the `salla-slider` component for carousel functionality.\n *\n * @slot category - The slot for customizing the category entry layout.\n *\n * @csspart custom - Custom CSS part to target specific elements in the component.\n *\n * @example\n * <salla-offer product-id=\"123\"></salla-offer>\n */\n@Component({\n tag: 'salla-offer',\n styleUrl: 'salla-offer.scss',\n})\nexport class SallaOffer {\n\n constructor() {\n // Language\n salla.lang.onLoaded(() => {\n this.offer_with_price_text = salla.lang.get('pages.offer.with_price');\n this.with_discount_text = salla.lang.get('pages.products.with_a_discount');\n this.product_discount_text = salla.lang.get('pages.products.discount');\n this.special_offer_text = salla.lang.get('pages.products.special_offer');\n this.multipleBankOfferTitleText = salla.lang.get('pages.offer.multiple_bank_offers_title');\n this.multipleBankOfferTitleDescription = salla.lang.get('pages.offer.multiple_bank_offers_message');\n this.buy_quantity_text(0);\n })\n\n salla.onReady(() => {\n this.currentPage = salla.config.get('page.slug')\n this.userCurrency = salla.config.get('currencies')[salla.config.get('user.currency_code')].symbol\n });\n\n this.categorySlot = this.host.querySelector('[slot=\"category\"]')?.innerHTML || '<a href={url} class=\"s-offer-slide-cat-entry\"><i class={icon}></i><h4>{name}</h4></a>';\n }\n\n /**\n * Custom Card Component for the Salla Products List.\n *\n * This component allows you to customize the appearance of individual product cards within a Salla Products List.\n *\n * @example\n * <salla-products-list product-card-component=\"my-custom-card-style1\" ...\n * <salla-products-list product-card-component=\"my-custom-card-style2\" ...\n */\n @Prop() productCardComponent: string = 'custom-salla-product-card';\n\n // Declare component state variables\n @State() offersList: Offer[] = [];\n @State() userCurrency: Currency;\n @State() isMultipleBank: boolean = false;\n @State() title?: string;\n @State() currentPage: string;\n @State() hasCustomComponent: boolean;\n\n @State() isBankOffer: boolean = false;\n @State() canRender: boolean = false;\n @State() showOffer: boolean = salla.config.get('store.settings.product.show_special_offers');\n\n // Default translated texts\n @State() offer_with_price_text: string = salla.lang.get('pages.offer.with_price', { price: '' });\n @State() with_discount_text: string = salla.lang.get('pages.products.with_a_discount')\n @State() product_discount_text: string = salla.lang.get('pages.products.discount')\n @State() special_offer_text: string = salla.lang.get('pages.products.special_offer')\n @State() multipleBankOfferTitleText: string = salla.lang.get('pages.offer.multiple_bank_offers_title')\n @State() multipleBankOfferTitleDescription: string = salla.lang.get('pages.offer.multiple_bank_offers_message')\n @State() buy_quantity_text: (quantity: number) => string = (quantity) => salla.lang.get('pages.offer.buy_quantity', { quantity })\n\n // Reference to the host element\n @Element() host: HTMLElement;\n\n private categorySlot: string;\n\n private async getEndpointByPageName(): Promise<string> {\n if (this.currentPage == PageType.Cart) {\n const cartId = await Salla.cart.getCurrentCartId();\n return `offers/cart/${cartId}`;\n }\n\n if (this.currentPage == PageType.ProductDetail) {\n return `offers/product/${salla.config.get('page.id')}`;\n }\n\n return \"offers\";\n }\n\n /**\n * Emits a promotion viewed event for analytics tracking\n */\n private emitPromotionViewed(): void {\n if(!(this.offersList.length && this.canRender && this.showOffer)) return;\n \n // Transform offer data to match analytics expectations\n const promotionData = {\n id: this.offersList[0].id,\n name: this.offersList[0].title,\n creative: this.offersList[0].description || '',\n position: 1 \n };\n \n salla.event.emit('promotion::viewed', [promotionData]);\n }\n /**\n * Emits a promotion clicked event\n */\n private emitPromotionClicked(position: number = 1): void {\n if(!(this.offersList.length && this.canRender && this.showOffer)) return;\n \n // Transform offer data to match analytics expectations\n const promotionData = {\n id: this.offersList[0].id,\n name: this.offersList[0].title,\n creative: this.offersList[0].description || '',\n position: position\n };\n \n salla.event.emit('promotion::clicked', [promotionData]);\n }\n\n componentWillLoad() {\n this.hasCustomComponent = !!customElements.get(this.productCardComponent);\n // let offers = this.getOffersFromStorage();\n // if (offers) {\n // return offers.then(offersFromStorage => this.offersList = offersFromStorage);\n // }\n\n return (new Promise(resolve => salla.onReady(resolve)))\n .then(() => {\n this.showOffer = !salla.url.is_page('product.single') || salla.config.get('store.settings.product.show_special_offers')\n if (this.showOffer) {\n return;\n }\n throw new Error(\"Merchant disabled showing the offers on product page\");\n }\n )\n .then(async () => salla.api.request(await this.getEndpointByPageName()))\n .then((res) => {\n if (!(this.offersList = res.data).length) {\n throw new Error('salla-offers:: There is no offers!');\n }\n //we support these offers only\n const offer = this.offersList.find(offer => [OfferType.SpecialPrice,OfferType.Bank, OfferType.BuyXGetY, OfferType.DiscountsTable].includes(offer.type as any));\n if (!offer) {\n throw new Error('salla-offers:: Offer type not supported yet!');\n }\n //because there is no need for special handling for discounts table, just skip the other cases\n if (offer.type === OfferType.DiscountsTable) {\n return this.offersList = [offer];\n }\n\n //if it's banks offer, we need to include the other banks overs\n if ((this.isBankOffer = offer.type === OfferType.Bank)) {\n this.offersList = this.offersList.filter(offer => offer.type === OfferType.Bank);\n this.isMultipleBank = this.offersList.length > 1;\n return this.offersList;\n }\n\n //if it's special price offer\n if (offer.type === OfferType.SpecialPrice) {\n const details = offer.details as SpecialPriceDetail;\n\n return details.apply_to === 'product'\n // Avoid additional requests; use `salla-products-slider` and pass the custom card\n ? salla.product.api.fetch({ source: \"selected\", source_value: details.targets})\n .then((response: any) => {\n (offer.details as any).products = response.data; // Set the fetched products\n return this.offersList = [offer];\n })\n : salla.product.api.categories() // Fetch all categories in one query\n .then((res) => {\n const categoriesToRender = this.findCategories(res.data, details.targets); // Extract only the selected categories\n (offer.details as any).categories = categoriesToRender;\n return this.offersList = [offer];\n });\n }\n\n //BuyXGetY offers\n const getY = (offer.details as BuyXGetYDetail).get;\n return getY.source === 'products'\n //todo:: avoid this request, and the handling for the products, just use `salla-products-slider` and don't forget to pass the customcard\n ? salla.product.api.fetch({ source: \"selected\", source_value: getY.source_value })\n .then((response: any) => {\n getY.products = response.data;\n (offer.details as any).get = getY;\n return this.offersList = [offer];\n })//set the products\n : salla.product.api.categories()//get all categories in one query, then extract only the selected one, instead of sending multi requests\n .then((res) => {\n getY.categories = this.findCategories(res.data, getY.source_value);\n (offer.details as any).get = getY;\n return this.offersList = [offer];\n });\n })\n .then((offers: Offer[]) => {\n salla.storage.set(this.getStorageKey(), { offers, stored_at: new Date().getTime() });\n this.canRender = true;\n })\n .catch((error) => {\n salla.logger.warn(error)\n });\n }\n\n componentDidLoad() {\n let nav = this.host.querySelector('.s-slider-block__title-nav');\n nav?.classList.add(\"s-offer-bank-payment-nav\")\n this.emitPromotionViewed();\n }\n\n \n\n\n findCategories(categories: Category[], ids: any[]): Category[] {\n let found: Category[] = [];\n for (const category of categories) {\n if (ids.includes(category.id_ || category.id)) { //here we are using || because we are planning to drop `id_`\n found.push(category);\n }\n if (category.sub_categories?.length > 0) {\n found = found.concat(this.findCategories(category.sub_categories, ids));\n }\n }\n\n return found;\n }\n\n //todo::add to the key params, to make sure it will support multi offers in the same page if it's wanted\n getStorageKey(): string {\n try {\n const pageSlug = salla.config.get('page.slug').replace('.', '_');\n const locale = salla.lang.getLocale();\n const currencyCode = salla.config.currency().code;\n\n if (!pageSlug || !locale || !currencyCode) {\n throw new Error('Unable to get the storage key.');\n }\n\n return `s-offers-${pageSlug}-${salla.config.get('page.id')}-${locale}-${currencyCode}`;\n } catch (error) {\n return '';\n }\n }\n\n //@ts-ignore\n getOffersFromStorage(): null | Promise<Offer[]> {\n let storageOffers = salla.storage.get(this.getStorageKey());\n //if the offers not existed, or it has been stored before 10 minutes from now, ignore it;\n if (!storageOffers || storageOffers.stored_at < (new Date().getTime() - 10 * 60 * 1000)) {\n salla.storage.remove(this.getStorageKey());\n return null;\n }\n this.canRender = true;\n\n //return it as resolve to support .then\n return Promise.resolve(storageOffers.offers);\n }\n\n render() {\n // Check if the offers list is empty or if the component is not ready to render\n if (!this.offersList.length || !this.canRender || !this.showOffer) return null;\n const offer: Offer = this.offersList[0];\n\n const blockTitle = this.isBankOffer ? (this.isMultipleBank ? this.multipleBankOfferTitleText : null) : offer.title;\n const blockSubTitle = this.isBankOffer ? (this.isMultipleBank ? this.multipleBankOfferTitleDescription : null) : offer.description;\n\n const titles = {\n 'block-title': blockTitle,\n 'block-subTitle': blockSubTitle,\n 'show-controls': this.isMultipleBank\n };\n\n return (\n <div class=\"s-offer-wrapper\" onClick={() => this.emitPromotionClicked()}>\n {<p class=\"s-offer-corner-badge\">{this.special_offer_text}</p>}\n {/* discounts table is not a slider, it's a table🤔 */}\n {/* single bank offer is not a slider, it's a dom without slider🤔 */}\n <salla-slider type=\"carousel\" id=\"offer-slider\" {...titles}>\n <div slot='items'>\n {this.renderSectionForOfferType(offer.type)}\n </div>\n </salla-slider>\n </div>\n );\n }\n\n private renderSectionForOfferType(offerType: OfferType | string) {\n if (this.isBankOffer) {\n return this.renderBankSection();\n }\n if (offerType == OfferType.SpecialPrice) {\n return this.renderSpecialPriceSection();\n }\n if (offerType == OfferType.BuyXGetY) {\n return this.renderBuyXGetYSection();\n }\n\n return this.renderDiscountTableSection();\n }\n\n /**\n * Generates content for the categories section.\n *\n * @param offeredCategories - An array of Category objects.\n * @returns An array of HTML elements representing categories.\n */\n private getCategoriesSection(category: Category) {\n return <div class=\"s-offer-slide-one-sixth swiper-slide\" innerHTML={this.categorySlot\n .replace(/\\{url\\}/g, category.url)\n .replace(/\\{icon\\}/g, category.icon || \"sicon-store\")\n .replace(/\\{name\\}/g, category.name)}></div>\n }\n\n private renderBuyXGetYSection() {\n const details = (this.offersList[0].details as BuyXGetYDetail)\n return [\n details.get.products?.map((product: Product) => (\n <div class=\"s-offer-slide-one-fourth\">\n {this.hasCustomComponent\n ? <this.productCardComponent product={product}></this.productCardComponent>\n : <salla-product-card shadow-on-hover product={product}></salla-product-card>}\n </div>\n )),\n details.get.categories?.map((category: Category) => this.getCategoriesSection(category))\n ];\n }\n\n /**\n * Generates content for the bank section.\n *\n * @param offeredBank - An array of Bank objects.\n * @param name - The title of the current offer.\n * @param description - The description of the current offer.\n * @returns An array of HTML elements representing banks.\n *\n * TODO: loop over the list and filter bank types and pass it to this function\n */\n private renderBankSection() {\n return this.offersList.map((bankOffer: Offer) => {\n return <div class={{ \"s-offer-slide-one-sixth\": this.isMultipleBank, \"s-offer-bank-wrapper-sinlge-item\": !this.isMultipleBank }}>\n <div class={{ \"s-offer-bank-wrapper\": true, \"s-offer-slide-one-sixth\": !this.isMultipleBank, \"s-offer-bank-wrapper-multi-spacer\": this.isMultipleBank }}>\n <div class=\"s-offer-bank-logo\">\n <img src={(bankOffer.details as BankOffer).logo || salla.url.cdn('images/s-empty.png')} data-src={(bankOffer.details as BankOffer).logo} alt={bankOffer.title + \" offer\"} />\n </div>\n <ul class=\"s-offer-bank-payment-wrapper\">\n {(bankOffer.details as BankOffer).payments.map((payment: string) => {\n return <li class=\"s-offer-bank-payment-single\">\n <img\n src={salla.url.cdn('images/payment/' + payment + '.png') || salla.url.cdn('images/s-empty.png')}\n data-src={salla.url.cdn('images/payment/' + payment + '.png')}\n alt=\"payment\" />\n </li>\n })}\n </ul>\n {this.isMultipleBank ?\n <p class=\"s-offer-bank-payment-discount-percent\">\n {`${this.product_discount_text} ${(bankOffer.details as BankOffer).discount_value}${(bankOffer.details as BankOffer).discount_type === \"percentage\" && '%'}`}\n </p>\n : \"\"}\n </div>\n {!this.isMultipleBank ?\n <div class=\"s-offer-bank-message s-offer-slide-one-fourth\">\n <h2>{this.offersList[0].title}</h2>\n <p innerHTML={this.generateBankDescription(this.offersList[0].description, (bankOffer.details as BankOffer).discount_value)}></p>\n </div>\n : \"\"}\n </div>\n })\n }\n\n private generateBankDescription(desc: string, value): string {\n return desc.replace(new RegExp(`${value} %`), `<span class=\"s-offer-bank-message-amount\">${value} %</span>`)\n }\n\n /**\n * Generates content for the discount table section.\n *\n * @param discountTable - An array of Discount objects.\n * @returns An array of HTML elements representing discounts_table.\n */\n private renderDiscountTableSection() {\n const offer: Offer = this.offersList[0];\n let show_discounted_price = (offer.details as DiscountDetailTable).show_price_after_discount;\n return (this.offersList[0].details as DiscountDetailTable).discounts?.map((discount: Discount) => <div class=\"s-offer-slide-one-fourth\">\n <div class=\"s-offer-slide-offer-entry\">\n <div class=\"s-offer-slide-offer-entry-price-quantity-container\">\n <p class=\"s-offer-slide-offer-entry-quantity\">{this.buy_quantity_text(discount.quantity)}</p>\n {show_discounted_price ?\n <div class=\"s-offer-slide-offer-entry-price\">\n <span>{this.offer_with_price_text}</span>\n <span class=\"s-offer-slide-offer-entry-price-amount\">{discount.discounted_amount}</span> <span>{this.userCurrency}</span>\n </div> : \"\"}\n </div>\n <p class=\"s-offer-slide-offer-entry-price-amount-percent\">{this.with_discount_text}\n (<span>{discount.percentage}{!!discount.percentage && '%'}</span>)</p>\n </div>\n </div>\n )\n }\n\n private renderSpecialPriceSection() {\n const details = this.offersList[0].details as SpecialPriceDetail;\n\n return [\n // Render products if `apply_to` is \"product\"\n details.apply_to === \"product\" &&\n details.products?.map((product:Product) => (\n <div class=\"s-offer-slide-one-fourth\">\n {this.hasCustomComponent\n ? <this.productCardComponent product={product}></this.productCardComponent>\n : <salla-product-card shadow-on-hover product={product}></salla-product-card>}\n </div>\n )),\n\n // Render categories if `apply_to` is \"category\"\n details.apply_to === \"category\" &&\n details.categories?.map((category: Category) => this.getCategoriesSection(category)),\n ];\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-BfizdcIv.system.js","sources":["src/components/salla-offer/interfaces.ts","src/components/salla-offer/salla-offer.scss?tag=salla-offer","src/components/salla-offer/salla-offer.tsx"],"sourcesContent":["export enum PageType {\n ProductDetail = \"product.single\",\n Cart = \"cart\"\n}\n\nexport enum OfferType {\n Conditional = \"conditional\",\n PercentageOrFixed = \"fixed\",\n DiscountsTable = \"discounts_table\",\n Bank = \"bank\",\n BuyXGetY = \"buy_x_get_y\",\n SpecialPrice = \"special_price\",\n}\n\n\nexport interface DiscountDetailFixed {\n discount_type: \"fixed\";\n min_spend: number;\n discount_value: number;\n}\n\nexport interface DiscountDetailFreeProduct {\n discount_type: \"free_product\";\n min_spend: number;\n discount_value: number;\n}\n\nexport interface DiscountDetailConditional extends Array<DiscountDetailFixed | DiscountDetailFreeProduct> {}\n\nexport interface DiscountDetailPercentageFixed {\n apply_to: \"all\" | \"products\" | \"categories\" | \"payment_methods\";\n targets: Array<string | number>;\n ends_at: number;\n min_spend: number;\n discount_value: number;\n}\n\nexport interface Discount {\n discounted_amount: any;\n quantity: number;\n percentage: number;\n}\n\nexport interface DiscountDetailTable {\n apply_to: \"all\" | \"products\" | \"categories\" | \"payment_methods\" | \"order\";\n discount_value: number;\n ends_at: string;\n min_items: number;\n min_spend: number;\n show_price_after_discount: boolean;\n discounts: Discount[];\n}\n\nexport interface BankOffer {\n logo: string;\n discount_value: number;\n discount_type: string;\n minimum_spend: number;\n payments: string[];\n}\n\nexport interface SpecialPriceDetail {\n apply_to: \"product\" | \"category\";\n discount_value: number;\n ends_at: number;\n min_items: number; \n min_spend: number;\n targets: Array<string | number>;\n products?: Product[];//we will set this dynamically\n categories?: Category[];//we will set this dynamically\n\n}\n\nexport interface BuyXGetYDetail {\n ends_at: number;\n buy: {\n source: \"product\" | \"category\";\n source_value: number[];\n quantity: number;\n };\n get: {\n source: \"products\" | \"category\";\n source_value: number[];\n type: \"free_product\" | \"percentage\" | \"fixed\";\n value: number;\n products?: Product[];//we will set this dynamically\n categories?: Category[];//we will set this dynamically\n };\n}\n\nexport interface Offer {\n id: number;\n title: string;\n description: string;\n type: OfferType | \"conditional\" | \"fixed\" | \"discounts_table\" | \"bank\" | \"buy_x_get_y\";\n details: DiscountDetailConditional | DiscountDetailPercentageFixed | DiscountDetailTable | BankOffer | BuyXGetYDetail | SpecialPriceDetail;\n}\n\nexport interface Product {\n id: number;\n type: string;\n status: string;\n is_available: boolean;\n sku: string;\n name: string;\n price: { amount: number; currency: string; };\n promotion: { title: string; sub_title: string; };\n sale_price: { amount: number; currency: string; };\n regular_price: { amount: number; currency: string; };\n currency: string;\n url: string;\n thumbnail: string;\n has_special_price: boolean;\n favorite?: any;\n}\n\nexport interface Category {\n id?: string;\n id_?: number;\n name?: string;\n url?: string;\n icon?: string;\n sub_categories?: Category[];\n items?: any[] | null;\n}\n\nexport interface Currency {\n code: string | 'SAR';\n name: string;\n symbol: string;\n amount?: number;\n country_code?: string;\n}\n",".s-offer-wrapper .s-slider-block__title {\n h2 {\n font-size: 1.125rem;\n line-height: 1.75rem;\n color: #f87171;\n\n &::before {\n font-family: \"sallaicons\";\n content: \"\\ee30\" !important;\n position: absolute;\n top: 1rem;\n font-size: 3rem;\n font-weight: 400;\n line-height: 1;\n color: #fef2f2;\n }\n }\n}\n\n.s-offer-bank-wrapper-sinlge-item{\n display: flex;\n align-items: center !important;\n gap: 14px;\n}\n\n.s-offer-bank-wrapper {\n display: flex !important;\n width: 100% !important;\n}\n\n// .s-offer-bank-wrapper {\n // \n// }","import { Component, Element, Prop, State, h } from '@stencil/core';\nimport { Offer, Category, Product, Discount, Currency, BuyXGetYDetail, PageType, OfferType, BankOffer,SpecialPriceDetail, DiscountDetailTable } from './interfaces';\n\n\n/**\n * `salla-offer` is a StencilJS component that displays offers, categories, products, banks, and discount information.\n * It uses the `salla-slider` component for carousel functionality.\n *\n * @slot category - The slot for customizing the category entry layout.\n *\n * @csspart custom - Custom CSS part to target specific elements in the component.\n *\n * @example\n * <salla-offer product-id=\"123\"></salla-offer>\n */\n@Component({\n tag: 'salla-offer',\n styleUrl: 'salla-offer.scss',\n})\nexport class SallaOffer {\n\n constructor() {\n // Language\n salla.lang.onLoaded(() => {\n this.offer_with_price_text = salla.lang.get('pages.offer.with_price');\n this.with_discount_text = salla.lang.get('pages.products.with_a_discount');\n this.product_discount_text = salla.lang.get('pages.products.discount');\n this.special_offer_text = salla.lang.get('pages.products.special_offer');\n this.multipleBankOfferTitleText = salla.lang.get('pages.offer.multiple_bank_offers_title');\n this.multipleBankOfferTitleDescription = salla.lang.get('pages.offer.multiple_bank_offers_message');\n this.buy_quantity_text(0);\n })\n\n salla.onReady(() => {\n this.currentPage = salla.config.get('page.slug')\n this.userCurrency = salla.config.get('currencies')[salla.config.get('user.currency_code')].symbol\n });\n\n this.categorySlot = this.host.querySelector('[slot=\"category\"]')?.innerHTML || '<a href={url} class=\"s-offer-slide-cat-entry\"><i class={icon}></i><h4>{name}</h4></a>';\n }\n\n /**\n * Custom Card Component for the Salla Products List.\n *\n * This component allows you to customize the appearance of individual product cards within a Salla Products List.\n *\n * @example\n * <salla-products-list product-card-component=\"my-custom-card-style1\" ...\n * <salla-products-list product-card-component=\"my-custom-card-style2\" ...\n */\n @Prop() productCardComponent: string = 'custom-salla-product-card';\n\n // Declare component state variables\n @State() offersList: Offer[] = [];\n @State() userCurrency: Currency;\n @State() isMultipleBank: boolean = false;\n @State() title?: string;\n @State() currentPage: string;\n @State() hasCustomComponent: boolean;\n\n @State() isBankOffer: boolean = false;\n @State() canRender: boolean = false;\n @State() showOffer: boolean = salla.config.get('store.settings.product.show_special_offers');\n\n // Default translated texts\n @State() offer_with_price_text: string = salla.lang.get('pages.offer.with_price', { price: '' });\n @State() with_discount_text: string = salla.lang.get('pages.products.with_a_discount')\n @State() product_discount_text: string = salla.lang.get('pages.products.discount')\n @State() special_offer_text: string = salla.lang.get('pages.products.special_offer')\n @State() multipleBankOfferTitleText: string = salla.lang.get('pages.offer.multiple_bank_offers_title')\n @State() multipleBankOfferTitleDescription: string = salla.lang.get('pages.offer.multiple_bank_offers_message')\n @State() buy_quantity_text: (quantity: number) => string = (quantity) => salla.lang.get('pages.offer.buy_quantity', { quantity })\n\n // Reference to the host element\n @Element() host: HTMLElement;\n\n private categorySlot: string;\n\n private async getEndpointByPageName(): Promise<string> {\n if (this.currentPage == PageType.Cart) {\n const cartId = await Salla.cart.getCurrentCartId();\n return `offers/cart/${cartId}`;\n }\n\n if (this.currentPage == PageType.ProductDetail) {\n return `offers/product/${salla.config.get('page.id')}`;\n }\n\n return \"offers\";\n }\n\n /**\n * Emits a promotion viewed event for analytics tracking\n */\n private emitPromotionViewed(): void {\n if(!(this.offersList.length && this.canRender && this.showOffer)) return;\n \n // Transform offer data to match analytics expectations\n const promotionData = {\n id: this.offersList[0].id,\n name: this.offersList[0].title,\n creative: this.offersList[0].description || '',\n position: 1 \n };\n \n salla.event.emit('promotion::viewed', [promotionData]);\n }\n /**\n * Emits a promotion clicked event\n */\n private emitPromotionClicked(position: number = 1): void {\n if(!(this.offersList.length && this.canRender && this.showOffer)) return;\n \n // Transform offer data to match analytics expectations\n const promotionData = {\n id: this.offersList[0].id,\n name: this.offersList[0].title,\n creative: this.offersList[0].description || '',\n position: position\n };\n \n salla.event.emit('promotion::clicked', [promotionData]);\n }\n\n componentWillLoad() {\n this.hasCustomComponent = !!customElements.get(this.productCardComponent);\n // let offers = this.getOffersFromStorage();\n // if (offers) {\n // return offers.then(offersFromStorage => this.offersList = offersFromStorage);\n // }\n\n return (new Promise(resolve => salla.onReady(resolve)))\n .then(() => {\n this.showOffer = !salla.url.is_page('product.single') || salla.config.get('store.settings.product.show_special_offers')\n if (this.showOffer) {\n return;\n }\n throw new Error(\"Merchant disabled showing the offers on product page\");\n }\n )\n .then(async () => salla.api.request(await this.getEndpointByPageName()))\n .then((res) => {\n if (!(this.offersList = res.data).length) {\n throw new Error('salla-offers:: There is no offers!');\n }\n //we support these offers only\n const offer = this.offersList.find(offer => [OfferType.SpecialPrice,OfferType.Bank, OfferType.BuyXGetY, OfferType.DiscountsTable].includes(offer.type as any));\n if (!offer) {\n throw new Error('salla-offers:: Offer type not supported yet!');\n }\n //because there is no need for special handling for discounts table, just skip the other cases\n if (offer.type === OfferType.DiscountsTable) {\n return this.offersList = [offer];\n }\n\n //if it's banks offer, we need to include the other banks overs\n if ((this.isBankOffer = offer.type === OfferType.Bank)) {\n this.offersList = this.offersList.filter(offer => offer.type === OfferType.Bank);\n this.isMultipleBank = this.offersList.length > 1;\n return this.offersList;\n }\n\n //if it's special price offer\n if (offer.type === OfferType.SpecialPrice) {\n const details = offer.details as SpecialPriceDetail;\n\n return details.apply_to === 'product'\n // Avoid additional requests; use `salla-products-slider` and pass the custom card\n ? salla.product.api.fetch({ source: \"selected\", source_value: details.targets})\n .then((response: any) => {\n (offer.details as any).products = response.data; // Set the fetched products\n return this.offersList = [offer];\n })\n : salla.product.api.categories() // Fetch all categories in one query\n .then((res) => {\n const categoriesToRender = this.findCategories(res.data, details.targets); // Extract only the selected categories\n (offer.details as any).categories = categoriesToRender;\n return this.offersList = [offer];\n });\n }\n\n //BuyXGetY offers\n const getY = (offer.details as BuyXGetYDetail).get;\n return getY.source === 'products'\n //todo:: avoid this request, and the handling for the products, just use `salla-products-slider` and don't forget to pass the customcard\n ? salla.product.api.fetch({ source: \"selected\", source_value: getY.source_value })\n .then((response: any) => {\n getY.products = response.data;\n (offer.details as any).get = getY;\n return this.offersList = [offer];\n })//set the products\n : salla.product.api.categories()//get all categories in one query, then extract only the selected one, instead of sending multi requests\n .then((res) => {\n getY.categories = this.findCategories(res.data, getY.source_value);\n (offer.details as any).get = getY;\n return this.offersList = [offer];\n });\n })\n .then((offers: Offer[]) => {\n salla.storage.set(this.getStorageKey(), { offers, stored_at: new Date().getTime() });\n this.canRender = true;\n })\n .catch((error) => {\n salla.logger.warn(error)\n });\n }\n\n componentDidLoad() {\n let nav = this.host.querySelector('.s-slider-block__title-nav');\n nav?.classList.add(\"s-offer-bank-payment-nav\")\n this.emitPromotionViewed();\n }\n\n \n\n\n findCategories(categories: Category[], ids: any[]): Category[] {\n let found: Category[] = [];\n for (const category of categories) {\n if (ids.includes(category.id_ || category.id)) { //here we are using || because we are planning to drop `id_`\n found.push(category);\n }\n if (category.sub_categories?.length > 0) {\n found = found.concat(this.findCategories(category.sub_categories, ids));\n }\n }\n\n return found;\n }\n\n //todo::add to the key params, to make sure it will support multi offers in the same page if it's wanted\n getStorageKey(): string {\n try {\n const pageSlug = salla.config.get('page.slug').replace('.', '_');\n const locale = salla.lang.getLocale();\n const currencyCode = salla.config.currency().code;\n\n if (!pageSlug || !locale || !currencyCode) {\n throw new Error('Unable to get the storage key.');\n }\n\n return `s-offers-${pageSlug}-${salla.config.get('page.id')}-${locale}-${currencyCode}`;\n } catch (error) {\n return '';\n }\n }\n\n //@ts-ignore\n getOffersFromStorage(): null | Promise<Offer[]> {\n let storageOffers = salla.storage.get(this.getStorageKey());\n //if the offers not existed, or it has been stored before 10 minutes from now, ignore it;\n if (!storageOffers || storageOffers.stored_at < (new Date().getTime() - 10 * 60 * 1000)) {\n salla.storage.remove(this.getStorageKey());\n return null;\n }\n this.canRender = true;\n\n //return it as resolve to support .then\n return Promise.resolve(storageOffers.offers);\n }\n\n render() {\n // Check if the offers list is empty or if the component is not ready to render\n if (!this.offersList.length || !this.canRender || !this.showOffer) return null;\n const offer: Offer = this.offersList[0];\n\n const blockTitle = this.isBankOffer ? (this.isMultipleBank ? this.multipleBankOfferTitleText : null) : offer.title;\n const blockSubTitle = this.isBankOffer ? (this.isMultipleBank ? this.multipleBankOfferTitleDescription : null) : offer.description;\n\n const titles = {\n 'block-title': blockTitle,\n 'block-subTitle': blockSubTitle,\n 'show-controls': this.isMultipleBank\n };\n\n return (\n <div class=\"s-offer-wrapper\" onClick={() => this.emitPromotionClicked()}>\n {<p class=\"s-offer-corner-badge\">{this.special_offer_text}</p>}\n {/* discounts table is not a slider, it's a table🤔 */}\n {/* single bank offer is not a slider, it's a dom without slider🤔 */}\n <salla-slider type=\"carousel\" id=\"offer-slider\" {...titles}>\n <div slot='items'>\n {this.renderSectionForOfferType(offer.type)}\n </div>\n </salla-slider>\n </div>\n );\n }\n\n private renderSectionForOfferType(offerType: OfferType | string) {\n if (this.isBankOffer) {\n return this.renderBankSection();\n }\n if (offerType == OfferType.SpecialPrice) {\n return this.renderSpecialPriceSection();\n }\n if (offerType == OfferType.BuyXGetY) {\n return this.renderBuyXGetYSection();\n }\n\n return this.renderDiscountTableSection();\n }\n\n /**\n * Generates content for the categories section.\n *\n * @param offeredCategories - An array of Category objects.\n * @returns An array of HTML elements representing categories.\n */\n private getCategoriesSection(category: Category) {\n return <div class=\"s-offer-slide-one-sixth swiper-slide\" innerHTML={this.categorySlot\n .replace(/\\{url\\}/g, category.url)\n .replace(/\\{icon\\}/g, category.icon || \"sicon-store\")\n .replace(/\\{name\\}/g, category.name)}></div>\n }\n\n private renderBuyXGetYSection() {\n const details = (this.offersList[0].details as BuyXGetYDetail)\n return [\n details.get.products?.map((product: Product) => (\n <div class=\"s-offer-slide-one-fourth\">\n {this.hasCustomComponent\n ? <this.productCardComponent product={product}></this.productCardComponent>\n : <salla-product-card shadow-on-hover product={product}></salla-product-card>}\n </div>\n )),\n details.get.categories?.map((category: Category) => this.getCategoriesSection(category))\n ];\n }\n\n /**\n * Generates content for the bank section.\n *\n * @param offeredBank - An array of Bank objects.\n * @param name - The title of the current offer.\n * @param description - The description of the current offer.\n * @returns An array of HTML elements representing banks.\n *\n * TODO: loop over the list and filter bank types and pass it to this function\n */\n private renderBankSection() {\n return this.offersList.map((bankOffer: Offer) => {\n return <div class={{ \"s-offer-slide-one-sixth\": this.isMultipleBank, \"s-offer-bank-wrapper-sinlge-item\": !this.isMultipleBank }}>\n <div class={{ \"s-offer-bank-wrapper\": true, \"s-offer-slide-one-sixth\": !this.isMultipleBank, \"s-offer-bank-wrapper-multi-spacer\": this.isMultipleBank }}>\n <div class=\"s-offer-bank-logo\">\n <img src={(bankOffer.details as BankOffer).logo || salla.url.cdn('images/s-empty.png')} data-src={(bankOffer.details as BankOffer).logo} alt={bankOffer.title + \" offer\"} />\n </div>\n <ul class=\"s-offer-bank-payment-wrapper\">\n {(bankOffer.details as BankOffer).payments.map((payment: string) => {\n return <li class=\"s-offer-bank-payment-single\">\n <img\n src={salla.url.cdn('images/payment/' + payment + '.png') || salla.url.cdn('images/s-empty.png')}\n data-src={salla.url.cdn('images/payment/' + payment + '.png')}\n alt=\"payment\" />\n </li>\n })}\n </ul>\n {this.isMultipleBank ?\n <p class=\"s-offer-bank-payment-discount-percent\">\n {`${this.product_discount_text} ${(bankOffer.details as BankOffer).discount_value}${(bankOffer.details as BankOffer).discount_type === \"percentage\" && '%'}`}\n </p>\n : \"\"}\n </div>\n {!this.isMultipleBank ?\n <div class=\"s-offer-bank-message s-offer-slide-one-fourth\">\n <h2>{this.offersList[0].title}</h2>\n <p innerHTML={this.generateBankDescription(this.offersList[0].description, (bankOffer.details as BankOffer).discount_value)}></p>\n </div>\n : \"\"}\n </div>\n })\n }\n\n private generateBankDescription(desc: string, value): string {\n return desc.replace(new RegExp(`${value} %`), `<span class=\"s-offer-bank-message-amount\">${value} %</span>`)\n }\n\n /**\n * Generates content for the discount table section.\n *\n * @param discountTable - An array of Discount objects.\n * @returns An array of HTML elements representing discounts_table.\n */\n private renderDiscountTableSection() {\n const offer: Offer = this.offersList[0];\n let show_discounted_price = (offer.details as DiscountDetailTable).show_price_after_discount;\n return (this.offersList[0].details as DiscountDetailTable).discounts?.map((discount: Discount) => <div class=\"s-offer-slide-one-fourth\">\n <div class=\"s-offer-slide-offer-entry\">\n <div class=\"s-offer-slide-offer-entry-price-quantity-container\">\n <p class=\"s-offer-slide-offer-entry-quantity\">{this.buy_quantity_text(discount.quantity)}</p>\n {show_discounted_price ?\n <div class=\"s-offer-slide-offer-entry-price\">\n <span>{this.offer_with_price_text}</span>\n <span class=\"s-offer-slide-offer-entry-price-amount\">{discount.discounted_amount}</span> <span>{this.userCurrency}</span>\n </div> : \"\"}\n </div>\n <p class=\"s-offer-slide-offer-entry-price-amount-percent\">{this.with_discount_text}\n (<span>{discount.percentage}{!!discount.percentage && '%'}</span>)</p>\n </div>\n </div>\n )\n }\n\n private renderSpecialPriceSection() {\n const details = this.offersList[0].details as SpecialPriceDetail;\n\n return [\n // Render products if `apply_to` is \"product\"\n details.apply_to === \"product\" &&\n details.products?.map((product:Product) => (\n <div class=\"s-offer-slide-one-fourth\">\n {this.hasCustomComponent\n ? <this.productCardComponent product={product}></this.productCardComponent>\n : <salla-product-card shadow-on-hover product={product}></salla-product-card>}\n </div>\n )),\n\n // Render categories if `apply_to` is \"category\"\n details.apply_to === \"category\" &&\n details.categories?.map((category: Category) => this.getCategoriesSection(category)),\n ];\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;YAAA,IAAY,QAGX;YAHD,CAAA,UAAY,QAAQ,EAAA;YAClB,IAAA,QAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;YAChC,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;YACf,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAGnB,EAAA,CAAA,CAAA;YAED,IAAY,SAOX;YAPD,CAAA,UAAY,SAAS,EAAA;YACnB,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;YAC3B,IAAA,SAAA,CAAA,mBAAA,CAAA,GAAA,OAA2B;YAC3B,IAAA,SAAA,CAAA,gBAAA,CAAA,GAAA,iBAAkC;YAClC,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa;YACb,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,aAAwB;YACxB,IAAA,SAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;YAChC,CAAC,EAPW,SAAS,KAAT,SAAS,GAOpB,EAAA,CAAA,CAAA;;YCZD,MAAM,aAAa,GAAG,khBAAkhB;;kBCmB3hB,UAAU,0BAAA,MAAA;YAErB,IAAA,WAAA,CAAA,OAAA,EAAA;;;YAoBA;;;;;;;;YAQG;YACK,QAAA,IAAoB,CAAA,oBAAA,GAAW,2BAA2B;;YAGzD,QAAA,IAAU,CAAA,UAAA,GAAY,EAAE;YAExB,QAAA,IAAc,CAAA,cAAA,GAAY,KAAK;YAK/B,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK;YAC5B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK;oBAC1B,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC;;YAGnF,QAAA,IAAA,CAAA,qBAAqB,GAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;oBACvF,IAAkB,CAAA,kBAAA,GAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC;oBAC7E,IAAqB,CAAA,qBAAA,GAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;oBACzE,IAAkB,CAAA,kBAAA,GAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC;oBAC3E,IAA0B,CAAA,0BAAA,GAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,wCAAwC,CAAC;oBAC7F,IAAiC,CAAA,iCAAA,GAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,0CAA0C,CAAC;oBACtG,IAAA,CAAA,iBAAiB,GAAiC,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,CAAC;;YAhD/H,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAK;wBACvB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC;wBACrE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC;wBAC1E,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;wBACtE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC;wBACxE,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,wCAAwC,CAAC;wBAC1F,IAAI,CAAC,iCAAiC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,0CAA0C,CAAC;YACnG,YAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC3B,SAAC,CAAC;YAEF,QAAA,KAAK,CAAC,OAAO,CAAC,MAAK;wBACjB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;wBAChD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM;YACnG,SAAC,CAAC;YAEF,QAAA,IAAI,CAAC,YAAY,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,0CAAE,SAAS,KAAI,uFAAuF;YACvK;YAuCO,IAAA,MAAM,qBAAqB,GAAA;oBACjC,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,EAAE;wBACrC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE;wBAClD,OAAO,CAAA,YAAA,EAAe,MAAM,CAAA,CAAE;;oBAGhC,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,aAAa,EAAE;wBAC9C,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA,CAAE;;YAGxD,QAAA,OAAO,QAAQ;;YAGd;;YAEA;gBACQ,mBAAmB,GAAA;YAC1B,QAAA,IAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;wBAAE;;YAGlE,QAAA,MAAM,aAAa,GAAG;wBACpB,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;wBAC9B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE;YAC9C,YAAA,QAAQ,EAAE;qBACX;oBAED,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,aAAa,CAAC,CAAC;;YAExD;;YAEG;gBACK,oBAAoB,CAAC,WAAmB,CAAC,EAAA;YAC/C,QAAA,IAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;wBAAE;;YAGlE,QAAA,MAAM,aAAa,GAAG;wBACpB,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;wBAC9B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE;YAC9C,YAAA,QAAQ,EAAE;qBACX;oBAED,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC,CAAC;;gBAG3D,iBAAiB,GAAA;YACf,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;;;;;YAMzE,QAAA,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;yBACnD,IAAI,CAAC,MAAK;wBACT,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC;YACvH,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;4BAClB;;YAEF,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;YACzE,SAAC;YAEA,aAAA,IAAI,CAAC,YAAY,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACtE,aAAA,IAAI,CAAC,CAAC,GAAG,KAAI;YACZ,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE;YACxC,gBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;;;YAGvD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,EAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAW,CAAC,CAAC;wBAC9J,IAAI,CAAC,KAAK,EAAE;YACV,gBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;;;wBAGjE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,cAAc,EAAE;YAC3C,gBAAA,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC;;;YAIlC,YAAA,KAAK,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,GAAG;4BACtD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC;4BAChF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;4BAChD,OAAO,IAAI,CAAC,UAAU;;;wBAIxB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,YAAY,EAAE;YACzC,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAA6B;YAEnD,gBAAA,OAAO,OAAO,CAAC,QAAQ,KAAK;;kCAExB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,OAAO,EAAC;YAC3E,yBAAA,IAAI,CAAC,CAAC,QAAa,KAAI;oCACrB,KAAK,CAAC,OAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;YAChD,wBAAA,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC;YAClC,qBAAC;kCACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;YAC3B,yBAAA,IAAI,CAAC,CAAC,GAAG,KAAI;YACZ,wBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACzE,wBAAA,KAAK,CAAC,OAAe,CAAC,UAAU,GAAG,kBAAkB;YACtD,wBAAA,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC;YAClC,qBAAC,CAAC;;;YAIV,YAAA,MAAM,IAAI,GAAI,KAAK,CAAC,OAA0B,CAAC,GAAG;YAClD,YAAA,OAAO,IAAI,CAAC,MAAM,KAAK;;8BAEnB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9E,qBAAA,IAAI,CAAC,CAAC,QAAa,KAAI;YACtB,oBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI;YAC5B,oBAAA,KAAK,CAAC,OAAe,CAAC,GAAG,GAAG,IAAI;YACjC,oBAAA,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC;6BACjC,CAAC;8BACF,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;YAC7B,qBAAA,IAAI,CAAC,CAAC,GAAG,KAAI;YACZ,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;YACjE,oBAAA,KAAK,CAAC,OAAe,CAAC,GAAG,GAAG,IAAI;YACjC,oBAAA,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC;YAClC,iBAAC,CAAC;YACR,SAAC;YACA,aAAA,IAAI,CAAC,CAAC,MAAe,KAAI;wBACxB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YACpF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACvB,SAAC;YACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;YACf,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,SAAC,CAAC;;gBAGN,gBAAgB,GAAA;oBACd,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC;oBAC/D,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC;oBAC9C,IAAI,CAAC,mBAAmB,EAAE;;gBAM5B,cAAc,CAAC,UAAsB,EAAE,GAAU,EAAA;;oBAC/C,IAAI,KAAK,GAAe,EAAE;YAC1B,QAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;YACjC,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC7C,gBAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;;YAEtB,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,cAAc,0CAAE,MAAM,IAAG,CAAC,EAAE;YACvC,gBAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;;;YAI3E,QAAA,OAAO,KAAK;;;gBAId,aAAa,GAAA;YACX,QAAA,IAAI;YACF,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;wBAChE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE;wBACrC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI;wBAEjD,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE;YACzC,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;;YAGnD,YAAA,OAAO,YAAY,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAI,CAAA,EAAA,MAAM,CAAI,CAAA,EAAA,YAAY,EAAE;;oBACtF,OAAO,KAAK,EAAE;YACd,YAAA,OAAO,EAAE;;;;gBAKb,oBAAoB,GAAA;YAClB,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;;oBAE3D,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;wBACvF,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1C,YAAA,OAAO,IAAI;;YAEb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;oBAGrB,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;;gBAG9C,MAAM,GAAA;;YAEJ,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,YAAA,OAAO,IAAI;oBAC9E,MAAM,KAAK,GAAU,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAEvC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,0BAA0B,GAAG,IAAI,IAAI,KAAK,CAAC,KAAK;YAClH,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iCAAiC,GAAG,IAAI,IAAI,KAAK,CAAC,WAAW;YAElI,QAAA,MAAM,MAAM,GAAG;YACb,YAAA,aAAa,EAAE,UAAU;YACzB,YAAA,gBAAgB,EAAE,aAAa;wBAC/B,eAAe,EAAE,IAAI,CAAC;qBACvB;YAED,QAAA,QACE,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,iBAAiB,EAAC,OAAO,EAAE,MAAM,IAAI,CAAC,oBAAoB,EAAE,EAAA,EACpE,CAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAC,sBAAsB,IAAE,IAAI,CAAC,kBAAkB,CAAK,EAG9D,CAAc,CAAA,cAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,IAAI,EAAC,UAAU,EAAC,EAAE,EAAC,cAAc,IAAK,MAAM,CAAA,EACxD,CAAA,CAAA,KAAA,EAAA,EAAK,IAAI,EAAC,OAAO,EACd,EAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CACvC,CACO,CACX;;YAIF,IAAA,yBAAyB,CAAC,SAA6B,EAAA;YAC7D,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;;YAEjC,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,YAAY,EAAE;YACvC,YAAA,OAAO,IAAI,CAAC,yBAAyB,EAAE;;YAEzC,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,EAAE;YACnC,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;;YAGrC,QAAA,OAAO,IAAI,CAAC,0BAA0B,EAAE;;YAG1C;;;;;YAKG;YACK,IAAA,oBAAoB,CAAC,QAAkB,EAAA;YAC7C,QAAA,OAAO,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,sCAAsC,EAAC,SAAS,EAAE,IAAI,CAAC;YACtE,iBAAA,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG;6BAChC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,IAAI,aAAa;6BACnD,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAQ;;gBAGxC,qBAAqB,GAAA;;oBAC3B,MAAM,OAAO,GAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAA0B;oBAC9D,OAAO;wBACL,CAAA,EAAA,GAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,GAAG,CAAC,CAAC,OAAgB,MACzC,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,0BAA0B,EAAA,EAClC,IAAI,CAAC;YACJ,kBAAE,EAAC,IAAI,CAAC,oBAAoB,EAAC,EAAA,OAAO,EAAE,OAAO,EAA8B;YAC3E,kBAAE,mDAAoC,OAAO,EAAE,OAAO,EAAuB,CAAA,CAC3E,CACP,CAAC;YACF,YAAA,CAAA,EAAA,GAAA,OAAO,CAAC,GAAG,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CAAC,CAAC,QAAkB,KAAK,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;qBACxF;;YAGH;;;;;;;;;YASG;gBACK,iBAAiB,GAAA;oBACvB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAgB,KAAI;wBAC9C,OAAO,WAAK,KAAK,EAAE,EAAE,yBAAyB,EAAE,IAAI,CAAC,cAAc,EAAE,kCAAkC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAA,EAC7H,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,mCAAmC,EAAE,IAAI,CAAC,cAAc,EAAE,EAAA,EACrJ,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,mBAAmB,EAAA,EAC5B,CAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAG,SAAS,CAAC,OAAqB,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAA,UAAA,EAAa,SAAS,CAAC,OAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,GAAG,QAAQ,GAAI,CACxK,EACN,CAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAC,8BAA8B,EAAA,EACpC,SAAS,CAAC,OAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAe,KAAI;YACjE,gBAAA,OAAO,CAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAC,6BAA6B,EAAA,EAC5C,CAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,cACrF,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC,EAC7D,GAAG,EAAC,SAAS,EAAA,CAAG,CACf;YACP,aAAC,CAAC,CACC,EACJ,IAAI,CAAC,cAAc;YAClB,gBAAA,CAAG,CAAA,GAAA,EAAA,EAAA,KAAK,EAAC,uCAAuC,EAC7C,EAAA,CAAA,EAAG,IAAI,CAAC,qBAAqB,CAAK,CAAA,EAAA,SAAS,CAAC,OAAqB,CAAC,cAAc,CAAI,EAAA,SAAS,CAAC,OAAqB,CAAC,aAAa,KAAK,YAAY,IAAI,GAAG,EAAE;8BAE5J,EAAE,CACF,EACL,CAAC,IAAI,CAAC,cAAc;4BACnB,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,+CAA+C,EAAA,EACxD,CAAK,CAAA,IAAA,EAAA,IAAA,EAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAM,EACnC,CAAG,CAAA,GAAA,EAAA,EAAA,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,EAAG,SAAS,CAAC,OAAqB,CAAC,cAAc,CAAC,EAAA,CAAM;8BAEjI,EAAE,CACF;YACR,SAAC,CAAC;;gBAGI,uBAAuB,CAAC,IAAY,EAAE,KAAK,EAAA;YACjD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC,EAAE,CAAA,0CAAA,EAA6C,KAAK,CAAA,SAAA,CAAW,CAAC;;YAG9G;;;;;YAKG;gBACK,0BAA0B,GAAA;;oBAChC,MAAM,KAAK,GAAU,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACvC,QAAA,IAAI,qBAAqB,GAAI,KAAK,CAAC,OAA+B,CAAC,yBAAyB;YAC5F,QAAA,OAAO,CAAA,EAAA,GAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAA+B,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC,QAAkB,KAAK,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,0BAA0B,EAAA,EACrI,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,2BAA2B,EAAA,EACpC,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,oDAAoD,EAAA,EAC7D,CAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAC,oCAAoC,EAAA,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAK,EAC5F,qBAAqB;wBACpB,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,iCAAiC,EAAA,EAC1C,CAAO,CAAA,MAAA,EAAA,IAAA,EAAA,IAAI,CAAC,qBAAqB,CAAQ,EACzC,CAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAC,wCAAwC,IAAE,QAAQ,CAAC,iBAAiB,CAAQ,OAAC,CAAO,CAAA,MAAA,EAAA,IAAA,EAAA,IAAI,CAAC,YAAY,CAAQ,CACrH,GAAG,EAAE,CACT,EACN,CAAG,CAAA,GAAA,EAAA,EAAA,KAAK,EAAC,gDAAgD,EAAA,EAAE,IAAI,CAAC,kBAAkB,OAC/E,CAAA,CAAA,MAAA,EAAA,IAAA,EAAO,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAQ,MAAK,CACpE,CACF,CACL;;gBAGK,yBAAyB,GAAA;;oBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAA6B;oBAEhE,OAAO;;wBAEL,OAAO,CAAC,QAAQ,KAAK,SAAS;6BAC9B,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,0CAAE,GAAG,CAAC,CAAC,OAAe,MACpC,WAAK,KAAK,EAAC,0BAA0B,EAClC,EAAA,IAAI,CAAC;YACJ,sBAAE,EAAC,IAAI,CAAC,oBAAoB,EAAC,EAAA,OAAO,EAAE,OAAO,EAA8B;YAC3E,sBAAE,mDAAoC,OAAO,EAAE,OAAO,EAAuB,CAAA,CAC3E,CACP,CAAC,CAAA;;wBAGF,OAAO,CAAC,QAAQ,KAAK,UAAU;YAC/B,iBAAA,CAAA,EAAA,GAAA,OAAO,CAAC,UAAU,0CAAE,GAAG,CAAC,CAAC,QAAkB,KAAK,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAA;qBACrF;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-BgVK0PPB.system.js","sources":["src/components/salla-contacts/salla-contacts.scss?tag=salla-contacts","src/components/salla-contacts/salla-contacts.tsx"],"sourcesContent":[".unicode {\n unicode-bidi: plaintext;\n}","import { Component, Host, h, Prop, State, Element } from '@stencil/core';\nimport mobile from '../../assets/svg/iphone.svg';\nimport whatsapp from '../../assets/svg/whatsapp2.svg';\nimport phone from '../../assets/svg/phone.svg';\nimport telegram from '../../assets/svg/paper-plane-o.svg';\nimport email from '../../assets/svg/mail.svg';\n/**\n * @slot contact - Replaces contact item, has replaceable props `{icon}`, `{value}`.\n */\n@Component({\n tag: 'salla-contacts',\n styleUrl: 'salla-contacts.scss',\n})\nexport class SallaContacts {\n constructor() {\n this.contactSlot = this.host.querySelector('[slot=\"contact\"]')?.innerHTML || `<a href={link} class=\"s-contacts-item\"><span class=\"s-contacts-icon\">{icon}</span>${!this.iconsOnly && \"<span class='unicode'>{value}</span>\"}</a>`;\n\n salla.onReady(() => {\n this.contacts = salla.config.get('store.contacts');\n });\n\n salla.lang.onLoaded(() => {\n this.contactsTitle = this.contactsTitle || salla.lang.get('blocks.footer.social');\n });\n }\n private readonly contactSlot: string;\n\n /**\n * Section title for social block of footer.\n */\n @Prop({mutable: true}) contactsTitle: string;\n\n /**\n * Flag to toggle title visibility.\n */\n @Prop() hideTitle: boolean;\n\n /**\n * Conditional flag to check whether the content is header or not.\n */\n @Prop() isHeader: boolean;\n\n /**\n * Flag to toggle list of contents whether vertical or horizontal.\n */\n @Prop() horizontal: boolean;\n\n /**\n * Flag condition to show icon only or icon with label\n */\n @Prop() iconsOnly: boolean;\n\n\n @Element() host: HTMLElement;\n @State() contacts: any = salla.config.get('store.contacts');\n @State() iconsList: any = { mobile, whatsapp, phone, telegram, email }\n private getContactsArray() {\n return Object.entries(this.contacts)\n .filter(([_key, value]) => value !== '')\n .map(([type, value]) => ({ type, value }));\n }\n\n private getContactLink(type) {\n const contactValue = this.contacts[type];\n switch (type) {\n case 'phone':\n case 'mobile':\n return `tel:${contactValue}`;\n case 'whatsapp':\n return salla.url.get('whatsapp/send');\n case 'email':\n return `mailto:${contactValue}`;\n case 'telegram':\n // Check if the contact is already a full URL\n return contactValue.startsWith('https://t.me/') ? contactValue : `https://t.me/${contactValue}`;\n default:\n return contactValue;\n }\n }\n private getContactIcon(type) {\n return this.iconsList[type];\n }\n\n componentWillLoad() {\n return new Promise(resolve => salla.onReady(resolve));\n }\n\n\n render() {\n \n const contactsArray = this.getContactsArray();\n\n if(!contactsArray || contactsArray.length == 0){\n return\n }\n\n if (this.isHeader) {\n return (\n <Host class=\"s-contacts s-contacts-header\">\n {contactsArray.filter((contact) => contact.type == 'phone' || contact.type == 'email').map((contact, index) => (\n <a href={this.getContactLink(contact.type)} key={index} class=\"s-contacts-topnav-link\">\n {contact.type === 'email' ? (\n contact.value\n ) : (\n [\n <span>{this.contactsTitle}: </span>,\n <a class=\"unicode\" href={this.iconsList[contact.type]}>{contact.value}</a>\n ]\n )}\n </a>\n ))}\n </Host>\n );\n }\n\n return (\n <Host class=\"s-contacts\">\n {!this.hideTitle && <h3 class=\"s-contacts-title\">{this.contactsTitle}</h3>}\n <div class={{\n 's-contacts-list': true,\n 's-contacts-list-horizontal': this.horizontal,\n 's-contacts-list-vertical': !this.horizontal,\n 's-contacts-list-icons-only': this.iconsOnly\n }\n }>\n {contactsArray.map((contact, index) => (\n <div key={index} id=\"contact-slot\" innerHTML={this.contactSlot\n .replace(/\\{icon\\}/g, this.getContactIcon(contact.type))\n .replace(/\\{value\\}/g, contact.value.toString())\n .replace(/\\{link\\}/g, this.getContactLink(contact.type))}>\n </div>\n ))}\n </div>\n </Host>\n );\n }\n componentDidRender() {\n // this.host.querySelectorAll('#contact-slot').forEach(el => el.replaceWith(el.firstChild));\n this.host.querySelector('[slot=\"contact\"]')?.remove();\n }\n}\n\n"],"names":["email"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Crafted with ❤ by Salla
|
|
3
3
|
*/
|
|
4
|
-
System.register(["./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
System.register(["./p-DvJ_tnSw.system.js"],(function(t){"use strict";var e;return{setters:[function(t){e=t.L}],execute:function(){function n(){if(!document.lazyLoadInstance){document.lazyLoadInstance=new e({use_native:true});document.lazyLoadBackgrounds=new e({elements_selector:".lazy[data-bg]:not(.loaded)"})}if(document.readyState!=="complete"){document.addEventListener("DOMContentLoaded",(function(){return document.lazyLoadInstance.update()}));document.addEventListener("DOMContentLoaded",(function(){return document.lazyLoadBackgrounds.update()}))}salla.infiniteScroll.event.onAppend((function(){document.lazyLoadInstance.update();document.lazyLoadBackgrounds.update()}))}var o=t("g",n)}}}));
|
|
5
|
+
//# sourceMappingURL=p-BtfcvLWi.system.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-BtfcvLWi.system.js","sources":["src/global/app.ts","@stencil/core/internal/app-globals"],"sourcesContent":["import '@salla.sa/twilight'\nimport LazyLoad from \"vanilla-lazyload\";\n\nexport default function () {\n // Only initialize it one time for the entire application\n if (!document.lazyLoadInstance) {\n document.lazyLoadInstance = new LazyLoad({\n use_native: true,//native not support lazyLoad backgrounds\n // restore_on_error: true,\n // Your custom settings go here\n // callback_finish: () => document.lazyLoadBackgrounds.update(document.querySelectorAll('.lazy[data-bg]:not(.loaded)'))\n });\n document.lazyLoadBackgrounds = new LazyLoad({\n elements_selector: '.lazy[data-bg]:not(.loaded)',\n });\n //native way doesn't load backgrounds\n // document.lazyLoadBackgrounds = new LazyLoad();\n }\n //make sure that lazyLoad will be fired after loading the page too.\n if (document.readyState !== 'complete') {\n document.addEventListener(\"DOMContentLoaded\", () => document.lazyLoadInstance.update());\n document.addEventListener(\"DOMContentLoaded\", () => document.lazyLoadBackgrounds.update());\n }\n\n // fire it after each load more request;\n // @ts-ignore\n salla.infiniteScroll.event.onAppend(() => {\n document.lazyLoadInstance.update();\n document.lazyLoadBackgrounds.update();\n }\n );\n}\n","import appGlobalScript from '/home/runner/work/twilight/twilight/packages/twilight-components/src/global/app.ts';\nexport const globalScripts = appGlobalScript;\nexport const globalStyles = \"\";\n"],"names":[],"mappings":";;;;;;;;;;;;YAGc,wBAAA,IAAA;;YAEZ,IAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YAC9B,QAAA,QAAQ,CAAC,gBAAgB,GAAG,IAAI,QAAQ,CAAC;wBACvC,UAAU,EAAE,IAAI;;;;YAIjB,SAAA,CAAC;YACF,QAAA,QAAQ,CAAC,mBAAmB,GAAG,IAAI,QAAQ,CAAC;YACxC,YAAA,iBAAiB,EAAE,6BAA6B;YACnD,SAAA,CAAC;;;;;YAKJ,IAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE;YACtC,QAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;YACvF,QAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;;;;gBAK5F,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAK;YAC/B,QAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAClC,QAAA,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE;YACzC,KAAC,CACJ;YACL;;AC9BY,kBAAC,aAAa,gBAAG;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-BP344v_q.system.js","sources":["src/components/salla-loyalty-program/salla-loyalty-program.scss?tag=salla-loyalty-program","src/components/salla-loyalty-program/salla-loyalty-program.tsx"],"sourcesContent":["","import { Component, Host, h, State } from '@stencil/core';\nimport { LoyaltyItem } from './interfaces';\nimport GiftIcon from '../../assets/svg/gift.svg';\n\nconst formatDate = (timestamp?: number | string) => {\n if (!timestamp) return '';\n return new Date(Number(timestamp)).toLocaleDateString(salla.lang.locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n });\n};\n\nconst translateKey = (key?: string) => {\n if (!key) return '';\n try {\n const k = key.toLowerCase();\n const translation = salla.lang.get(`pages.loyalty_program.${k}`);\n return translation === `pages.loyalty_program.${k}` ? key : translation;\n } catch {\n return key;\n }\n};\n\n@Component({\n tag: 'salla-loyalty-program',\n styleUrl: 'salla-loyalty-program.scss',\n})\nexport class SallaWalletTable {\n @State() loyaltyPointsArray: Array<LoyaltyItem> = [];\n @State() isLoadingLoyalty: boolean = false;\n @State() nextPageUrlLoyalty: string = '';\n\n componentWillLoad() {\n return salla.onReady().then(() => {\n this.loadLoyaltyPoints();\n });\n }\n\n private handleClick = () => {\n this.loadMoreLoyaltyPoints();\n };\n\n private async loadLoyaltyPoints() {\n this.isLoadingLoyalty = true;\n try {\n let url = `/balance/points?page=1`;\n let resp = await salla.api.request(url);\n \n this.loyaltyPointsArray = resp.data;\n this.nextPageUrlLoyalty = resp.cursor.next; \n \n } catch (error) {\n console.error('Error loading loyalty points transactions', error);\n } finally {\n this.isLoadingLoyalty = false;\n }\n }\n\n private async loadMoreLoyaltyPoints() {\n if (!this.nextPageUrlLoyalty) return;\n this.isLoadingLoyalty = true;\n try {\n let resp = await salla.api.request(this.nextPageUrlLoyalty);\n \n this.loyaltyPointsArray = [...this.loyaltyPointsArray, ...resp.data]; \n this.nextPageUrlLoyalty = resp.cursor?.next || '';\n \n } catch (error) {\n console.error('Error loading more loyalty points', error);\n } finally {\n this.isLoadingLoyalty = false;\n }\n }\n\n render() {\n return (\n <Host>\n <div>\n {this.isLoadingLoyalty ? (\n <salla-loading></salla-loading>\n ) : (\n <div>\n {this.loyaltyPointsArray.length > 0 ? (\n <div>\n <table class=\"s-loyalty-program-table\">\n <thead class=\"s-loyalty-program-table-head\">\n <tr class=\"s-loyalty-program-table-head-tr\">\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('pages.wallet.points')}</th>\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('pages.wallet.date')}</th>\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('pages.wallet.expiry_date')}</th>\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('common.elements.note')}</th>\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('common.elements.status')}</th>\n </tr>\n </thead>\n <tbody class=\"s-loyalty-program-table-tbody\">\n {this.loyaltyPointsArray.map(point => (\n <tr class=\"s-loyalty-program-table-tbody-tr\">\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {point?.type === 'plus' ? '+' : ''}\n {point?.points || ''} {salla.lang.get('pages.loyalty_program.point')}\n </td>\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {formatDate(point?.created_at ? Number(point.created_at) * 1000 : undefined)}\n </td>\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {formatDate(point?.points_expire_date)}\n </td>\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {translateKey(point?.key)}\n </td>\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {translateKey(point?.status_key)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n <div class=\"s-infinite-scroll-wrapper\">\n {!!this.nextPageUrlLoyalty && (\n <salla-button onClick={this.handleClick} loading={this.isLoadingLoyalty}>\n {salla.lang.get('common.elements.load_more')}\n </salla-button>\n )}\n </div>\n </div>\n ) : (\n <div>\n <div class=\"s-loyalty-program-table-empty-state\">\n <span innerHTML={GiftIcon}></span>\n <div class=\"s-loyalty-program-table-placeholder-title\">\n {salla.lang.get('pages.loyalty_program.no_loyality_points_title')}\n </div>\n <div class=\"s-loyalty-program-table-placeholder-sub-title\">\n {salla.lang.get('pages.loyalty_program.no_loyality_points_sub_title')}\n </div>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-BxPxFmIf.system.js","sources":["src/components/salla-loyalty-program/salla-loyalty-program.scss?tag=salla-loyalty-program","src/components/salla-loyalty-program/salla-loyalty-program.tsx"],"sourcesContent":["","import { Component, Host, h, State } from '@stencil/core';\nimport { LoyaltyItem } from './interfaces';\nimport GiftIcon from '../../assets/svg/gift.svg';\n\nconst formatDate = (timestamp?: number | string) => {\n if (!timestamp) return '';\n return new Date(Number(timestamp)).toLocaleDateString(salla.lang.locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n });\n};\n\nconst translateKey = (key?: string) => {\n if (!key) return '';\n try {\n const k = key.toLowerCase();\n const translation = salla.lang.get(`pages.loyalty_program.${k}`);\n return translation === `pages.loyalty_program.${k}` ? key : translation;\n } catch {\n return key;\n }\n};\n\n@Component({\n tag: 'salla-loyalty-program',\n styleUrl: 'salla-loyalty-program.scss',\n})\nexport class SallaWalletTable {\n @State() loyaltyPointsArray: Array<LoyaltyItem> = [];\n @State() isLoadingLoyalty: boolean = false;\n @State() nextPageUrlLoyalty: string = '';\n\n componentWillLoad() {\n return salla.onReady().then(() => {\n this.loadLoyaltyPoints();\n });\n }\n\n private handleClick = () => {\n this.loadMoreLoyaltyPoints();\n };\n\n private async loadLoyaltyPoints() {\n this.isLoadingLoyalty = true;\n try {\n let url = `/balance/points?page=1`;\n let resp = await salla.api.request(url);\n \n this.loyaltyPointsArray = resp.data;\n this.nextPageUrlLoyalty = resp.cursor.next; \n \n } catch (error) {\n console.error('Error loading loyalty points transactions', error);\n } finally {\n this.isLoadingLoyalty = false;\n }\n }\n\n private async loadMoreLoyaltyPoints() {\n if (!this.nextPageUrlLoyalty) return;\n this.isLoadingLoyalty = true;\n try {\n let resp = await salla.api.request(this.nextPageUrlLoyalty);\n \n this.loyaltyPointsArray = [...this.loyaltyPointsArray, ...resp.data]; \n this.nextPageUrlLoyalty = resp.cursor?.next || '';\n \n } catch (error) {\n console.error('Error loading more loyalty points', error);\n } finally {\n this.isLoadingLoyalty = false;\n }\n }\n\n render() {\n return (\n <Host>\n <div>\n {this.isLoadingLoyalty ? (\n <salla-loading></salla-loading>\n ) : (\n <div>\n {this.loyaltyPointsArray.length > 0 ? (\n <div>\n <table class=\"s-loyalty-program-table\">\n <thead class=\"s-loyalty-program-table-head\">\n <tr class=\"s-loyalty-program-table-head-tr\">\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('pages.wallet.points')}</th>\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('pages.wallet.date')}</th>\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('pages.wallet.expiry_date')}</th>\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('common.elements.note')}</th>\n <th scope=\"col\" class=\"s-loyalty-program-table-head-tr-th\">{salla.lang.get('common.elements.status')}</th>\n </tr>\n </thead>\n <tbody class=\"s-loyalty-program-table-tbody\">\n {this.loyaltyPointsArray.map(point => (\n <tr class=\"s-loyalty-program-table-tbody-tr\">\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {point?.type === 'plus' ? '+' : ''}\n {point?.points || ''} {salla.lang.get('pages.loyalty_program.point')}\n </td>\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {formatDate(point?.created_at ? Number(point.created_at) * 1000 : undefined)}\n </td>\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {formatDate(point?.points_expire_date)}\n </td>\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {translateKey(point?.key)}\n </td>\n <td class=\"s-loyalty-program-table-tbody-tr-td\">\n {translateKey(point?.status_key)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n <div class=\"s-infinite-scroll-wrapper\">\n {!!this.nextPageUrlLoyalty && (\n <salla-button onClick={this.handleClick} loading={this.isLoadingLoyalty}>\n {salla.lang.get('common.elements.load_more')}\n </salla-button>\n )}\n </div>\n </div>\n ) : (\n <div>\n <div class=\"s-loyalty-program-table-empty-state\">\n <span innerHTML={GiftIcon}></span>\n <div class=\"s-loyalty-program-table-placeholder-title\">\n {salla.lang.get('pages.loyalty_program.no_loyality_points_title')}\n </div>\n <div class=\"s-loyalty-program-table-placeholder-sub-title\">\n {salla.lang.get('pages.loyalty_program.no_loyality_points_sub_title')}\n </div>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-C6Mc-nga.system.js","sources":["src/components/salla-app-install-alert/salla-app-install-alert.scss?tag=salla-app-install-alert","src/components/salla-app-install-alert/salla-app-install-alert.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, h, State, Element, Host } from '@stencil/core';\nimport { AppInstallAlertData } from './interfaces';\n\n@Component({\n tag: 'salla-app-install-alert',\n styleUrl: 'salla-app-install-alert.scss',\n})\nexport class SallaAppInstallAlert {\n\n alertDelay: NodeJS.Timeout = null\n\n connectedCallback() {\n salla.onReady(() => {\n this.data = salla.config.get('store.app_install_prompt')\n\n if (!this.isMobileOrTabletDevice()) return;\n\n if (!this.data) return salla.logger.error('Failed to retrieve salla-app-install-alert config')\n\n this.ctaLink = salla.url.get('app');\n this.alertDelay = setTimeout(() => (this.open = true), 3000);\n });\n }\n\n disconnectedCallback() {\n clearTimeout(this.alertDelay)\n }\n\n\n\n\n @State() data: AppInstallAlertData | null = salla.config.get('store.app_install_prompt');\n @State() ctaLink: string;\n @State() open: boolean = false;\n @State() closing: boolean = false;\n @Element() private host: HTMLElement;\n\n\n /**\n * Check if the website opens from mobile or tablet devices only (android/ios).\n *\n * @param {number} screen the width of the biggest screen to be checked\n * @returns {boolean} true if it is mobile or tablet else false\n */\n private isMobileOrTabletDevice(screen = 1024): boolean {\n const screenWidth = window.innerWidth <= screen;\n const userAgentCheck = /Macintosh|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);\n const hasTouch =\n 'ontouchstart' in window ||\n 'ontouchend' in document ||\n navigator.maxTouchPoints > 0;\n\n return userAgentCheck && screenWidth && hasTouch;\n }\n\n closeAlert() {\n salla.storage.set('app_install_prompt_disabled', true);\n // handle closing animation first, then close the banner\n this.closing = true;\n this.host.addEventListener(\n 'animationend',\n () => {\n this.closing = false\n this.open = false;\n },\n { once: true }\n );\n }\n\n\n render() {\n return this.data ? (\n <Host class={`s-app-install-alert-wrapper ${this.open ? 'open' : ''} ${this.closing ? 'closing' : ''}`} position={this.data.position}>\n <div>\n <img src={this.data.icon} width=\"58\" height=\"58\" alt={`${salla.config.get('store.name')}`} />\n </div>\n <div class=\"s-app-install-alert-content\">\n <h2 class=\"s-app-install-alert-title\">{this.data.title}</h2>\n <p class=\"s-app-install-alert-sub-title\">\n {this.data.sub_title} {\" \"}\n <a href={this.ctaLink} target=\"_blank\" aria-label=\"download app\" class=\"s-app-install-alert-cta\">\n {salla.lang.getWithDefault('blocks.footer.download_app_now', 'حمله الآن')}\n </a>\n </p>\n </div>\n <button class=\"s-app-install-alert-cancel-button\" aria-label=\"close alert\" onClick={() => this.closeAlert()}>\n <i class=\"sicon-cancel\"></i>\n </button>\n </Host>\n ) : null\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-CAhB5SXO.system.js","sources":["src/components/salla-notifications/salla-notifications.scss?tag=salla-notification-item","src/components/salla-notifications/salla-notification-item.tsx"],"sourcesContent":["","import { Component, h, Prop } from '@stencil/core';\nimport { Notification } from './interfaces';\n\n@Component({\n tag: 'salla-notification-item',\n styleUrl: 'salla-notifications.scss',\n})\nexport class SallaNotificationItem {\n\n /**\n * Notification instance to render.\n */\n @Prop() notification: Notification;\n\n render() {\n return <a href={this.notification.url}\n class={{ \"s-notifications-item\": true, \"s-notifications-item-shadow\": true, \"s-notifications-item-read\": !this.notification.is_new }}>\n <span class=\"s-notifications-item-icon\">\n <i class={{ 's-notifications-item-icon sicon-bell-ring': true, 's-notifications-item-icon-new': this.notification.is_new }}></i>\n </span>\n <div class=\"s-notifications-item-content\">\n <div class=\"s-notifications-item-content-leading\">\n <h4>{this.notification.title}</h4>\n <p>{this.notification.sub_title}</p>\n </div>\n <span class=\"s-notifications-item-content-trailing\">\n <i class=\"sicon-time s-notifications-item-content-trailing-icon\"></i>\n <span>{this.notification.date}</span>\n </span>\n </div>\n </a>\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;YAAA,MAAM,qBAAqB,GAAG,EAAE;;kBCOnB,qBAAqB,sCAAA,MAAA;;;;gBAOhC,MAAM,GAAA;oBACJ,OAAO,CAAG,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAC/B,KAAK,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAA,EACpI,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,2BAA2B,EAAA,EACrC,CAAA,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAG,KAAK,EAAE,EAAE,2CAA2C,EAAE,IAAI,EAAE,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAM,CAC3H,EACP,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,8BAA8B,EAAA,EACvC,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,sCAAsC,EAAA,EAC/C,CAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAM,EAClC,CAAA,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAK,CAChC,EACN,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,uCAAuC,EAAA,EACjD,CAAG,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,uDAAuD,EAAK,CAAA,EACrE,CAAO,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAQ,CAChC,CACH,CACJ;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-CD5EBKFr.system.js","sources":["src/components/salla-accordion/salla-accordion-head.scss?tag=salla-accordion-head","src/components/salla-accordion/salla-accordion-head.tsx"],"sourcesContent":["\n","import { Component, Element, Event, EventEmitter, Host, h, Prop } from '@stencil/core';\nimport plusIcon from '../../assets/svg/add.svg';\nimport minusIcon from '../../assets/svg/minus.svg';\n\n/**\n * @salla/ui-components\n * The `salla-accordion-head` component represents the header of an accordion.\n */\n@Component({\n tag: 'salla-accordion-head',\n styleUrl: 'salla-accordion-head.scss',\n shadow: false,\n})\nexport class SallaAccordionHead {\n @Element() host: HTMLElement;\n\n /** Should the accordion be collapsible or not. */\n @Prop() collapsible: boolean = false;\n\n /** Current collapsed state */\n @Prop({ mutable: true, reflect: true }) collapsed: boolean = true;\n\n /**\n * Emitted when the accordion head is clicked and the collapsed state changes.\n * Only emitted when the component is collapsible.\n *\n * @event accordionToggle\n * @type {Object}\n * @property {Object} detail.payload - The event payload\n * @property {boolean} detail.payload.collapsed - The new collapsed state\n */\n @Event() accordionToggle: EventEmitter<Object>;\n\n private emitCollapsePanel(): void {\n this.accordionToggle.emit({\n payload: {\n collapsed: this.collapsed,\n },\n });\n }\n\n private toggleCollapse() {\n if (!this.collapsible) return;\n this.collapsed = !this.collapsed;\n this.host.parentElement?.setAttribute('data-collapsed', this.collapsed.toString());\n this.host.parentElement\n ?.querySelector('salla-accordion-body')\n ?.setAttribute('data-collapsed', this.collapsed.toString());\n this.emitCollapsePanel();\n }\n\n render() {\n return (\n <Host\n data-collapsed={this.collapsed.toString()}\n onClick={() => this.toggleCollapse()}\n class=\"s-accordion-head-wrapper\"\n >\n <div class=\"s-accordion-head-wrapper-start\">\n <slot name=\"title\"></slot>\n <slot name=\"subtitle\"></slot>\n </div>\n\n <div class=\"s-accordion-head-wrapper-end\">\n <slot name=\"notification\"></slot>\n {this.collapsible && (\n <button\n class={{\n 's-accordion-head-wrapper-toggle': true,\n active: !this.collapsed,\n }}\n onClick={e => {\n e.stopPropagation();\n this.toggleCollapse();\n }}\n >\n {<span class=\"s-accordion-head-wrapper-toggle-icon\" innerHTML={this.collapsed ? plusIcon : minusIcon}></span>}\n </button>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;YAAA,MAAM,qBAAqB,GAAG,EAAE;;kBCanB,kBAAkB,mCAAA,MAAA;YAL/B,IAAA,WAAA,CAAA,OAAA,EAAA;;;;YASU,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK;;YAGI,QAAA,IAAS,CAAA,SAAA,GAAY,IAAI;YA+DlE;gBAlDS,iBAAiB,GAAA;YACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxB,YAAA,OAAO,EAAE;4BACP,SAAS,EAAE,IAAI,CAAC,SAAS;YAC1B,aAAA;YACF,SAAA,CAAC;;gBAGI,cAAc,GAAA;;oBACpB,IAAI,CAAC,IAAI,CAAC,WAAW;wBAAE;YACvB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;YAChC,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,aAAa,0CAAE,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAClF,QAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CACnB,aAAa,CAAC,sBAAsB,CAAC,0CACrC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;oBAC7D,IAAI,CAAC,iBAAiB,EAAE;;gBAG1B,MAAM,GAAA;oBACJ,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,gBAAA,EACa,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EACzC,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE,EACpC,KAAK,EAAC,0BAA0B,EAAA,EAEhC,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,gCAAgC,EAAA,EACzC,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,OAAO,EAAQ,CAAA,EAC1B,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,UAAU,EAAA,CAAQ,CACzB,EAEN,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,8BAA8B,EAAA,EACvC,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,cAAc,EAAQ,CAAA,EAChC,IAAI,CAAC,WAAW,KACf,CAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAE;YACL,gBAAA,iCAAiC,EAAE,IAAI;YACvC,gBAAA,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS;YACxB,aAAA,EACD,OAAO,EAAE,CAAC,IAAG;4BACX,CAAC,CAAC,eAAe,EAAE;4BACnB,IAAI,CAAC,cAAc,EAAE;YACvB,aAAC,EAAA,EAEA,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,sCAAsC,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAS,CAAA,CACtG,CACV,CACG,CACD;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-egmUBeji.system.js","sources":["src/components/salla-filters-widget/salla-filters-widget.scss?tag=salla-filters-widget","src/components/salla-filters-widget/salla-filters-widget.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, h, Method, State, Prop, Event, Element } from '@stencil/core';\nimport Helper from '../../Helpers/Helper';\nimport { Filter, FilterOptionTypes } from \"../salla-filters/interfaces\";\n\n@Component({\n tag: 'salla-filters-widget',\n styleUrl: 'salla-filters-widget.scss',\n})\nexport class SallaFiltersWidget {\n @Element() host: HTMLElement;\n\n /**\n * Show more or less filter options.\n */\n @Prop({ mutable: true }) withLoadMore: boolean;\n\n /**\n * Selected filter options value.\n */\n @Prop({ reflect: true }) filtersData: object;\n\n /**\n * Filter option along with possible values.\n */\n @Prop({ reflect: true }) option: Filter;\n\n\n priceRange: HTMLSallaPriceRangeElement\n\n\n private widgetValues: HTMLElement;\n private widgetContent: HTMLDivElement;\n private initHeight: number = 195;\n\n @State() isOpen: boolean = true;\n @State() isShowMore: boolean = false;\n @State() showMoreLabel: string = \"عرض المزيد\";\n @State() showLessLabel: string = \"عرض أقل\";\n @State() page: any = salla.config.get('page');\n\n /**\n * Custom event emitted up on filter option selection changes.\n */\n @Event() changed: any;\n\n connectedCallback() {\n //lets be smart and don't show 5 and more link for 8 options\n this.withLoadMore = this.option.key != 'price' && Array.isArray(this.option.values) && this.option.values.length > 8;\n salla.onReady(() => {\n this.page = salla.config.get('page');\n })\n salla.lang.onLoaded(() => {\n this.showMoreLabel = salla.lang.getWithDefault('common.titles.more', this.showMoreLabel)\n this.showLessLabel = salla.lang.getWithDefault('common.elements.show_less', this.showLessLabel)\n })\n }\n\n componentDidLoad() {\n this.widgetValues.scrollHeight < this.initHeight && (this.withLoadMore = false);\n (this.withLoadMore && this.widgetValues) && (this.widgetValues.style.maxHeight = `${this.initHeight}px`);\n this.widgetContent.style.height = `${this.widgetContent.scrollHeight}px`;\n }\n\n /**\n * Asynchronously sets the height of a widget element to its current height, allowing for smooth transitions.\n * This function is often used in scenarios where the widget's content changes dynamically, and animating\n * the height adjustment is desired for a smoother user experience.\n *\n * @param {number} [delay=250] - Optional. The delay (in milliseconds) before updating the widget height.\n * Defaults to 250 milliseconds.\n *\n * @returns {Promise<void>} - A Promise that resolves once the widget height is set after the specified delay.\n *\n * @example\n * // Set widget height with the default delay (250 milliseconds)\n * await setWidgetHeight();\n *\n * // Set widget height with a custom delay (e.g., 500 milliseconds)\n * await setWidgetHeight(500);\n */\n @Method()\n async setWidgetHeight(delay = 250) {\n this.widgetContent.removeAttribute('style');\n setTimeout(() => {\n let currentWidgetHeight: number = this.widgetContent.scrollHeight;\n this.widgetContent.style.height = currentWidgetHeight + 'px';\n }, delay)\n }\n\n /**\n * Reset selected filter options.\n */\n @Method()\n async reset() {\n if (this.option.type === FilterOptionTypes.RANGE) {\n this.priceRange.reset()\n }\n Array.from(this.host.querySelectorAll('input')).forEach(input => input.checked = false);\n }\n\n\n /**\n * Action to show more or less filter options.\n */\n @Method()\n async showMore() {\n this.isShowMore = !this.isShowMore\n this.widgetContent.style.height = 'auto';\n this.widgetValues.style.maxHeight = this.isShowMore ? `${this.widgetValues.scrollHeight}px` : `${this.initHeight}px`;\n setTimeout(() => {\n this.widgetContent.style.height = `${this.widgetContent.scrollHeight}px`;\n }, 400); // get height after time of collapse animtion (duration-300)\n }\n\n /**\n * Action to toggle widget open or closed (expand/ collapse).\n */\n @Method()\n async toggleWidget() {\n this.isOpen = !this.isOpen;\n Helper.toggleElementClassIf(this.widgetContent, 's-filters-widget-opened', 's-filters-widget-closed', () => this.isOpen);\n }\n\n renderFilterOption(option: Filter) {\n if (![FilterOptionTypes.VALUES, FilterOptionTypes.MINIMUM, FilterOptionTypes.VARIANTS].includes(option.type)) {\n return '';\n }\n //@ts-ignore\n return option.values.map((filterOption, index) => {\n let value = typeof filterOption == 'number' ? filterOption : (filterOption.key || filterOption.value);\n\n return <label class=\"s-filters-label\" htmlFor={`${option.key}-option-${value}`} key={`${option.key}-option-${value}`}>\n <input\n id={`${option.key}-option-${value}`}\n name={option.key}\n type=\"radio\"\n checked={this.isSelectedOption(option, value)}\n class={`s-filters-radio`}\n onChange={event => this.changed.emit({ event, option, value })}\n />\n {this.getOptionLabel(option, filterOption)}\n </label>\n }\n )\n\n }\n private isSelectedOption(option: Filter, value: any): boolean {\n if (option.type === FilterOptionTypes.MINIMUM) {\n return this.filtersData[option.key] == value;\n }\n if (option.type === FilterOptionTypes.VARIANTS) {\n return this.filtersData[option.type] && this.filtersData[option.type][Object.keys(this.filtersData[option.type])[0]] == value;\n }\n if (option.type === FilterOptionTypes.RANGE) {\n\n return this.filtersData[option.key] && this.filtersData[option.key].min == value.min && this.filtersData[option.key].max == value.max;\n }\n\n if (option.type === FilterOptionTypes.VALUES) {\n return this.filtersData[option.key] && Number(this.filtersData[option.key]) == Number(value);\n }\n return false;\n }\n\n\n\n private getOptionLabel(option: Filter, filterOption) {\n if (option.key == 'rating') {\n //in amazon has stars & up, should we add it, to avoid those people who will come to say I selected 4 why I see 5 sars products\n return <salla-rating-stars size=\"small\" value={filterOption} />;\n }\n let label = filterOption.value || 'null';\n //label+=filterOption.count ? ` (${salla.helpers.number(filterOption.count)})` : '';\n return <span class=\"s-filters-option-name\">{label}</span>;\n }\n\n render() {\n return (\n <Host class=\"s-filters-widget-container\">\n <h3 class=\"s-filters-widget-title\" onClick={() => this.toggleWidget()}>\n <span>{this.option.label}</span>\n <span class={`s-filters-widget-plusminus ${this.isOpen ? 's-filters-widget-plusminus-active' : ''}`} />\n </h3>\n <div class=\"s-filters-widget-content\" ref={(el) => this.widgetContent = el}>\n <div class=\"s-filters-widget-values\" ref={(el) => this.widgetValues = el}>\n <slot />\n {\n this.option.type !== FilterOptionTypes.RANGE\n ? this.renderFilterOption(this.option)\n : <salla-price-range onChanged={(event) => {\n this.changed.emit(event.detail)\n }}\n ref={price => this.priceRange = price}\n filtersData={this.filtersData}\n option={this.option} />\n }\n </div>\n {this.withLoadMore &&\n <a class=\"s-filters-widget-more\"\n onClick={() => this.showMore()}>{!this.isShowMore ? this.showMoreLabel : this.showLessLabel}</a>\n }\n </div>\n </Host>\n );\n }\n\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CDPN9ikP.system.js","sources":["src/components/salla-filters-widget/salla-filters-widget.scss?tag=salla-filters-widget","src/components/salla-filters-widget/salla-filters-widget.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, h, Method, State, Prop, Event, Element } from '@stencil/core';\nimport Helper from '../../Helpers/Helper';\nimport { Filter, FilterOptionTypes } from \"../salla-filters/interfaces\";\n\n@Component({\n tag: 'salla-filters-widget',\n styleUrl: 'salla-filters-widget.scss',\n})\nexport class SallaFiltersWidget {\n @Element() host: HTMLElement;\n\n /**\n * Show more or less filter options.\n */\n @Prop({ mutable: true }) withLoadMore: boolean;\n\n /**\n * Selected filter options value.\n */\n @Prop({ reflect: true }) filtersData: object;\n\n /**\n * Filter option along with possible values.\n */\n @Prop({ reflect: true }) option: Filter;\n\n\n priceRange: HTMLSallaPriceRangeElement\n\n\n private widgetValues: HTMLElement;\n private widgetContent: HTMLDivElement;\n private initHeight: number = 195;\n\n @State() isOpen: boolean = true;\n @State() isShowMore: boolean = false;\n @State() showMoreLabel: string = \"عرض المزيد\";\n @State() showLessLabel: string = \"عرض أقل\";\n @State() page: any = salla.config.get('page');\n\n /**\n * Custom event emitted up on filter option selection changes.\n */\n @Event() changed: any;\n\n connectedCallback() {\n //lets be smart and don't show 5 and more link for 8 options\n this.withLoadMore = this.option.key != 'price' && Array.isArray(this.option.values) && this.option.values.length > 8;\n salla.onReady(() => {\n this.page = salla.config.get('page');\n })\n salla.lang.onLoaded(() => {\n this.showMoreLabel = salla.lang.getWithDefault('common.titles.more', this.showMoreLabel)\n this.showLessLabel = salla.lang.getWithDefault('common.elements.show_less', this.showLessLabel)\n })\n }\n\n componentDidLoad() {\n this.widgetValues.scrollHeight < this.initHeight && (this.withLoadMore = false);\n (this.withLoadMore && this.widgetValues) && (this.widgetValues.style.maxHeight = `${this.initHeight}px`);\n this.widgetContent.style.height = `${this.widgetContent.scrollHeight}px`;\n }\n\n /**\n * Asynchronously sets the height of a widget element to its current height, allowing for smooth transitions.\n * This function is often used in scenarios where the widget's content changes dynamically, and animating\n * the height adjustment is desired for a smoother user experience.\n *\n * @param {number} [delay=250] - Optional. The delay (in milliseconds) before updating the widget height.\n * Defaults to 250 milliseconds.\n *\n * @returns {Promise<void>} - A Promise that resolves once the widget height is set after the specified delay.\n *\n * @example\n * // Set widget height with the default delay (250 milliseconds)\n * await setWidgetHeight();\n *\n * // Set widget height with a custom delay (e.g., 500 milliseconds)\n * await setWidgetHeight(500);\n */\n @Method()\n async setWidgetHeight(delay = 250) {\n this.widgetContent.removeAttribute('style');\n setTimeout(() => {\n let currentWidgetHeight: number = this.widgetContent.scrollHeight;\n this.widgetContent.style.height = currentWidgetHeight + 'px';\n }, delay)\n }\n\n /**\n * Reset selected filter options.\n */\n @Method()\n async reset() {\n if (this.option.type === FilterOptionTypes.RANGE) {\n this.priceRange.reset()\n }\n Array.from(this.host.querySelectorAll('input')).forEach(input => input.checked = false);\n }\n\n\n /**\n * Action to show more or less filter options.\n */\n @Method()\n async showMore() {\n this.isShowMore = !this.isShowMore\n this.widgetContent.style.height = 'auto';\n this.widgetValues.style.maxHeight = this.isShowMore ? `${this.widgetValues.scrollHeight}px` : `${this.initHeight}px`;\n setTimeout(() => {\n this.widgetContent.style.height = `${this.widgetContent.scrollHeight}px`;\n }, 400); // get height after time of collapse animtion (duration-300)\n }\n\n /**\n * Action to toggle widget open or closed (expand/ collapse).\n */\n @Method()\n async toggleWidget() {\n this.isOpen = !this.isOpen;\n Helper.toggleElementClassIf(this.widgetContent, 's-filters-widget-opened', 's-filters-widget-closed', () => this.isOpen);\n }\n\n renderFilterOption(option: Filter) {\n if (![FilterOptionTypes.VALUES, FilterOptionTypes.MINIMUM, FilterOptionTypes.VARIANTS].includes(option.type)) {\n return '';\n }\n //@ts-ignore\n return option.values.map((filterOption, index) => {\n let value = typeof filterOption == 'number' ? filterOption : (filterOption.key || filterOption.value);\n\n return <label class=\"s-filters-label\" htmlFor={`${option.key}-option-${value}`} key={`${option.key}-option-${value}`}>\n <input\n id={`${option.key}-option-${value}`}\n name={option.key}\n type=\"radio\"\n checked={this.isSelectedOption(option, value)}\n class={`s-filters-radio`}\n onChange={event => this.changed.emit({ event, option, value })}\n />\n {this.getOptionLabel(option, filterOption)}\n </label>\n }\n )\n\n }\n private isSelectedOption(option: Filter, value: any): boolean {\n if (option.type === FilterOptionTypes.MINIMUM) {\n return this.filtersData[option.key] == value;\n }\n if (option.type === FilterOptionTypes.VARIANTS) {\n return this.filtersData[option.type] && this.filtersData[option.type][Object.keys(this.filtersData[option.type])[0]] == value;\n }\n if (option.type === FilterOptionTypes.RANGE) {\n\n return this.filtersData[option.key] && this.filtersData[option.key].min == value.min && this.filtersData[option.key].max == value.max;\n }\n\n if (option.type === FilterOptionTypes.VALUES) {\n return this.filtersData[option.key] && Number(this.filtersData[option.key]) == Number(value);\n }\n return false;\n }\n\n\n\n private getOptionLabel(option: Filter, filterOption) {\n if (option.key == 'rating') {\n //in amazon has stars & up, should we add it, to avoid those people who will come to say I selected 4 why I see 5 sars products\n return <salla-rating-stars size=\"small\" value={filterOption} />;\n }\n let label = filterOption.value || 'null';\n //label+=filterOption.count ? ` (${salla.helpers.number(filterOption.count)})` : '';\n return <span class=\"s-filters-option-name\">{label}</span>;\n }\n\n render() {\n return (\n <Host class=\"s-filters-widget-container\">\n <h3 class=\"s-filters-widget-title\" onClick={() => this.toggleWidget()}>\n <span>{this.option.label}</span>\n <span class={`s-filters-widget-plusminus ${this.isOpen ? 's-filters-widget-plusminus-active' : ''}`} />\n </h3>\n <div class=\"s-filters-widget-content\" ref={(el) => this.widgetContent = el}>\n <div class=\"s-filters-widget-values\" ref={(el) => this.widgetValues = el}>\n <slot />\n {\n this.option.type !== FilterOptionTypes.RANGE\n ? this.renderFilterOption(this.option)\n : <salla-price-range onChanged={(event) => {\n this.changed.emit(event.detail)\n }}\n ref={price => this.priceRange = price}\n filtersData={this.filtersData}\n option={this.option} />\n }\n </div>\n {this.withLoadMore &&\n <a class=\"s-filters-widget-more\"\n onClick={() => this.showMore()}>{!this.isShowMore ? this.showMoreLabel : this.showLessLabel}</a>\n }\n </div>\n </Host>\n );\n }\n\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-YvHIMjOJ.system.js","sources":["src/components/salla-notifications/salla-notifications.scss?tag=salla-notifications","src/components/salla-notifications/salla-notifications.tsx"],"sourcesContent":["","import { Component, h, State, Prop, Element } from '@stencil/core';\nimport { Notification } from \"./interfaces\"\nimport {Pagination} from \"../../interfaces\"\nimport Helper from '../../Helpers/Helper';\n\n@Component({\n tag: 'salla-notifications',\n styleUrl: 'salla-notifications.scss',\n})\nexport class SallaNotifications {\n\n constructor() {\n salla.lang.onLoaded(() => {\n this.no_notifications_trans = salla.lang.get('blocks.header.no_notifications');\n this.load_more_text_trans = salla.lang.get('common.elements.load_more')\n })\n }\n\n /**\n * Load more text\n */\n @Prop() loadMoreText: string;\n\n /**\n * Number of notifications to load per request.\n */\n @Prop() itemPerPage: number = 10;\n\n @State() pagination: Pagination;\n @State() total: number;\n @State() showPlaceholder: boolean;\n @State() nextPage: string;\n\n @State() no_notifications_trans = salla.lang.get('blocks.header.no_notifications')\n @State() load_more_text_trans = salla.lang.get('common.elements.load_more');\n\n private status: any;\n private btnLoader: any;\n private infiniteScroll: any;\n private wrapper: any;\n\n @Element() host: HTMLElement;\n\n // Show/hide loading\n private loading(isLoading = true) {\n let btnText = this.status?.querySelector('.s-button-text');\n if (btnText) {\n Helper.toggleElementClassIf(btnText, 's-button-hide', 's-button-show', () => isLoading);\n this.btnLoader.style.display = isLoading ? 'inherit' : 'none';\n }\n }\n\n private getNotificationCard(notification: Notification) {\n const notificationItem = document.createElement('salla-notification-item') as HTMLSallaNotificationItemElement;\n notificationItem.notification = notification;\n notificationItem.classList.add('s-block');\n return notificationItem;\n }\n\n\n render() {\n if (this.showPlaceholder) {\n return <div class=\"s-notifications-no-content\">\n <salla-placeholder alignment='center'>\n <span slot='title'>\n {this.no_notifications_trans}\n </span>\n </salla-placeholder>\n </div>\n }\n\n return <div class=\"s-notifications-wrapper\">\n <div class=\"s-notifications-container\" ref={wrapper => this.wrapper = wrapper}></div>\n\n {this.nextPage && (\n <div class=\"s-infinite-scroll-wrapper\" ref={status => this.status = status}>\n <button onClick={() => this.loadMore()} class=\"s-infinite-scroll-btn s-button-btn s-button-primary\">\n <span class=\"s-button-text s-infinite-scroll-btn-text\">{this.loadMoreText ?? this.load_more_text_trans}</span>\n <span class=\"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader\" ref={btnLoader => this.btnLoader = btnLoader} style={{ \"display\": \"none\" }}></span>\n </button>\n </div>\n )}\n </div>\n }\n\n\n private handleResponse(notificationsList: Notification[]) {\n return notificationsList.map(notification => this.getNotificationCard(notification))\n }\n\n private initiateInfiniteScroll() {\n if (!this.wrapper) {\n salla.logger.error('Wrapper is undefined. Cannot initiate infinite scroll.');\n return;\n }\n\n this.infiniteScroll = salla.infiniteScroll.initiate(this.wrapper, this.wrapper, {\n path: () => this.nextPage,\n history: true,\n nextPage: this.nextPage,\n scrollThreshold: false,\n }, true);\n\n this.infiniteScroll?.on('request', _response => {\n this.loading();\n });\n\n this.infiniteScroll?.on('load', response => {\n this.loading(false);\n this.pagination = response.pagination;\n this.nextPage = response.pagination.links?.next || null;\n this.handleResponse(response.data).forEach(data => this.wrapper.append(data))\n let items = this.host.querySelectorAll('salla-notification-item:not(.animated)');\n Helper.animateItems(items);\n });\n\n this.infiniteScroll?.on('error', (e) => {\n salla.logger.error('Error loading more comments:', e);\n });\n }\n\n private async loadInitialData() {\n await salla.api.notifications.fetch({\"per_page\": this.itemPerPage})\n .then(resp => {\n this.pagination = resp.pagination;\n this.total = resp.pagination.total;\n this.nextPage = resp.pagination.links?.next || null;\n\n // if (!this.notifications.length) {\n // this.showPlaceholder = true;\n // return this.loading(false);\n // }\n\n setTimeout(() => {\n if (!resp.data.length) {\n return this.showPlaceholder = true;\n }\n this.handleResponse(resp.data).forEach(data => this.wrapper.append(data))\n this.initiateInfiniteScroll();\n let items = this.wrapper.querySelectorAll('salla-notification-item:not(.animated)');\n Helper.animateItems(items);\n }, 100)\n })\n .catch(error => {\n salla.logger.error(error)\n this.showPlaceholder = true;\n this.loading(false)\n })\n }\n\n // Get next page\n async loadMore() {\n this.infiniteScroll?.loadNextPage();\n }\n\n async componentWillLoad() {\n await this.loadInitialData();\n }\n\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CE_xhQMS.system.js","sources":["src/components/salla-notifications/salla-notifications.scss?tag=salla-notifications","src/components/salla-notifications/salla-notifications.tsx"],"sourcesContent":["","import { Component, h, State, Prop, Element } from '@stencil/core';\nimport { Notification } from \"./interfaces\"\nimport {Pagination} from \"../../interfaces\"\nimport Helper from '../../Helpers/Helper';\n\n@Component({\n tag: 'salla-notifications',\n styleUrl: 'salla-notifications.scss',\n})\nexport class SallaNotifications {\n\n constructor() {\n salla.lang.onLoaded(() => {\n this.no_notifications_trans = salla.lang.get('blocks.header.no_notifications');\n this.load_more_text_trans = salla.lang.get('common.elements.load_more')\n })\n }\n\n /**\n * Load more text\n */\n @Prop() loadMoreText: string;\n\n /**\n * Number of notifications to load per request.\n */\n @Prop() itemPerPage: number = 10;\n\n @State() pagination: Pagination;\n @State() total: number;\n @State() showPlaceholder: boolean;\n @State() nextPage: string;\n\n @State() no_notifications_trans = salla.lang.get('blocks.header.no_notifications')\n @State() load_more_text_trans = salla.lang.get('common.elements.load_more');\n\n private status: any;\n private btnLoader: any;\n private infiniteScroll: any;\n private wrapper: any;\n\n @Element() host: HTMLElement;\n\n // Show/hide loading\n private loading(isLoading = true) {\n let btnText = this.status?.querySelector('.s-button-text');\n if (btnText) {\n Helper.toggleElementClassIf(btnText, 's-button-hide', 's-button-show', () => isLoading);\n this.btnLoader.style.display = isLoading ? 'inherit' : 'none';\n }\n }\n\n private getNotificationCard(notification: Notification) {\n const notificationItem = document.createElement('salla-notification-item') as HTMLSallaNotificationItemElement;\n notificationItem.notification = notification;\n notificationItem.classList.add('s-block');\n return notificationItem;\n }\n\n\n render() {\n if (this.showPlaceholder) {\n return <div class=\"s-notifications-no-content\">\n <salla-placeholder alignment='center'>\n <span slot='title'>\n {this.no_notifications_trans}\n </span>\n </salla-placeholder>\n </div>\n }\n\n return <div class=\"s-notifications-wrapper\">\n <div class=\"s-notifications-container\" ref={wrapper => this.wrapper = wrapper}></div>\n\n {this.nextPage && (\n <div class=\"s-infinite-scroll-wrapper\" ref={status => this.status = status}>\n <button onClick={() => this.loadMore()} class=\"s-infinite-scroll-btn s-button-btn s-button-primary\">\n <span class=\"s-button-text s-infinite-scroll-btn-text\">{this.loadMoreText ?? this.load_more_text_trans}</span>\n <span class=\"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader\" ref={btnLoader => this.btnLoader = btnLoader} style={{ \"display\": \"none\" }}></span>\n </button>\n </div>\n )}\n </div>\n }\n\n\n private handleResponse(notificationsList: Notification[]) {\n return notificationsList.map(notification => this.getNotificationCard(notification))\n }\n\n private initiateInfiniteScroll() {\n if (!this.wrapper) {\n salla.logger.error('Wrapper is undefined. Cannot initiate infinite scroll.');\n return;\n }\n\n this.infiniteScroll = salla.infiniteScroll.initiate(this.wrapper, this.wrapper, {\n path: () => this.nextPage,\n history: true,\n nextPage: this.nextPage,\n scrollThreshold: false,\n }, true);\n\n this.infiniteScroll?.on('request', _response => {\n this.loading();\n });\n\n this.infiniteScroll?.on('load', response => {\n this.loading(false);\n this.pagination = response.pagination;\n this.nextPage = response.pagination.links?.next || null;\n this.handleResponse(response.data).forEach(data => this.wrapper.append(data))\n let items = this.host.querySelectorAll('salla-notification-item:not(.animated)');\n Helper.animateItems(items);\n });\n\n this.infiniteScroll?.on('error', (e) => {\n salla.logger.error('Error loading more comments:', e);\n });\n }\n\n private async loadInitialData() {\n await salla.api.notifications.fetch({\"per_page\": this.itemPerPage})\n .then(resp => {\n this.pagination = resp.pagination;\n this.total = resp.pagination.total;\n this.nextPage = resp.pagination.links?.next || null;\n\n // if (!this.notifications.length) {\n // this.showPlaceholder = true;\n // return this.loading(false);\n // }\n\n setTimeout(() => {\n if (!resp.data.length) {\n return this.showPlaceholder = true;\n }\n this.handleResponse(resp.data).forEach(data => this.wrapper.append(data))\n this.initiateInfiniteScroll();\n let items = this.wrapper.querySelectorAll('salla-notification-item:not(.animated)');\n Helper.animateItems(items);\n }, 100)\n })\n .catch(error => {\n salla.logger.error(error)\n this.showPlaceholder = true;\n this.loading(false)\n })\n }\n\n // Get next page\n async loadMore() {\n this.infiniteScroll?.loadNextPage();\n }\n\n async componentWillLoad() {\n await this.loadInitialData();\n }\n\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-Cee0DssD.system.js","sources":["src/components/salla-cart-item-offers/salla-cart-item-offers.scss?tag=salla-cart-item-offers","src/components/salla-cart-item-offers/salla-cart-item-offers.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Prop, State, h } from '@stencil/core';\nimport SpecialDiscountIcon from '../../assets/svg/special-discount.svg';\nimport GiftIcon from '../../assets/svg/gift.svg';\nimport TagMoneyIcon from '../../assets/svg/tag-money.svg';\nimport FireIcon from '../../assets/svg/fire.svg';\nimport DiscountCouponIcon from '../../assets/svg/discount-coupon.svg';\nimport ArrowDownIcon from '../../assets/svg/keyboard_arrow_down.svg';\n\n@Component({\n tag: 'salla-cart-item-offers',\n styleUrl: 'salla-cart-item-offers.scss',\n})\nexport class SallaCartItemOffers {\n /**\n * The quantity of the cart item\n */\n @Prop() quantity!: number;\n /**\n * JSON string containing the offers associated with the cart item\n */\n @Prop() offers!: string;\n /**\n * The unique identifier of the cart item\n */\n @Prop() itemId!: number;\n /**\n * The original price of the product in the cart\n */\n @Prop() productPrice!: number;\n\n @State() internalQuantity!: number;\n @State() internalOffers: any[] = [];\n @State() internalProductPrice!: number;\n @State() showAll: boolean = false;\n // Translations\n @State() freeLabel: string = '';\n @State() receivedOffer: string = '';\n @State() discountAmountLabel: string = '';\n @State() showMoreOffers: string = '';\n\n\n private readonly icons: Record<string, string> = {\n DiscountCouponIcon,\n GiftIcon,\n FireIcon,\n SpecialDiscountIcon,\n TagMoneyIcon,\n };\n\n private visibleOffersCount = 3;\n\n async componentWillLoad() {\n await Salla.onReady();\n await salla.lang.onLoaded(() => {\n this.freeLabel = salla.lang.get('common.elements.freeExclam');\n this.receivedOffer = salla.lang.get('pages.cart.received_offer');\n this.discountAmountLabel = salla.lang.get('pages.cart.discount_amount');\n this.showMoreOffers = salla.lang.get('pages.cart.show_more_offers');\n });\n\n this.internalQuantity = this.quantity;\n this.internalOffers = this.parseOffers(this.offers);\n this.internalProductPrice = this.productPrice;\n }\n\n componentDidLoad() {\n salla.event.on('cart::item.updated', (event) => this.handleCartItemUpdated(event));\n }\n\n private parseOffers(offers: string): any[] {\n try {\n if (typeof offers !== 'string') {\n console.warn('Offers is not a string. Returning as-is.', offers);\n return Array.isArray(offers) ? offers : [];\n }\n\n return JSON.parse(offers || '[]');\n } catch (e) {\n console.error('Failed to parse offers', e);\n return [];\n }\n }\n\n private handleCartItemUpdated = (event) => {\n const updatedItem = event.data.cart.items.find((item) => item.id === this.itemId);\n if (updatedItem?.id === this.itemId) {\n this.internalQuantity = updatedItem.quantity;\n this.internalOffers = updatedItem.detailed_offers || [];\n this.internalProductPrice = updatedItem.product_price;\n }\n };\n\n private get visibleOffers() {\n return this.internalOffers.slice(0, this.visibleOffersCount);\n }\n\n private get hiddenOffers() {\n return this.internalOffers.slice(this.visibleOffersCount);\n }\n\n private toggleShowAll = () => {\n this.showAll = !this.showAll;\n };\n\n private getPaidQty(quantity: number, offer: any) {\n return quantity - offer.free_quantity;\n }\n\n private renderOffer(quantity: number, offer: any) {\n const paidQty = this.getPaidQty(quantity, offer);\n\n return (\n <div class=\"s-cart-item-offers-box\">\n {offer.free_quantity > 0 && paidQty > 0 && (\n <div class=\"s-cart-item-offers-paid-free\">\n <div class=\"s-cart-item-offers-line\">\n {salla.helpers.number(paidQty)} × <span innerHTML={salla.money(this.internalProductPrice)}></span>\n </div>\n <div class=\"s-cart-item-offers-line\">\n {salla.helpers.number(offer.free_quantity)} × \n <span class=\"s-cart-item-offers-regular-price\" innerHTML={salla.money(this.internalProductPrice)}></span>\n <span class=\"s-cart-item-offers-free-label\">{this.freeLabel}</span>\n </div>\n </div>\n )}\n\n <div class=\"s-cart-item-offers-details\">\n <span class={`s-cart-item-offers-icon`} innerHTML={this.icons[offer.discount_icon] || ''}></span>\n <div>\n <p class=\"s-cart-item-offers-title\">\n {this.receivedOffer.replace(':offer', offer.offer_name)}\n </p>\n <p class=\"s-cart-item-offers-discount\">\n <span innerHTML={this.discountAmountLabel.replace(':amount', salla.money(offer.discount_amount.toFixed(2)))}></span>\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n render() {\n if (!this.internalOffers?.length) {\n return null;\n }\n\n return (\n <div class=\"s-cart-item-offers-container\" id={`offers_list_${this.itemId}`}>\n {this.visibleOffers.map((offer) => this.renderOffer(this.internalQuantity, offer))}\n\n {this.internalOffers?.length > this.visibleOffersCount && (\n <div class=\"s-cart-item-offers-show-more\">\n <button\n class=\"s-cart-item-offers-show-more-btn\"\n onClick={this.toggleShowAll}\n type=\"button\">\n <span class=\"s-cart-item-offers-show-more-label\">\n +{this.hiddenOffers.length} {this.showMoreOffers}\n <span\n innerHTML={ArrowDownIcon}\n class={{\n 's-cart-item-offers-arrow-icon': true,\n 's-cart-item-offers-arrow-open': this.showAll,\n }}\n ></span>\n </span>\n </button>\n </div>\n )}\n\n {this.showAll && (\n <div class=\"s-cart-item-offers-collapsed\" id={`offers_${this.itemId}`}>\n {this.hiddenOffers.map((offer) => this.renderOffer(this.internalQuantity, offer))}\n </div>\n )}\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CIzZIur3.system.js","sources":["src/components/salla-cart-item-offers/salla-cart-item-offers.scss?tag=salla-cart-item-offers","src/components/salla-cart-item-offers/salla-cart-item-offers.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Prop, State, h } from '@stencil/core';\nimport SpecialDiscountIcon from '../../assets/svg/special-discount.svg';\nimport GiftIcon from '../../assets/svg/gift.svg';\nimport TagMoneyIcon from '../../assets/svg/tag-money.svg';\nimport FireIcon from '../../assets/svg/fire.svg';\nimport DiscountCouponIcon from '../../assets/svg/discount-coupon.svg';\nimport ArrowDownIcon from '../../assets/svg/keyboard_arrow_down.svg';\n\n@Component({\n tag: 'salla-cart-item-offers',\n styleUrl: 'salla-cart-item-offers.scss',\n})\nexport class SallaCartItemOffers {\n /**\n * The quantity of the cart item\n */\n @Prop() quantity!: number;\n /**\n * JSON string containing the offers associated with the cart item\n */\n @Prop() offers!: string;\n /**\n * The unique identifier of the cart item\n */\n @Prop() itemId!: number;\n /**\n * The original price of the product in the cart\n */\n @Prop() productPrice!: number;\n\n @State() internalQuantity!: number;\n @State() internalOffers: any[] = [];\n @State() internalProductPrice!: number;\n @State() showAll: boolean = false;\n // Translations\n @State() freeLabel: string = '';\n @State() receivedOffer: string = '';\n @State() discountAmountLabel: string = '';\n @State() showMoreOffers: string = '';\n\n\n private readonly icons: Record<string, string> = {\n DiscountCouponIcon,\n GiftIcon,\n FireIcon,\n SpecialDiscountIcon,\n TagMoneyIcon,\n };\n\n private visibleOffersCount = 3;\n\n async componentWillLoad() {\n await Salla.onReady();\n await salla.lang.onLoaded(() => {\n this.freeLabel = salla.lang.get('common.elements.freeExclam');\n this.receivedOffer = salla.lang.get('pages.cart.received_offer');\n this.discountAmountLabel = salla.lang.get('pages.cart.discount_amount');\n this.showMoreOffers = salla.lang.get('pages.cart.show_more_offers');\n });\n\n this.internalQuantity = this.quantity;\n this.internalOffers = this.parseOffers(this.offers);\n this.internalProductPrice = this.productPrice;\n }\n\n componentDidLoad() {\n salla.event.on('cart::item.updated', (event) => this.handleCartItemUpdated(event));\n }\n\n private parseOffers(offers: string): any[] {\n try {\n if (typeof offers !== 'string') {\n console.warn('Offers is not a string. Returning as-is.', offers);\n return Array.isArray(offers) ? offers : [];\n }\n\n return JSON.parse(offers || '[]');\n } catch (e) {\n console.error('Failed to parse offers', e);\n return [];\n }\n }\n\n private handleCartItemUpdated = (event) => {\n const updatedItem = event.data.cart.items.find((item) => item.id === this.itemId);\n if (updatedItem?.id === this.itemId) {\n this.internalQuantity = updatedItem.quantity;\n this.internalOffers = updatedItem.detailed_offers || [];\n this.internalProductPrice = updatedItem.product_price;\n }\n };\n\n private get visibleOffers() {\n return this.internalOffers.slice(0, this.visibleOffersCount);\n }\n\n private get hiddenOffers() {\n return this.internalOffers.slice(this.visibleOffersCount);\n }\n\n private toggleShowAll = () => {\n this.showAll = !this.showAll;\n };\n\n private getPaidQty(quantity: number, offer: any) {\n return quantity - offer.free_quantity;\n }\n\n private renderOffer(quantity: number, offer: any) {\n const paidQty = this.getPaidQty(quantity, offer);\n\n return (\n <div class=\"s-cart-item-offers-box\">\n {offer.free_quantity > 0 && paidQty > 0 && (\n <div class=\"s-cart-item-offers-paid-free\">\n <div class=\"s-cart-item-offers-line\">\n {salla.helpers.number(paidQty)} × <span innerHTML={salla.money(this.internalProductPrice)}></span>\n </div>\n <div class=\"s-cart-item-offers-line\">\n {salla.helpers.number(offer.free_quantity)} × \n <span class=\"s-cart-item-offers-regular-price\" innerHTML={salla.money(this.internalProductPrice)}></span>\n <span class=\"s-cart-item-offers-free-label\">{this.freeLabel}</span>\n </div>\n </div>\n )}\n\n <div class=\"s-cart-item-offers-details\">\n <span class={`s-cart-item-offers-icon`} innerHTML={this.icons[offer.discount_icon] || ''}></span>\n <div>\n <p class=\"s-cart-item-offers-title\">\n {this.receivedOffer.replace(':offer', offer.offer_name)}\n </p>\n <p class=\"s-cart-item-offers-discount\">\n <span innerHTML={this.discountAmountLabel.replace(':amount', salla.money(offer.discount_amount.toFixed(2)))}></span>\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n render() {\n if (!this.internalOffers?.length) {\n return null;\n }\n\n return (\n <div class=\"s-cart-item-offers-container\" id={`offers_list_${this.itemId}`}>\n {this.visibleOffers.map((offer) => this.renderOffer(this.internalQuantity, offer))}\n\n {this.internalOffers?.length > this.visibleOffersCount && (\n <div class=\"s-cart-item-offers-show-more\">\n <button\n class=\"s-cart-item-offers-show-more-btn\"\n onClick={this.toggleShowAll}\n type=\"button\">\n <span class=\"s-cart-item-offers-show-more-label\">\n +{this.hiddenOffers.length} {this.showMoreOffers}\n <span\n innerHTML={ArrowDownIcon}\n class={{\n 's-cart-item-offers-arrow-icon': true,\n 's-cart-item-offers-arrow-open': this.showAll,\n }}\n ></span>\n </span>\n </button>\n </div>\n )}\n\n {this.showAll && (\n <div class=\"s-cart-item-offers-collapsed\" id={`offers_${this.itemId}`}>\n {this.hiddenOffers.map((offer) => this.renderOffer(this.internalQuantity, offer))}\n </div>\n )}\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|