{"version":3,"file":"../checkout-steps-252.min.js","sources":["checkout-steps-252.js"],"sourcesContent":["/**\n * Manage checkout steps state.\n *\n * DEPENDS ON:\n * - jQuery // Interact with WooCommerce events\n */\n(function (root, factory) {\n\tif ( typeof define === 'function' && define.amd ) {\n\t\tdefine([], factory(root));\n\t} else if ( typeof exports === 'object' ) {\n\t\tmodule.exports = factory(root);\n\t} else {\n\t\troot.CheckoutSteps = factory(root);\n\t}\n})(typeof global !== 'undefined' ? global : this.window || this.global, function (root) {\n\n\t'use strict';\n\n\tvar $ = jQuery;\n\tvar _hasJQuery = ( $ != null );\n\n\tvar _hasInitialized = false;\n\tvar _publicMethods = {};\n\tvar _settings = {\n\t\tbodyClass: 'has-fc-checkout-steps',\n\t\tbodyClassActiveStepPattern: 'fc-checkout-step--active-{ID}',\n\n\t\tisMultistepLayout: 'yes',\n\t\tmaybeDisablePlaceOrderButton: 'yes',\n\n\t\twrapperSelector: '.fc-wrapper',\n\n\t\tprogressBarSelector: '.fc-progress-bar',\n\t\tprogressBarCurrentSelector: '.fc-progress-bar__current-step',\n\t\tprogressBarItemSelector: '.fc-progress-bar__bar',\n\n\t\tstepsWrapperSelector: '.fc-checkout-steps',\n\t\tstepSelector: '.fc-checkout-step',\n\t\tcurrentStepSelector: '[data-step-current]',\n\t\tlastStepSelector: '[data-step-last]',\n\t\tnextStepSelector: '[data-step-current] ~ .fc-checkout-step',\n\t\tnextStepButtonSelector: '[data-step-next]',\n\t\tfocusableElementsSelector: 'a[role=\"button\"], a[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), textarea:not([disabled]), select:not([disabled]), details, summary, iframe, object, embed, [contenteditable] [tabindex]:not([tabindex=\"-1\"])',\n\n\t\tcheckoutFormSelector: 'form.checkout',\n\t\tfieldSubmitFormSelector: 'input[type=\"text\"], input[type=\"checkbox\"], input[type=\"color\"], input[type=\"date\"], input[type=\"datetime\"], input[type=\"datetime-local\"], input[type=\"email\"], input[type=\"file\"], input[type=\"image\"], input[type=\"month\"], input[type=\"number\"], input[type=\"password\"], input[type=\"radio\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"time\"], input[type=\"url\"], input[type=\"week\"]',\n\n\t\tsubstepSelector: '.fc-step__substep',\n\t\tsubstepTextContentSelector: '.fc-step__substep-text-content',\n\t\tsubstepFieldsSelector: '.fc-step__substep-fields',\n\t\tsubstepTextSelector: '.fc-step__substep-text',\n\t\tsubstepEditButtonSelector: '[data-step-edit]',\n\t\tsubstepSaveButtonSelector: '[data-step-save]',\n\n\t\tstepCompleteAttribute: 'data-step-complete',\n\t\tstepCurrentAttribute: 'data-step-current',\n\t\tstepIndexAttribute: 'data-step-index',\n\t\tstepIdAttribute: 'data-step-id',\n\n\t\tisEditingClass: 'is-editing',\n\t\tisLoadingClass: 'is-loading',\n\t\tisCurrentClass: 'is-current',\n\t\tisCompleteClass: 'is-complete',\n\t\tstepNextIncompleteClass: 'fc-checkout-step--next-step-incomplete',\n\t\tcurrentStepClassTemplate: 'fc-checkout-step-current--##STEP_ID##',\n\t\tcurrentLastStepClass: 'fc-checkout-step-current-last',\n\n\t\tsubstepEditableStateFieldSelector: '.fc-substep-editable-state[type=\"hidden\"]',\n\t\tsubstepEditableStateAttribute: 'data-substep-editable',\n\t\tsubstepVisibleStateFieldSelector: '.fc-substep-visible-state[type=\"hidden\"]',\n\t\tsubstepVisibleStateAttribute: 'data-substep-visible',\n\t\tsubstepExpandedStateFieldSelector: '.fc-substep-expanded-state[type=\"hidden\"]',\n\n\t\tinvalidFieldRowSelector: '.woocommerce-invalid .input-text, .woocommerce-invalid select',\n\n\t\tplaceOrderButtonSelector: '.fc-place-order-button',\n\t\tplaceOrderSkipMoveSelector: '.has-place-order--below_order_summary',\n\t\tplaceOrderSectionMainSelector: '.fc-place-order__section--main',\n\t\tplaceOrderPlaceholderMainSelector: '.fc-inside .fc-place-order__section-placeholder',\n\t\tplaceOrderPlaceholderSidebarSelector: '.fc-sidebar .fc-place-order__section-placeholder',\n\t\tplaceOrderRefreshRate: 50,\n\n\t\tscrollOffsetSelector: '.fc-checkout-header',\n\t\tscrollBehavior: 'smooth',\n\t\tscrollOffset: 0,\n\t\tscrollDelay: 50,\n\t}\n\tvar _resizeObserver;\n\n\n\n\t/**\n\t * METHODS\n\t */\n\n\n\n\t/**\n\t * Check if the element is considered visible. Does not consider the CSS property `visibility: hidden;`.\n\t */\n\tvar isVisible = function( element ) {\n\t\treturn !!( element.offsetWidth || element.offsetHeight || element.getClientRects().length );\n\t}\n\n\n\n\t/**\n\t * Gets keyboard-focusable elements within a specified element\n\t *\n\t * @param HTMLElement element The element to search within. Defaults to the `document` root element.\n\t *\n\t * @return NodeList All focusable elements withing the element passed in.\n\t */\n\tvar getFocusableElements = function( element ) {\n\t\t// Set element to `document` root if not passed in\n\t\tif ( ! element ) { element = document; }\n\t\t\n\t\t// Get elements that are keyboard-focusable, but might be `disabled`\n\t\treturn element.querySelectorAll( _settings.focusableElementsSelector );\n\t}\n\n\n\n\t/**\n\t * Get the offset position of the element recursively adding the offset position of parent elements until the `stopElement` (or the `body` element).\n\t *\n\t * @param HTMLElement element Element to get the offset position for.\n\t * @param HTMLElement stopElement Parent element where to stop adding the offset position to the total offset top position of the element.\n\t *\n\t * @return int Offset position of the element until the `stopElement` or the `body` element.\n\t */\n\tvar getOffsetTop = function( element, stopElement ) {\n\t\tvar offsetTop = 0;\n\t\t\n\t\twhile( element ) {\n\t\t\t// Reached the stopElement\n\t\t\tif ( stopElement && stopElement == element ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\toffsetTop += element.offsetTop;\n\t\t\telement = element.offsetParent;\n\t\t}\n\t\t\n\t\treturn offsetTop;\n\t}\n\n\n\n\t/**\n\t * Get all step elements.\n\t *\n\t * @return Array List of step elements.\n\t */\n\tvar getAllSteps = function() {\n\t\tvar stepsWrapper = document.querySelector( _settings.stepsWrapperSelector );\n\n\t\t// Bail if steps wrapper not found, returns empty `Array`.\n\t\tif ( ! stepsWrapper ) { return []; }\n\n\t\treturn Array.from( stepsWrapper.querySelectorAll( _settings.stepSelector ) );\n\t}\n\n\n\n\n\t/**\n\t * Expand the substep fields for edition, and collapse the substep values in text format.\n\t *\n\t * @param HTMLElement substepElement Substep element to change the state of.\n\t * @param Boolean withTransition Whether to use transitions between states. Defaults to `true`.\n\t * @param Boolean withFocus Whether to set the focus to the field when expanding. Cannot be used with `withTransition = true`. Defaults to `true`.\n\t */\n\tvar expandSubstepEdit = function( substepElement, withTransition, withFocus ) {\n\t\t// Bail if editButton not valid\n\t\tif ( ! substepElement ) { return; }\n\n\t\tvar substepFieldsElement = substepElement.querySelector( _settings.substepFieldsSelector );\n\t\tvar substepTextElement = substepElement.querySelector( _settings.substepTextSelector );\n\n\t\t// Change expanded/collapsed states for the fields and text blocks\n\t\tCollapsibleBlock.expand( substepFieldsElement, withTransition, withFocus );\n\t\tCollapsibleBlock.collapse( substepTextElement, withTransition );\n\n\t\t// Add editing class to the substep element\n\t\tsubstepElement.classList.add( _settings.isEditingClass );\n\t}\n\n\t/**\n\t * Collapse the substep fields, and expand the substep values in text format for review.\n\t *\n\t * @param HTMLElement substepElement Substep element to change the state of.\n\t */\n\tvar collapseSubstepEdit = function( substepElement ) {\n\t\t// Bail if editButton not valid\n\t\tif ( ! substepElement ) { return; }\n\n\t\tvar substepFieldsElement = substepElement.querySelector( _settings.substepFieldsSelector );\n\t\tvar substepTextElement = substepElement.querySelector( _settings.substepTextSelector );\n\n\t\t// Change expanded/collapsed states for the fields and text blocks\n\t\tCollapsibleBlock.collapse( substepFieldsElement );\n\t\tCollapsibleBlock.expand( substepTextElement );\n\n\t\t// Remove editing class from the substep element\n\t\tsubstepElement.classList.remove( _settings.isEditingClass );\n\n\t\t// Focus on the substep edit button\n\t\tvar editbutton = substepElement.querySelector( _settings.substepEditButtonSelector );\n\t\tif ( editbutton ) {\n\t\t\teditbutton.focus();\n\t\t}\n\n\t\t// Change scroll position after collapsing substep\n\t\tscrollTo( substepElement );\n\t}\n\n\n\n\t/**\n\t * Use the same method that WooCommerce uses to block other parts of the checkout form while updating.\n\t * The UI is unblocked by the WooCommerce `checkout.js` script (which is replaced with a modified version but keeps the same behavior)\n\t * using the checkout fragment selector, then unblocking after the checkout update is completed.\n\t *\n\t * @param HTMLElement element Element to block the UI and show the loading indicator.\n\t */\n\tvar blockUI = function( element ) {\n\t\tif ( _hasJQuery ) {\n\t\t\t$( element ).block( {\n\t\t\t\tmessage: null,\n\t\t\t\toverlayCSS: {\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\topacity: 0.6\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Maybe remove `is-loading` class from fragments after checkout update.\n\t *\n\t * @param Event _event An unused `jQuery.Event` object.\n\t * @param Array data The updated checkout data.\n\t */\n\tvar maybeRemoveFragmentsLoadingClass = function( _event, data ) {\n\t\t// Iterate fragments\n\t\tif ( data && data.fragments ) {\n\t\t\tfor ( var key in data.fragments ) {\n\t\t\t\t// Try to get the target fragment element\n\t\t\t\tvar framentElement = document.querySelector( key );\n\t\t\t\tif ( framentElement ) {\n\t\t\t\t\t// Remove `is-loading` class from the fragment element\n\t\t\t\t\tframentElement.classList.remove( _settings.isLoadingClass );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Collapse the substep fields, and expand the substep values in text format for review.\n\t *\n\t * @param HTMLElement substepElement Substep element to change the state of.\n\t */\n\tvar maybeSaveSubstep = function( substepElement ) {\n\t\t// Bail if editButton not valid\n\t\tif ( ! substepElement ) { return; }\n\t\t\n\t\t// Maybe validate fields\n\t\tif ( window.CheckoutValidation && ! CheckoutValidation.validateAllFields( substepElement ) ) {\n\t\t\t// Try to focus the first invalid field\n\t\t\tvar firstInvalidField = substepElement.querySelector( _settings.invalidFieldRowSelector );\n\t\t\tif ( firstInvalidField ) {\n\t\t\t\tfirstInvalidField.focus();\n\t\t\t}\n\n\t\t\t// Bail when substep has invalid fields\n\t\t\treturn;\n\t\t}\n\n\t\t// Collapse substep fields and display step in text format\n\t\tcollapseSubstepEdit( substepElement );\n\n\t\t// Update checkout\n\t\tif ( _hasJQuery ) {\n\t\t\t// Get text content element, then block IU\n\t\t\tvar contentElement = substepElement.querySelector( _settings.substepTextContentSelector );\n\t\t\tblockUI( contentElement );\n\n\t\t\t// Remove messages prior to updating\n\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\n\t\t\t// Trigger update checkout\n\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Update the progress bar state.\n\t */\n\tvar updateProgressBar = function() {\n\t\t// Get current step\n\t\tvar currentStepElement = document.querySelector( _settings.currentStepSelector );\n\t\t\n\t\t// Bail if no current step was found\n\t\tif ( ! currentStepElement ) { return; }\n\n\t\t// Get index of the current step\n\t\tvar currentStepIndex = parseInt( currentStepElement.getAttribute( _settings.stepIndexAttribute ) );\n\t\tcurrentStepIndex = isNaN( currentStepIndex ) ? -1 : currentStepIndex;\n\n\t\t// Get progress bar items\n\t\tvar progressBarElement = document.querySelector( _settings.progressBarSelector )\n\n\t\t// Bail if progress bar element not found\n\t\tif ( ! progressBarElement ) { return; }\n\n\t\tvar progressBarItems = progressBarElement.querySelectorAll( _settings.progressBarItemSelector );\n\t\tvar progressBarItemsCount = progressBarItems.length;\n\n\t\t// Update progress bar items status\n\t\tfor ( var i = 0; i < progressBarItems.length; i++ ) {\n\t\t\tvar bar = progressBarItems[i];\n\t\t\tvar stepIndex = parseInt( bar.getAttribute( _settings.stepIndexAttribute ) );\n\t\t\tstepIndex = isNaN( stepIndex ) ? -1 : stepIndex;\n\n\t\t\t// Update the `current` status for each progress bar item\n\t\t\tif ( stepIndex == currentStepIndex ) {\n\t\t\t\tbar.classList.add( _settings.isCurrentClass );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbar.classList.remove( _settings.isCurrentClass );\n\t\t\t}\n\n\t\t\t// Update the `complete` status for each progress bar item\n\t\t\tif ( stepIndex <= currentStepIndex ) {\n\t\t\t\tbar.classList.add( _settings.isCompleteClass );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbar.classList.remove( _settings.isCompleteClass );\n\t\t\t}\n\t\t}\n\n\t\t// Calculate the current step text value\n\t\tvar currentStepValue = currentStepIndex + 1;\n\t\tcurrentStepValue = currentStepValue <= progressBarItemsCount ? currentStepValue : progressBarItemsCount;\n\n\t\t// Change value of the current step text indicator\n\t\tvar currentStepTextElement = progressBarElement.querySelector( _settings.progressBarCurrentSelector );\n\t\tif ( currentStepTextElement ) {\n\t\t\tcurrentStepTextElement.innerText = currentStepValue;\n\t\t}\n\t}\n\n\n\t/**\n\t * Get the scroll offset position for the sticky elements.\n\t */\n\tvar getStickyElementsOffset = function() {\n\t\tvar stickyElementsOffset = 0;\n\n\t\t// Maybe add height of the progress bar to scroll position\n\t\tvar progressBarElement = document.querySelector( _settings.progressBarSelector );\n\t\tif ( progressBarElement ) {\n\t\t\tvar height = progressBarElement.getBoundingClientRect().height;\n\t\t\tstickyElementsOffset += height;\n\t\t}\n\n\t\t// Maybe add sticky elements height to scroll position\n\t\tif ( window.StickyStates ) {\n\t\t\tvar maybeStickyElements = document.querySelectorAll( _settings.scrollOffsetSelector );\n\t\t\tif ( maybeStickyElements && maybeStickyElements.length > 0 ) {\n\t\t\t\tfor ( var i = 0; i < maybeStickyElements.length; i++ ) {\n\t\t\t\t\tvar stickyElement = maybeStickyElements[i];\n\t\t\t\t\tif ( StickyStates.isStickyPosition( stickyElement ) ) {\n\t\t\t\t\t\tvar height = stickyElement.getBoundingClientRect().height;\n\t\t\t\t\t\tstickyElementsOffset += height;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn stickyElementsOffset;\n\t}\n\n\t/**\n\t * Change scroll position to top of the element after the sticky elements.\n\t *\n\t * @param HTMLElement element The element of to scroll to.\n\t */\n\tvar scrollTo = function( element ) {\n\t\t// Bail if step element not provided\n\t\tif ( ! element ) { return; }\n\n\t\tvar stickyElementsOffset = getStickyElementsOffset();\n\t\tvar elementOffset = getOffsetTop( element ) + ( _settings.scrollOffset * -1 ) + ( stickyElementsOffset * -1 );\n\t\twindow.setTimeout( function() {\n\t\t\twindow.scrollTo( {\n\t\t\t\ttop: elementOffset,\n\t\t\t\tbehavior: _settings.scrollBehavior,\n\t\t\t} );\n\t\t}, _settings.scrollDelay );\n\t}\n\n\n\n\t/**\n\t * Collapse the substep fields, and expand the substep values in text format for review.\n\t *\n\t * @param HTMLElement substepElement Substep element to change the state of.\n\t */\n\tvar maybeProceedNextStep = function( stepElement ) {\n\t\t// Bail if editButton not valid\n\t\tif ( ! stepElement ) { return; }\n\n\t\t// Maybe validate fields\n\t\tif ( window.CheckoutValidation && ! CheckoutValidation.validateAllFields( stepElement ) ) {\n\t\t\t// Try to focus the first invalid field\n\t\t\tvar firstInvalidField = stepElement.querySelector( _settings.invalidFieldRowSelector );\n\t\t\tif ( firstInvalidField ) {\n\t\t\t\tfirstInvalidField.focus();\n\t\t\t}\n\n\t\t\t// Bail when any substep has invalid fields\n\t\t\treturn;\n\t\t}\n\n\t\t// Set current step as complete\n\t\tstepElement.setAttribute( _settings.stepCompleteAttribute, '' );\n\n\t\t// Collapse substeps fields and display step in text format\n\t\tvar substepElements = stepElement.querySelectorAll( _settings.substepSelector );\n\t\tfor ( var i = 0; i < substepElements.length; i++ ) {\n\t\t\tvar substepElement = substepElements[i];\n\n\t\t\t// Get text content element, then block IU\n\t\t\tvar contentElement = substepElement.querySelector( _settings.substepTextContentSelector );\n\t\t\tif ( contentElement ) {\n\t\t\t\tcontentElement.classList.add( _settings.isLoadingClass );\n\t\t\t\tblockUI( contentElement );\n\t\t\t}\n\n\t\t\t// Collapse substep\n\t\t\tcollapseSubstepEdit( substepElement );\n\t\t}\n\n\t\t// Get next step, and set it as current\n\t\tvar nextStepElement = stepElement.parentElement.querySelector( _settings.nextStepSelector );\n\t\tnextStepElement.setAttribute( _settings.stepCurrentAttribute, '' );\n\n\t\t// Unset `current` from the step that is closing\n\t\t// (needs to run after setting the next step as the current one)\n\t\tstepElement.removeAttribute( _settings.stepCurrentAttribute );\n\n\t\t// Remove `next-step-incomplete` class from previous steps\n\t\tvar allSteps = getAllSteps();\n\t\tvar stepIndex = allSteps.indexOf( stepElement );\n\t\tfor ( var i = 0; i < allSteps.length; i++ ) {\n\t\t\tif ( i < stepIndex ) {\n\t\t\t\tvar step = allSteps[i];\n\t\t\t\tstep.classList.remove( _settings.stepNextIncompleteClass );\n\t\t\t}\n\t\t}\n\n\t\t// Update progress bar\n\t\tupdateProgressBar();\n\n\t\t// Maybe set focusElement to the first focusable element that is visible\n\t\tvar focusElement = null;\n\t\tvar focusableElements = Array.from( getFocusableElements( nextStepElement ) );\n\t\tfor ( var i = 0; i < focusableElements.length; i++ ) {\n\t\t\tvar focusableElement = focusableElements[i];\n\t\t\tif ( isVisible( focusableElement ) ) {\n\t\t\t\tfocusElement = focusableElement;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Set focus\n\t\tif ( focusElement ) {\n\t\t\tfocusElement.focus();\n\t\t}\n\n\t\t// Change scroll position after moving to next step\n\t\tscrollTo( stepElement );\n\n\t\t// Trigger update checkout\n\t\tif ( _hasJQuery ) {\n\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Update the body classes for step states.\n\t */\n\tvar updateStepBodyClasses = function() {\n\t\t// Bail if not using multistep layout\n\t\tif ( 'yes' !== _settings.maybeDisablePlaceOrderButton || 'yes' !== _settings.isMultistepLayout ) { return; }\n\n\t\t// Remove current step class\n\t\tvar allSteps = getAllSteps();\n\t\tfor ( var i = 0; i < allSteps.length; i++ ) {\n\t\t\tvar step = allSteps[i];\n\t\t\tvar stepId = step.getAttribute( _settings.stepIdAttribute );\n\t\t\tvar className = _settings.currentStepClassTemplate.replace( '##STEP_ID##', stepId );\n\t\t\tdocument.body.classList.remove( className );\n\t\t}\n\n\t\t// Maybe add current step class\n\t\tvar currentStepElement = document.querySelector( _settings.currentStepSelector );\n\t\tvar lastStepElement = document.querySelector( _settings.lastStepSelector );\n\t\tif ( currentStepElement ) {\n\t\t\tvar stepId = currentStepElement.getAttribute( _settings.stepIdAttribute );\n\t\t\t\n\t\t\t// Add current step class\n\t\t\tvar className = _settings.currentStepClassTemplate.replace( '##STEP_ID##', stepId );\n\t\t\tdocument.body.classList.add( className );\n\t\t\t\n\t\t\t// Maybe add last step class\n\t\t\tif ( lastStepElement ) {\n\t\t\t\tvar currentStepId = currentStepElement.getAttribute( _settings.stepIdAttribute );\n\t\t\t\tvar lastStepId = lastStepElement.getAttribute( _settings.stepIdAttribute );\n\t\t\t\tif ( lastStepId === currentStepId ) {\n\t\t\t\t\tdocument.body.classList.add( _settings.currentLastStepClass );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Maybe disable the place order buttons.\n\t */\n\tvar maybeDisablePlaceOrderButton = function() {\n\t\t// Bail if not using multistep layout\n\t\tif ( 'yes' !== _settings.maybeDisablePlaceOrderButton || 'yes' !== _settings.isMultistepLayout ) { return; }\n\n\t\t// Check if current step is same as last step\n\t\tvar currentStepElement = document.querySelector( _settings.currentStepSelector );\n\t\tvar lastStepElement = document.querySelector( _settings.lastStepSelector );\n\t\tif ( currentStepElement && lastStepElement ) {\n\t\t\tvar currentStepId = currentStepElement.getAttribute( _settings.stepIdAttribute );\n\t\t\tvar lastStepId = lastStepElement.getAttribute( _settings.stepIdAttribute );\n\t\t\tvar isDisabled = currentStepId !== lastStepId;\n\n\t\t\tvar placeOrderButtons = document.querySelectorAll( _settings.placeOrderButtonSelector );\n\t\t\tfor ( var i = 0; i < placeOrderButtons.length; i++ ) {\n\t\t\t\tvar button = placeOrderButtons[i];\n\t\t\t\tbutton.disabled = isDisabled;\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Update the global state of steps.\n\t *\n\t * @param Event _event An unused `jQuery.Event` object.\n\t * @param Array data The updated checkout data.\n\t */\n\tvar updateGlobalStepStates = function( _event, data ) {\n\t\tupdateStepBodyClasses();\n\t\tmaybeDisablePlaceOrderButton();\n\t}\n\n\n\n\t/**\n\t * Maybe change visibility status of checkout substep sections.\n\t *\n\t * @param Event _event An unused `jQuery.Event` object.\n\t * @param Array data The updated checkout data.\n\t */\n\tvar maybeChangeSubstepState = function( _event, data ) {\n\t\tvar substepElements = document.querySelectorAll( _settings.substepSelector );\n\t\tfor ( var i = 0; i < substepElements.length; i++ ) {\n\t\t\tvar substepElement = substepElements[i];\n\t\t\t\n\t\t\t// Handle editable state\n\t\t\tvar editableHiddenField = substepElement.querySelector( _settings.substepEditableStateFieldSelector );\n\t\t\tif ( editableHiddenField && 'no' === editableHiddenField.value ) {\n\t\t\t\tsubstepElement.setAttribute( _settings.substepEditableStateAttribute, editableHiddenField.value );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsubstepElement.removeAttribute( _settings.substepEditableStateAttribute );\n\t\t\t}\n\n\t\t\t// Handle visibility state\n\t\t\tvar visibilityHiddenField = substepElement.querySelector( _settings.substepVisibleStateFieldSelector );\n\t\t\tif ( visibilityHiddenField && 'no' === visibilityHiddenField.value ) {\n\t\t\t\tsubstepElement.setAttribute( _settings.substepVisibleStateAttribute, visibilityHiddenField.value );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsubstepElement.removeAttribute( _settings.substepVisibleStateAttribute );\n\t\t\t}\n\n\t\t\t// Handle expanded state\n\t\t\tvar expandedHiddenField = substepElement.querySelector( _settings.substepExpandedStateFieldSelector );\n\t\t\tif ( expandedHiddenField && 'yes' === expandedHiddenField.value ) {\n\t\t\t\tvar substepElement = expandedHiddenField.closest( _settings.substepSelector );\n\t\t\t\texpandSubstepEdit( substepElement, true, false );\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Maybe move place order section to order summary for small screens.\n\t */\n\tvar maybeMovePlaceOrderSection = function() {\n\t\t// Bail if displaying the place order only on the sidebar. In this case there is no need to move the sections.\n\t\tif ( document.body.matches( _settings.placeOrderSkipMoveSelector ) ) { return; }\n\n\t\t// Get viewport width\n\t\tvar viewportWidth = window.innerWidth;\n\n\t\t// Get place order sections\n\t\tvar placeOrderMain = document.querySelector( _settings.placeOrderSectionMainSelector );\n\t\tvar placeOrderPlaceholderMain = document.querySelector( _settings.placeOrderPlaceholderMainSelector );\n\t\tvar placeOrderPlaceholderSidebar = document.querySelector( _settings.placeOrderPlaceholderSidebarSelector );\n\n\t\t// Bail if elements are not found\n\t\tif ( ! placeOrderMain || ! placeOrderPlaceholderMain || ! placeOrderPlaceholderSidebar ) { return; }\n\n\t\t// Maybe move to sidebar section\n\t\tif ( viewportWidth < 1000 && placeOrderPlaceholderSidebar.parentNode !== placeOrderMain.parentNode ) {\n\t\t\tplaceOrderPlaceholderSidebar.parentNode.insertBefore( placeOrderMain, placeOrderPlaceholderSidebar.nextSibling );\n\t\t}\n\t\t// Maybe move to steps section\n\t\telse if ( viewportWidth >= 1000 && placeOrderPlaceholderMain.parentNode !== placeOrderMain.parentNode ) {\n\t\t\tplaceOrderPlaceholderMain.parentNode.insertBefore( placeOrderMain, placeOrderPlaceholderMain.nextSibling );\n\t\t}\n\t};\n\n\n\n\t/**\n\t * Handle document clicks and route to the appropriate function.\n\t */\n\tvar handleClick = function( e ) {\n\t\t// NEXT STEP\n\t\tif ( e.target.closest( _settings.nextStepButtonSelector ) ) {\n\t\t\te.preventDefault();\n\t\t\tvar step = e.target.closest( _settings.stepSelector );\n\t\t\tmaybeProceedNextStep( step );\n\t\t}\n\t\t// EDIT SUBSTEP\n\t\telse if ( e.target.closest( _settings.substepEditButtonSelector ) ) {\n\t\t\te.preventDefault();\n\t\t\tvar substepElement = e.target.closest( _settings.substepSelector );\n\t\t\texpandSubstepEdit( substepElement );\n\t\t}\n\t\t// SAVE SUBSTEP\n\t\telse if ( e.target.closest( _settings.substepSaveButtonSelector ) ) {\n\t\t\te.preventDefault();\n\t\t\tvar substepElement = e.target.closest( _settings.substepSelector );\n\t\t\tmaybeSaveSubstep( substepElement );\n\t\t}\n\t};\n\n\n\n\t/**\n\t * Handle keypress event.\n\t */\n\tvar handleKeyDown = function( e ) {\n\t\t// Should do nothing if the default action has been cancelled\n\t\tif ( e.defaultPrevented ) { return; }\n\n\t\t// ENTER or SPACE on handler elements\n\t\tif ( ( FCUtils.keyboardKeys.ENTER === e.key || FCUtils.keyboardKeys.SPACE === e.key ) && ( e.target.closest( _settings.substepEditButtonSelector ) || e.target.closest( _settings.substepSaveButtonSelector ) ) ) {\n\t\t\t// Simulate click\n\t\t\thandleClick( e );\n\t\t}\n\t\t// ENTER on form fields.\n\t\t// Prevents submit of the checkout form when pressing ENTER on a field inside the checkout form.\n\t\telse if ( FCUtils.keyboardKeys.ENTER === e.key && e.target.closest( _settings.checkoutFormSelector ) && e.target.closest( _settings.fieldSubmitFormSelector ) ) {\n\t\t\te.preventDefault();\n\n\t\t\t// Maybe validate field\n\t\t\tif ( window.CheckoutValidation ) {\n\t\t\t\tvar field = e.target.closest( _settings.fieldSubmitFormSelector );\n\t\t\t\tCheckoutValidation.validateField( field, 'step-validation' );\n\t\t\t}\n\t\t}\n\t};\n\n\n\n\t/**\n\t * Initialize component and set related handlers.\n\t */\n\t_publicMethods.init = function( options ) {\n\t\tif ( _hasInitialized ) return;\n\n\t\t// Merge settings\n\t\t_settings = FCUtils.extendObject( _settings, options );\n\n\t\t// Maybe move place order section, and initialize resize observers\n\t\tmaybeMovePlaceOrderSection();\n\t\tif ( window.ResizeObserver ) {\n\t\t\t_resizeObserver = new ResizeObserver( FCUtils.debounce( maybeMovePlaceOrderSection, _settings.placeOrderRefreshRate ) );\n\t\t\t_resizeObserver.observe( document.body );\n\t\t}\n\n\t\t// Add event listeners\n\t\twindow.addEventListener( 'click', handleClick );\n\t\tdocument.addEventListener( 'keydown', handleKeyDown, true );\n\n\t\t// Add jQuery event listeners\n\t\tif ( _hasJQuery ) {\n\t\t\t$( document.body ).on( 'updated_checkout', updateGlobalStepStates );\n\t\t\t$( document.body ).on( 'updated_checkout', maybeChangeSubstepState );\n\t\t\t$( document.body ).on( 'updated_checkout', maybeRemoveFragmentsLoadingClass );\n\t\t}\n\n\t\t// Add init class\n\t\tdocument.body.classList.add( _settings.bodyClass );\n\n\t\t_hasInitialized = true;\n\t};\n\n\n\n\t//\n\t// Public APIs\n\t//\n\treturn _publicMethods;\n\n});\n"],"names":["root","factory","define","amd","exports","module","CheckoutSteps","global","this","window","expandSubstepEdit","substepElement","withTransition","withFocus","substepFieldsElement","substepTextElement","querySelector","_settings","substepFieldsSelector","substepTextSelector","CollapsibleBlock","expand","collapse","classList","add","isEditingClass","maybeRemoveFragmentsLoadingClass","_event","data","fragments","key","framentElement","document","remove","isLoadingClass","updateGlobalStepStates","maybeDisablePlaceOrderButton","isMultistepLayout","allSteps","getAllSteps","i","length","stepId","getAttribute","stepIdAttribute","className","currentStepClassTemplate","replace","body","currentStepElement","currentStepSelector","lastStepElement","lastStepSelector","currentStepId","currentLastStepClass","isDisabled","placeOrderButtons","querySelectorAll","placeOrderButtonSelector","disabled","maybeChangeSubstepState","substepElements","substepSelector","editableHiddenField","substepEditableStateFieldSelector","visibilityHiddenField","value","setAttribute","substepEditableStateAttribute","removeAttribute","substepVisibleStateFieldSelector","expandedHiddenField","substepVisibleStateAttribute","substepExpandedStateFieldSelector","closest","maybeMovePlaceOrderSection","viewportWidth","placeOrderMain","placeOrderPlaceholderMain","placeOrderPlaceholderSidebar","matches","placeOrderSkipMoveSelector","innerWidth","placeOrderSectionMainSelector","placeOrderPlaceholderMainSelector","placeOrderPlaceholderSidebarSelector","parentNode","insertBefore","nextSibling","handleClick","e","target","nextStepButtonSelector","preventDefault","stepElement","stepSelector","CheckoutValidation","validateAllFields","firstInvalidField","invalidFieldRowSelector","focus","stepCompleteAttribute","contentElement","substepTextContentSelector","blockUI","collapseSubstepEdit","nextStepElement","parentElement","nextStepSelector","stepCurrentAttribute","stepIndex","indexOf","stepNextIncompleteClass","updateProgressBar","focusElement","focusableElements","Array","from","getFocusableElements","focusableElement","isVisible","scrollTo","_hasJQuery","$","trigger","substepEditButtonSelector","substepSaveButtonSelector","handleKeyDown","field","defaultPrevented","FCUtils","keyboardKeys","ENTER","SPACE","checkoutFormSelector","fieldSubmitFormSelector","validateField","jQuery","_hasInitialized","_publicMethods","bodyClass","bodyClassActiveStepPattern","wrapperSelector","progressBarSelector","progressBarCurrentSelector","progressBarItemSelector","stepsWrapperSelector","focusableElementsSelector","stepIndexAttribute","isCurrentClass","isCompleteClass","placeOrderRefreshRate","scrollOffsetSelector","scrollBehavior","scrollOffset","scrollDelay","element","offsetWidth","offsetHeight","getClientRects","getOffsetTop","stopElement","offsetTop","offsetParent","stepsWrapper","editbutton","block","message","overlayCSS","background","opacity","currentStepIndex","parseInt","isNaN","progressBarElement","progressBarItems","progressBarItemsCount","bar","currentStepValue","currentStepTextElement","innerText","getStickyElementsOffset","stickyElementsOffset","getBoundingClientRect","height","StickyStates","maybeStickyElements","stickyElement","isStickyPosition","elementOffset","setTimeout","top","behavior","init","options","extendObject","ResizeObserver","debounce","observe","addEventListener","on"],"mappings":"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"}