{"version":3,"file":"cart.widgets.bundle.js","mappings":"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AAC;IAChC;;IAEA;AACR;AACA;AACA;AACA;AACA;IACQC,iBAAiBA,CAACC,GAAiB,EAAEpD,KAAa,EAAS;MACvD,IAAI,CAACqD,kBAAkB,CAAC,OAAO,EAAED,GAAG,EAAEpD,KAAK,CAAC;IAChD;;IAEA;AACR;AACA;AACA;AACA;AACA;IACQsD,SAASA,CAACC,MAAgB,EAAEjB,KAAa,EAAS;MAC9C,IAAI,CAACe,kBAAkB,CAAC,OAAO,EAAEE,MAAM,EAAEjB,KAAK,CAAC;IACnD;EACJ;EAEA,OAAO7B,eAAe;AAC1B;;;;;;;;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAAe,oCAAU+C,UAA0E,EAAE;EACjG;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMC,mBAAmB,SAASD,UAAU,CAAC;IACzC;AACR;AACA;AACA;AACA;IACQE,aAAaA,CAAA,EAAG;MACZ,KAAK,CAACA,aAAa,CAAC,CAAC;MAErB,IAAI,IAAI,CAACC,KAAK,EAAE;QACZ;QACA,IAAI,CAACxB,OAAO,CAAC,YAAY,EAAE,EAAC,yBAA0ByB,UAAU,KAAKA,UAAU,CAACrB,UAAU,CAAC,CAAC,CAAC;MACjG;IACJ;EACJ;EAEA,OAAOkB,mBAAmB;AAC9B;;;;;;;;;;;;;;;AC1DsD;AACtD;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA,6BAAe,oCAAUK,QAAqE,EAAE;EAC5F;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAM9B,UAAU,SAAS8B,QAAQ,CAAC;IAC9Bz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","sources":["webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/cart/CartShippingTabs.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/cart/CheckoutButtons.ts","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/forms/CouponForm.js","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/cart/CheckoutButtons.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/cart/PromoCodeDisclosure.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/CouponForm.ts"],"sourcesContent":["import { appendParamToURL } from 'widgets/toolbox/util';\nimport { getJSONByUrl } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/Tabs').default>} BaseTabs\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/Button').default>>} button\n */\n\n/**\n * @description CartShippingTabs implementation\n * @param {BaseTabs} BaseTabs BaseTabs implementation\n * @returns {typeof CartShippingTabs} CartShippingTabs class\n */\nexport default function (BaseTabs) {\n /**\n * @class CartShippingTabs\n * @augments BaseTabs\n * @classdesc CartShippingTabs implementation\n */\n class CartShippingTabs extends BaseTabs {\n prefs() {\n return {\n changeShippingUrl: '',\n ...super.prefs()\n };\n }\n\n /**\n * @description Handle tab change\n * @param {button} clickedButton - Widget, representing customer's tab clicked element\n * @returns {void}\n */\n handleTabClick(clickedButton) {\n this.eventBus().emit('refresh.applepay');\n const shipping = clickedButton.data('panelName');\n let changeShippingUrl = this.prefs().changeShippingUrl;\n\n changeShippingUrl = appendParamToURL(changeShippingUrl, 'shippingTab', shipping);\n\n getJSONByUrl(changeShippingUrl)\n .then(response => {\n if (response.success) {\n /**\n * actual tab change happens later on cart re-render\n * in event handler using `onRefresh` method of `CartShippingTabs`\n * with preselected tab panel name based on `shipping` variable\n */\n this.emit('shippingchanged', response);\n\n this.eventBus().emit('gtm.datalayer.event', {\n event: 'data-layer-event',\n eventCategory: 'Key interactions',\n eventAction: 'Delivery choice',\n eventLabel: shipping === 'homeDelivery' ? 'Home delivery' : 'Click & collect'\n });\n }\n });\n }\n\n /**\n * @description On refresh execute tab preseletion logic\n * @returns {void}\n */\n onRefresh() {\n super.init();\n }\n }\n\n return CartShippingTabs;\n}\n","import { getScrollPosition, onScroll } from 'widgets/toolbox/scroll';\nimport { timeout } from 'widgets/toolbox/util';\n\n/**\n * @description Base CheckoutButtons implementation\n * @param BaseCheckoutButtons Base widget for extending\n * @returns Checkout Buttons (PayPal, ApplePay, etc.) class\n */\nexport default function (BaseCheckoutButtons: ReturnType<typeof import('widgets/cart/CheckoutButtons').default>) {\n /**\n * @class CheckoutButtons\n * @augments Widget\n * @classdesc Represents CheckoutButtons component for making emit after initialization\n * @category widgets\n * @subcategory cart\n */\n class CheckoutButtons extends BaseCheckoutButtons {\n expandTimeout: (() => void) | undefined;\n\n expandScrollPosition = 0;\n\n prefs() {\n return {\n classesSticky: 'm-sticky',\n classesCollapsed: 'm-collapsed',\n detectScrollDirection: false,\n expandScrollOffset: 40,\n expandDelay: 500,\n ...super.prefs()\n };\n }\n\n init() {\n super.init();\n\n if (this.prefs().detectScrollDirection) {\n this.initScrollDetection();\n }\n }\n\n onRefresh() {\n super.onRefresh();\n\n if (this.prefs().detectScrollDirection) {\n timeout(() => {\n this.prepareScrollDetection();\n });\n }\n }\n\n initScrollDetection() {\n let previousScrollPosition = getScrollPosition();\n\n this.prepareScrollDetection();\n this.eventBus().on('viewtype.windowChange', 'prepareScrollDetection');\n\n this.ev('scroll', () => {\n const currentScrollPosition = getScrollPosition();\n\n if (currentScrollPosition > previousScrollPosition && currentScrollPosition < this.expandScrollPosition) {\n this.ref('self').addClass(this.prefs().classesCollapsed);\n\n if (this.expandTimeout) {\n this.expandTimeout();\n this.expandTimeout = undefined;\n }\n\n this.expandTimeout = timeout(() => {\n this.ref('self').removeClass(this.prefs().classesCollapsed);\n }, this.prefs().expandDelay);\n }\n\n previousScrollPosition = currentScrollPosition;\n }, window, true);\n }\n\n prepareScrollDetection() {\n const refSelf = this.ref('self');\n\n refSelf.removeClass(this.prefs().classesSticky);\n this.expandScrollPosition = refSelf.prop('offsetTop') + refSelf.prop('offsetHeight')\n - this.prefs().expandScrollOffset - window.innerHeight;\n refSelf.addClass(this.prefs().classesSticky);\n }\n }\n\n return CheckoutButtons;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/CouponForm').default>} BaseCouponForm\n * @typedef {InstanceType<ReturnType<typeof import('core/forms/BasicInput').default>>} basicInput\n */\n\n/**\n * @description Extend Basic Coupon Form implementation\n * @param {BaseCouponForm} BaseCouponForm Base Input implementation\n * @returns {Class} Coupon Form class\n */\nexport default function (BaseCouponForm) {\n /**\n * @class CouponForm\n * @augments BaseCouponForm\n * @classdesc Custom input implementation.\n */\n class CouponForm extends BaseCouponForm {\n /**\n * @description `onSubmitted` handler - communicates either error or success coupon application status\n * @param {object} data server JSON response\n * @emits \"gtm.datalayer.event\"\n */\n onSubmitted(data) {\n const input = this.getById(this.prefs().couponInput, (couponInput) => couponInput);\n\n // GTM event on coupon input\n this.eventBus().emit('gtm.datalayer.event', {\n event: 'data-layer-event',\n eventCategory: 'Coupon codes interaction',\n eventAction: 'Coupon code - apply',\n eventLabel: input.getValue()\n });\n\n if (data && !data.error) {\n // GTM event on successfull coupon application\n this.eventBus().emit('gtm.datalayer.event', {\n event: 'data-layer-event',\n eventCategory: 'Coupon codes interaction',\n eventAction: 'Coupon code successful',\n eventLabel: input.getValue()\n });\n }\n\n // Process original logic\n super.onSubmitted(data);\n }\n\n /**\n * @description Sets focus on coupon input. Usually happens when coupon form is opened.\n * @returns {void}\n */\n focusInput() {\n this.getById(this.prefs().couponInput, (/** @type {basicInput} */ input) => {\n input.focus();\n this.handleSubmitCouponButton(input);\n });\n }\n\n /**\n * @description Handle state of the submit button based on input form\n * @param {basicInput} input - Coupon code field\n * @returns {void}\n */\n handleSubmitCouponButton(input) {\n this.getById('submitButton', (button) => {\n const isActive = button.isActive();\n const inputIsEmpty = input.getValue().length === 0;\n\n if (isActive && inputIsEmpty) {\n button.deactivate();\n } else if (!isActive && !inputIsEmpty) {\n button.activate();\n }\n });\n }\n }\n\n return CouponForm;\n}\n","import type { TWidget } from 'widgets/Widget';\nimport type { IRefElement } from 'widgets/toolbox/RefElement';\n\n/**\n * @description Base CheckoutButtons implementation\n * @param Widget Base widget for extending\n * @returns Checkout Buttons (PayPal, ApplePay, etc.) class\n */\nexport default function (Widget: TWidget) {\n /**\n * @class CheckoutButtons\n * @augments Widget\n * @classdesc Represents CheckoutButtons component for making emit after initialization\n * @category widgets\n * @subcategory cart\n * @example\n *\n * <div\n * data-widget=\"checkoutButtons\"\n * data-widget-event-click=\"proceedToCheckout\"\n * data-widget-event-error=\"showError\"\n * data-tau=\"cart_top_section\"\n * class=\"b-proceed_checkout\"\n * >\n * <isinclude template=\"m/cart/checkoutButtons\" />\n * {{${'#'}totals.grandTotal.value}}\n * <p data-ref=\"delimiter\" class=\"b-proceed_checkout-or m-hide\" hidden>\n * ${Resource.msg('common.or', 'common', null)}\n * </p>\n * <isinclude template=\"${require('util/pref').if('applepay.enabled', 'm/cart/applePayButtonCart', 'util/empty')}\" />\n * {{/totals.grandTotal.value}}\n * </div>\n */\n class CheckoutButtons extends Widget {\n /**\n * @description Show text -'OR' when one of payment method was initialized\n */\n showDelimiter() : void {\n this.ref('delimiter').show();\n }\n\n /**\n * @description Emit click event with sent params\n * @param btn - clicked button\n * @param event - target event\n * @emits CartMgr#click\n */\n proceedToCheckout(btn : IRefElement, event : Event) : void {\n this.emitWithoutContext('click', btn, event);\n }\n\n /**\n * @description Emit error event with sent params\n * @param widget - widget\n * @param error - error\n * @emits CartMgr#error\n */\n showError(widget : TWidget, error : Event) : void {\n this.emitWithoutContext('error', widget, error);\n }\n }\n\n return CheckoutButtons;\n}\n","/**\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/CouponForm').default>>} couponForm\n */\n/**\n * @description Base PromoCodeDisclosure implementation\n * @param Disclosure Base widget for extending\n * @returns BackToTop class\n */\nexport default function (Disclosure: ReturnType<typeof import('widgets/global/Disclosure').default>) {\n /**\n * @category widgets\n * @subcategory cart\n * @class PromoCodeDisclosure\n * @augments Disclosure\n * @classdesc PromoCodeDisclosure component.\n * Based on {@link Disclosure} [accessibility component](https://www.w3.org/TR/wai-aria-practices/#disclosure)\n * Used to manage specific action on coupon application form - set focus on coupon input once opened.\n * @property {string} data-widget - Widget name `promoCodeDisclosure`\n * @property {string} data-show-on-init - If we need to show disclosure content on init\n * @example <caption>PromoCodeDisclosure widget markup</caption>\n * <div\n * data-widget=\"promoCodeDisclosure\"\n * data-show-on-init=\"true\"\n * >\n * <button\n * type=\"button\"\n * data-event-click=\"toggleContent\"\n * aria-expanded=\"false\"\n * aria-controls=\"coupon-form\"\n * data-ref=\"disclosureButton\"\n * >Open me</button>\n * <div\n * data-ref=\"disclosureContent\"\n * id=\"coupon-form\"\n * hidden=\"hidden\"\n * class=\"m-hide\"\n * >\n * .... content\n * </div>\n * </div>\n */\n class PromoCodeDisclosure extends Disclosure {\n /**\n * @description Toggles disclosure content and update related attributes\n * @listens dom#click\n * @returns {void}\n */\n toggleContent() {\n super.toggleContent();\n\n if (this.shown) {\n // @ts-expect-error ts-migrate(2339) FIXME: Property 'focusInput' does not exist on type 'Widg... Remove this comment to see the full error message\n this.getById('couponForm', (/** @type {couponForm} */ couponForm) => couponForm.focusInput());\n }\n }\n }\n\n return PromoCodeDisclosure;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/BasicInput').default>>} basicInput\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/Button').default>>} button\n */\n\ntype basicInputInstance = InstanceType<ReturnType<typeof import('widgets/forms/BasicInput').default>>;\n\n/**\n * @description Base CouponForm implementation\n * @param AjaxForm Base widget for extending\n * @returns Coupon Form class\n */\nexport default function (AjaxForm: ReturnType<typeof import('widgets/forms/AjaxForm').default>) {\n /**\n * @category widgets\n * @subcategory forms\n * @class CouponForm\n * @augments AjaxForm\n * @classdesc Cart page promo code application AJAX form.\n * Used to apply/delete coupons for current cart.\n * Widget also communicates application results (either success or error) to customer.\n * When coupon application form is opened, sets focus on coupon input.\n * @property {string} data-widget - Widget name `couponform`\n * @property {string} data-error-message-label - Specific error message label\n * @property {string} data-event-submit - Event listener for submit form event\n * @example <caption>Example of CouponForm widget markup</caption>\n * <form\n * ...\n * method=\"POST\"\n * data-widget=\"couponform\"\n * data-remove-coupon-url=\"${pdict.actionUrls.removeCouponLineItem}\"\n * data-id=\"couponForm\"\n * data-error-message-label=\"errorFeedback\"\n * data-event-submit.prevent=\"handleSubmit\"\n * >\n * <isprint value=\"${\n * formElement(require('server').forms.getForm('coupon').couponCode).render()\n * }\" encoding=\"off\"/>\n * <button\n * type=\"submit\"\n * class=\"b-button m-outline\"\n * data-widget=\"button\"\n * data-widget-event-click=\"handleSubmit\"\n * data-event-click.prevent=\"handleClick\"\n * data-id=\"submitButton\"\n * data-tau=\"coupon_submit\"\n * >\n * ${Resource.msg('form.promoCode.submit', 'forms', null)}\n * </button>\n * <div class=\"b-coupon_form-error\" data-ref=\"couponDeletionMsg\" role=\"alert\" hidden></div>\n * <!-- below is the list of applied coupons -->\n * <isinclude template=\"m/cart/cartCouponDisplay\" />\n * </form>\n */\n class CouponForm extends AjaxForm {\n prefs() {\n return {\n msgEmptyCoupon: '',\n couponInput: 'dwfrm_coupon_couponCode',\n couponCodeContent: 'couponCodeContent',\n couponDeletionMsg: 'couponDeletionMsg',\n removeCouponUrl: '',\n classesShow: 'show',\n ...super.prefs()\n };\n }\n\n /**\n * @description `onSubmitted` handler - communicates either error or success coupon application status\n * Notifies {@link CartMgr} about coupon status changes\n * @param {object} data server JSON response\n * @emits \"coupon.updated\"\n * @returns {void}\n */\n onSubmitted(data) {\n if (!data) {\n return;\n }\n\n if (data.error && data.errorMessage) {\n this.getById(this.prefs().couponInput, (input: basicInputInstance) => input.setError(data.errorMessage));\n } else if (data.error && data.fieldErrors) {\n Object.keys(data.fieldErrors).forEach(errorKey => {\n this.getById(errorKey, (input: basicInputInstance) => input.setError(data.fieldErrors[errorKey]));\n });\n } else {\n this.getById(this.prefs().couponInput, (input: basicInputInstance) => input.setValue('', true));\n /**\n * @description Event to notify concerned widgets, that coupon was updated\n * @event \"coupon.updated\"\n */\n this.eventBus().emit('coupon.updated', data);\n }\n }\n\n /**\n * @description Invalidates coupon code input with relevant error message\n * @param {Error} error - error, happened during request\n * @returns {void}\n */\n onError(error) {\n // @ts-expect-error ts-migrate(2339) FIXME: Property 'setError' does not exist on type 'Widget... Remove this comment to see the full error message\n this.getById(this.prefs().couponInput, (/** @type {basicInput} */ input) => input.setError(error.message));\n }\n\n /**\n * @description Removes coupon code from cart\n * @param {button} button - triggering button\n * @emits \"coupon.updated\"\n * @returns {Promise<object>} Promise object represents server response for coupon deletion\n */\n removeCoupon(button) {\n this.showProgressBar();\n this.has(this.prefs().couponDeletionMsg, function (errMsg) {\n errMsg.setText('').hide();\n });\n\n return submitFormJson(this.prefs().removeCouponUrl, {\n couponCode: button.data('code'),\n uuid: button.data('uuid')\n })\n .then((response) => {\n response.couponAction = 'removed';\n this.eventBus().emit('coupon.updated', response);\n\n return response;\n })\n .catch((err) => {\n this.has(this.prefs().couponDeletionMsg, function (errMsg) {\n errMsg.setText(err.message).show();\n });\n })\n .finally(() => {\n this.hideProgressBar();\n });\n }\n\n /**\n * @description Sets focus on coupon input. Usually happens when coupon form is opened.\n * @returns {void}\n */\n focusInput() {\n // @ts-expect-error ts-migrate(2339) FIXME: Property 'focus' does not exist on type 'Widget'.\n this.getById(this.prefs().couponInput, (/** @type {basicInput} */ input) => input.focus());\n }\n }\n\n return CouponForm;\n}\n"],"names":["appendParamToURL","getJSONByUrl","BaseTabs","CartShippingTabs","prefs","changeShippingUrl","handleTabClick","clickedButton","eventBus","emit","shipping","data","then","response","success","event","eventCategory","eventAction","eventLabel","onRefresh","init","getScrollPosition","timeout","BaseCheckoutButtons","CheckoutButtons","expandScrollPosition","classesSticky","classesCollapsed","detectScrollDirection","expandScrollOffset","expandDelay","initScrollDetection","prepareScrollDetection","previousScrollPosition","on","ev","currentScrollPosition","ref","addClass","expandTimeout","undefined","removeClass","window","refSelf","prop","innerHeight","BaseCouponForm","CouponForm","onSubmitted","input","getById","couponInput","getValue","error","focusInput","focus","handleSubmitCouponButton","button","isActive","inputIsEmpty","length","deactivate","activate","Widget","showDelimiter","show","proceedToCheckout","btn","emitWithoutContext","showError","widget","Disclosure","PromoCodeDisclosure","toggleContent","shown","couponForm","submitFormJson","AjaxForm","msgEmptyCoupon","couponCodeContent","couponDeletionMsg","removeCouponUrl","classesShow","errorMessage","setError","fieldErrors","Object","keys","forEach","errorKey","setValue","onError","message","removeCoupon","showProgressBar","has","errMsg","setText","hide","couponCode","uuid","couponAction","catch","err","finally","hideProgressBar"],"sourceRoot":""}