{"version":3,"file":"../checkout-steps-208.min.js","sources":["checkout-steps-208.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\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\texpansibleSectionToggleSelector: '[data-expansible-section-toggle]',\n\t\texpansibleSectionExpandAttribute: 'data-expansible-section-expand',\n\t\texpansibleSectionCollapseAttribute: 'data-expansible-section-collapse',\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\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\n\t\tinvalidFieldRowSelector: '.woocommerce-invalid .input-text, .woocommerce-invalid select',\n\n\t\tplaceOrderButtonSelector: '.fc-place-order-button',\n\n\t\tscrollOffsetSelector: '.fc-checkout-header',\n\t\tscrollBehavior: 'smooth',\n\t\tscrollOffset: 0,\n\t\tscrollDelay: 50,\n\t}\n\tvar _key = {\n\t\tENTER: 'Enter',\n\t\tSPACE: ' ',\n\t}\n\n\n\n\t/**\n\t * METHODS\n\t */\n\n\n\n\t/*!\n\t* Merge two or more objects together.\n\t* (c) 2017 Chris Ferdinandi, MIT License, https://gomakethings.com\n\t* @param {Boolean} deep If true, do a deep (or recursive) merge [optional]\n\t* @param {Object} objects The objects to merge together\n\t* @returns {Object} Merged values of defaults and options\n\t*/\n\tvar extend = function () {\n\t\t// Variables\n\t\tvar extended = {};\n\t\tvar deep = false;\n\t\tvar i = 0;\n\n\t\t// Check if a deep merge\n\t\tif ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {\n\t\t\tdeep = arguments[0];\n\t\t\ti++;\n\t\t}\n\n\t\t// Merge the object into the extended object\n\t\tvar merge = function (obj) {\n\t\t\tfor (var prop in obj) {\n\t\t\t\tif (obj.hasOwnProperty(prop)) {\n\t\t\t\t\t// If property is an object, merge properties\n\t\t\t\t\tif (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n\t\t\t\t\t\textended[prop] = extend(extended[prop], obj[prop]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\textended[prop] = obj[prop];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Loop through each object and conduct a merge\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar obj = arguments[i];\n\t\t\tmerge(obj);\n\t\t}\n\n\t\treturn extended;\n };\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 */\n\tvar expandSubstepEdit = 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.expand( substepFieldsElement );\n\t\tCollapsibleBlock.collapse( substepTextElement );\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\tif ( currentStepElement ) {\n\t\t\tvar stepId = currentStepElement.getAttribute( _settings.stepIdAttribute );\n\t\t\tvar className = _settings.currentStepClassTemplate.replace( '##STEP_ID##', stepId );\n\t\t\tdocument.body.classList.add( className );\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\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 ( ( e.key == _key.ENTER || e.key == _key.SPACE ) && ( 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\telse if ( e.key == _key.ENTER && e.target.closest( _settings.fieldSubmitFormSelector ) ) {\n\t\t\te.preventDefault();\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 );\n\t\t\t}\n\t\t}\n\t};\n\n\n\n\t/**\n\t * Finish to initialize component and set related handlers.\n\t */\n\tvar finishInit = function() {\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 * 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 = extend( _settings, options );\n\n\t\t// Finish initialization, maybe load dependencies first\n\t\tif ( window.CollapsibleBlock ) {\n\t\t\tfinishInit();\n\t\t}\n\t\telse if( window.RequireBundle ) {\n\t\t\tRequireBundle.require( [ 'collapsible-block' ], function() { finishInit(); } );\n\t\t}\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","extend","extended","deep","i","Object","prototype","toString","call","arguments","length","prop","obj","hasOwnProperty","getAllSteps","stepsWrapper","document","querySelector","_settings","stepsWrapperSelector","Array","from","querySelectorAll","stepSelector","collapseSubstepEdit","substepElement","substepTextElement","editbutton","substepFieldsElement","substepFieldsSelector","substepTextSelector","CollapsibleBlock","collapse","expand","classList","remove","isEditingClass","substepEditButtonSelector","focus","scrollTo","blockUI","element","_hasJQuery","$","block","message","overlayCSS","background","opacity","maybeRemoveFragmentsLoadingClass","_event","data","fragments","key","framentElement","isLoadingClass","stickyElementsOffset","elementOffset","getStickyElementsOffset","getOffsetTop","scrollOffset","setTimeout","top","behavior","scrollBehavior","scrollDelay","updateGlobalStepStates","updateStepBodyClasses","maybeDisablePlaceOrderButton","maybeChangeSubstepState","substepElements","substepSelector","editableHiddenField","substepEditableStateFieldSelector","visibilityHiddenField","value","setAttribute","substepEditableStateAttribute","removeAttribute","substepVisibleStateFieldSelector","substepVisibleStateAttribute","handleKeyDown","e","field","defaultPrevented","_key","ENTER","SPACE","target","closest","substepSaveButtonSelector","fieldSubmitFormSelector","preventDefault","CheckoutValidation","validateField","handleClick","finishInit","addEventListener","body","on","add","bodyClass","_hasInitialized","jQuery","_publicMethods","bodyClassActiveStepPattern","isMultistepLayout","wrapperSelector","progressBarSelector","progressBarCurrentSelector","progressBarItemSelector","currentStepSelector","lastStepSelector","nextStepSelector","nextStepButtonSelector","focusableElementsSelector","substepTextContentSelector","expansibleSectionToggleSelector","expansibleSectionExpandAttribute","expansibleSectionCollapseAttribute","stepCompleteAttribute","stepCurrentAttribute","stepIndexAttribute","stepIdAttribute","isCurrentClass","isCompleteClass","stepNextIncompleteClass","currentStepClassTemplate","invalidFieldRowSelector","placeOrderButtonSelector","scrollOffsetSelector","stopElement","offsetTop","offsetParent","expandSubstepEdit","maybeSaveSubstep","contentElement","validateAllFields","firstInvalidField","trigger","progressBarElement","getBoundingClientRect","height","StickyStates","maybeStickyElements","stickyElement","isStickyPosition","maybeProceedNextStep","stepElement","nextStepElement","parentElement","allSteps","stepIndex","indexOf","currentStepElement","currentStepIndex","parseInt","getAttribute","isNaN","progressBarItems","progressBarItemsCount","bar","currentStepValue","currentStepTextElement","innerText","focusElement","focusableElements","focusableElement","offsetWidth","offsetHeight","getClientRects","stepId","className","replace","lastStepElement","isDisabled","placeOrderButtons","disabled","step","init","options","RequireBundle","require"],"mappings":"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"}