1import{F as b,a as R,b as F,C as I}from"./chunk-control_connector.Ckt-76h.js";import{$ as N,e as w,t as P,n as v,J as $}from"./chunk-vendor-lit.NvY0u02.js";import{S as A}from"./chunk-subscription_controller.pXrelaM.js";import{i as x,a as D,b as H,e as B}from"./chunk-vendor-lodash.CWHFt7Z.js";import{v as L,t as q,R as j,u as O,Q as u,A as _,H as V,e as U,x as G,T as Q,S as z,y as J}from"./storefrontApp.CsApItsi.min.js";import{S as T}from"./chunk-storefront_base_lit_element.lX23Jvc.js";import{C as W}from"./chunk-control_connector_constants.CepOMss.js";import{A as Y}from"./chunk-aria_live_controller.C7oC-WU.js";import{F as K,a as X}from"./chunk-form_controller.DnsWIaz.js";import{C as Z}from"./chunk-context_consumer_controller.DQ84A7A.js";import{S as k}from"./chunk-storefront_settings_constants.DIF02Gz.js";import{C as tt}from"./chunk-context_provider_controller.CCbkLM7.js";import"./chunk-vendor-di.Bh23gdA.js";import"./chunk-vendor-rxjs.Dp7kflo.js";import"./chunk-vendor-phoenix.cdKS79L.js";import"./chunk-storefront_event_handler.Ci34Uxt.js";import"./chunk-form_state_constants.Gcz9tYH.js";import"./chunk-index.esm.BJO8Gf1.js";import"./chunk-select_utils.BhqqJnk.js";import"./chunk-color_swatches_control_constants.Goty5zR.js";const rt=".js__error-message";class et{constructor(r,s,o){this._areNewErrorsDifferentFromCurrentOnes=t=>{if(!this.errors||t.length===0)return!0;const e=this.errors.map(i=>i.value);return!x(D(t,e))},this._handleAriaErrors=()=>{const t=this._getControlsToFocus();if(!t||t.length===0)return;const e=this.errors&&this.errors.length>0?this._setAriaErrors:this._removeAriaErrors;t.forEach(e)},this._handleCssErrorClasses=()=>{const t=this._host.closest("h-control");if(!t)return;const e=this.errors!==void 0&&this.errors.length>0;[{selector:null,className:"control_error"},{selector:"h-control-label",className:"control__label_error"},{selector:"h-control-content",className:"control__content_error"},{selector:"h-control-element",className:"control__element_error"},{selector:"h-input",className:"input_error"}].forEach(({selector:a,className:c})=>{(a?t.querySelector(a):t)?.classList.toggle(c,e)})},this._setAriaErrors=t=>{const e=t.getAttribute("aria-describedby")||"",i=`error-${this._controlName}`;if(!e.includes(i)){const a=e?`${i} ${e}`.trim():i;t.getAttribute("role")==="radiogroup"?t.querySelectorAll('[type="radio"], [role="radio"]').forEach(c=>{const l=c.getAttribute("aria-describedby")||"",m=l?`${i} ${l}`.trim():i;c.setAttribute("aria-describedby",m)}):t.setAttribute("aria-describedby",a)}t.setAttribute("aria-invalid","true")},this._removeAriaErrors=t=>{const e=`error-${this._controlName}`;if(t.getAttribute("role")==="radiogroup")t.querySelectorAll('[type="radio"], [role="radio"]').forEach(i=>{const c=(i.getAttribute("aria-describedby")||"").replace(e,"").replace(/\s+/g," ").trim();this._updateAriaDescribedBy(i,c)});else{const a=(t.getAttribute("aria-describedby")||"").replace(e,"").replace(/\s+/g," ").trim();this._updateAriaDescribedBy(t,a)}t.removeAttribute("aria-invalid")},this._updateAriaDescribedBy=(t,e)=>{e?t.setAttribute("aria-describedby",e):t.removeAttribute("aria-describedby")},this._controlName=s,this._formService=o,this._subscriptionController=new A(r),this._host=r,this._host.addController(this)}hostConnected(){this._saveErrorsFormHtmlMarkupToStore(),this._setupErrorsSubscription()}_saveErrorsFormHtmlMarkupToStore(){const r=this._host.querySelectorAll(rt);if(!r?.length||!this._formService)return;(this._host.id?[this._formService.getFormControl(this._host.id)]:this._formService.getFormControlsByName(this._controlName))?.forEach(o=>{o&&this._formService?.updateFormControl(o.id,{errors:Array.from(r).filter(t=>t.textContent).map(t=>t.textContent?.trim())})})}_setupErrorsSubscription(){if(!this._controlName||!this._formService)return;const r=this._formService.selectFormControlsByName$(this._controlName);this._subscriptionController.subscribe(r,s=>{const o=s?.reduce((e,{errors:i})=>i?[...e,...i]:e,[])??[],t=H(o);this._areNewErrorsDifferentFromCurrentOnes(t)&&(this.errors=B(t,e=>({id:L(),value:e})),this._handleAriaErrors(),this._handleCssErrorClasses(),this._host.requestUpdate())})}_getControlsToFocus(){const r=this._host.parentElement;if(!r)return[];const s=r.querySelector("[validation-container]");return s?[s]:[...r.querySelectorAll(`[name="${this._controlName}"]`)]}}var st=Object.defineProperty,ot=Object.getOwnPropertyDescriptor,C=(n,r,s,o)=>{for(var t=o>1?void 0:o?ot(r,s):r,e=n.length-1,i;e>=0;e--)(i=n[e])&&(t=(o?i(r,s,t):i(t))||t);return o&&t&&st(r,s,t),t};let h=class extends T{constructor(){super(),this.id="",this._controlName=null,this._currentErrors=[],this._shouldAnnounceErrors=!0,this._handlePreventAnnouncing=()=>{this._shouldAnnounceErrors=!1},this._contextConsumer=new Z(this)}async connectedCallback(){super.connectedCallback();try{this._controlName=await this._contextConsumer.consumeAsync(W);const n=await this._contextConsumer.consumeAsync(b);this._controlErrorsController=new et(this,this._controlName,n),this._ariaLiveController||(this._ariaLiveController=new Y(this))}catch{}document.addEventListener(K.preventAnnouncingErrorsOnce,this._handlePreventAnnouncing)}updated(n){super.updated(n);const r=!this._shouldAnnounceErrors;this._shouldAnnounceErrors=!0;const s=this._controlErrorsController?.errors;if(!s)return;const o=s.filter(t=>!this._currentErrors.find(e=>e.value===t.value));this._currentErrors=s,!(o.length===0||r)&&this._ariaLiveController?.handleNotifications(o)}render(){return this._controlErrorsController?.errors?.length?N` 2 <ul class="form-errors" id="error-${this._controlName}"> 3 ${Object.values(this._controlErrorsController?.errors).map(n=>N` 4 <li class="form-errors__error" id="${n.id}">${n.value}</li> 5 `)} 6 </ul> 7 `:null}};C([w({type:String})],h.prototype,"id",2);C([P()],h.prototype,"_controlName",2);h=C([v("control-errors")],h);const f={submit:"submit",submitError:"submitError",formInvalid:"formInvalid"};class it{constructor({httpApi:r,$form:s,onSubmit:o,onSubmitError:t,onFormInvalid:e,submitOptions:i,formService:a}){this._$form=s,this._onSubmit=o,this._onSubmitError=t,this._onFormInvalid=e,this._formService=a,this._submitOptions=i,this._httpApi=r}async submit(){!await this._formService.submit(async({formData:s,controlsEntities:o})=>{const{url:t,method:e}=this._submitOptions;try{const{response:i}=this._httpApi.submit({method:e,url:t,data:$.toJson(Object.fromEntries(s)),sanitizeOptions:{disable:!0}}),a=await i;this._onSubmit({formData:s,controlsEntities:o,responseObject:a})}catch(i){const a=i.response?.data.validation_messages;a&&this._updateControlsWithErrorsMessages(a),this._onSubmitError({err:i})}})&&this._onFormInvalid&&await this._onFormInvalid()}_updateControlsWithErrorsMessages(r){for(const[s,o]of Object.entries(r))this._formService.updateFormControlByName(s,{errors:o})}}class nt{constructor({httpApi:r,$form:s,onSubmit:o,submitOptions:t,formService:e}){this._$form=s,this._onSubmit=o,this._formService=e,this._submitOptions=t,this._httpApi=r}async submit(){await this._formService.submit(async({formData:r,controlsEntities:s})=>{const{url:o,method:t}=this._submitOptions,{response:e}=this._httpApi.submit({method:t,url:o,data:r,sanitizeOptions:{disable:!0}}),i=await e;this._updateFormView(i.data),this._onSubmit({formData:r,controlsEntities:s,responseObject:i})})}_updateFormView(r){const s=document.createDocumentFragment(),o=document.createElement("div");o.innerHTML=r,s.appendChild(o);const t=s.querySelector(`#${this._$form.id}`);this._$form.replaceChildren(...t.children)}}const at="FormSubmissionHttpApi",S={html:"html",frontApi:"frontApi"},ct={[S.html]:nt,[S.frontApi]:it},p="challenge";class lt extends q{constructor(r){super(r),this.moduleName=at,this.#t=r}#t;submit({url:r,method:s=j.get,data:o,sanitizeOptions:t}){return this.fetch({url:r,method:s,data:o,sanitizeOptions:t},{decorators:[O.status,O.flashMessages]})}}class ht{constructor({host:r,$form:s,onSubmit:o,onSubmitError:t,onFormInvalid:e,submitOptions:i,formService:a,queryBus:c}){this._submissionStrategies=ct,this.#t=async g=>{g.preventDefault(),g.stopPropagation(),!(this._settingsApi.isFeatureEnabled("dev_storefront_form_honeypot")&&this._inHoneypotTrap())&&(await this._addRecaptchaTokenToForm(),await this._submissionStrategy.submit(),this._host.querySelector('[aria-invalid="true"]')?.focus())},this._host=r,this._$form=s,this._onSubmit=o,this._onSubmitError=t,this._onFormInvalid=e,this._formService=a,this._submitOptions=i;const l=c.executeSync(new u(_.getApiSync,V)),m=c.executeSync(new u(_.getApiSync,U.api));this._flashMessengerApi=m,this._recaptchaApi=c.executeSync(new u(_.getApiSync,G.api)),this._settingsApi=c.executeSync(new u(_.getApiSync,k.api)),this._formSubmissionHttpApi=new lt(l),this._subscriptionController=new A(this._host);const y=this._submissionStrategies[i.submitStrategy];if(!y)throw new R(`Submission strategy ${i.submitStrategy} not found`);this._submissionStrategy=new y({httpApi:this._formSubmissionHttpApi,formService:this._formService,$form:this._$form,onSubmit:this._onSubmit,onSubmitError:this._onSubmitError,onFormInvalid:this._onFormInvalid,submitOptions:this._submitOptions,flashMessengerApi:m}),this._host.addController(this)}hostConnected(){this._$form.addEventListener("submit",this.#t)}#t;_inHoneypotTrap(){const r=this._$form.querySelector('[name="email_verify"]');return r&&r.value?(this._flashMessengerApi.addFlashMessage({type:"success",content:"Message sent"}),!0):!1}async _addRecaptchaTokenToForm(){if(this._recaptchaApi&&this._recaptchaApi.isRecaptchaEnabled()){const r=await this._recaptchaApi.getToken("submit");this._formService.hasFormControl(p)?this._formService.setFormControlValue(p,r):this._formService.addFormControl({id:p,name:p,type:"hidden",value:r})}}hostDisconnected(){this._$form.removeEventListener("submit",this.#t)}}var mt=Object.getOwnPropertyDescriptor,ut=(n,r,s,o)=>{for(var t=o>1?void 0:o?mt(r,s):r,e=n.length-1,i;e>=0;e--)(i=n[e])&&(t=i(t)||t);return t};let E=class extends T{constructor(){super(),this._context=new tt(this);const n=this.getApiSync(Q.api);this.formController=new X({host:this},n),this.formService=this.formController.formService,this._context.provide(F,this.formController),this._context.provide(b,this.formService)}connectedCallback(){super.connectedCallback(),this._context.provide(F,this.formController),this._context.provide(b,this.formService)}
7registerControls(n){n.forEach(r=>this.formService.addFormControl(r))}};E=ut([v("reactive-form")],E);var _t=Object.defineProperty,pt=Object.getOwnPropertyDescriptor,M=(n,r,s,o)=>{for(var t=o>1?void 0:o?pt(r,s):r,e=n.length-1,i;e>=0;e--)(i=n[e])&&(t=(o?i(r,s,t):i(t))||t);return o&&t&&_t(r,s,t),t};let d=class extends E{constructor(){super(),this.submitStrategy=S.html,this._subscriptionController=new A(this),this._setupFormSubmitHandler=n=>{const{action:r,method:s}=n;this._submitController=new ht({host:this,$form:n,onSubmit:this._dispatchSubmitEvent,onSubmitError:this._dispatchSubmitErrorEvent,onFormInvalid:this._dispatchFormInvalidEvent,submitOptions:{url:r,method:s,submitStrategy:this.submitStrategy},formService:this.formService,queryBus:this.queryBus})},this._dispatchSubmitEvent=n=>{this.dispatchEvent(new CustomEvent(f.submit,{detail:{form:this.formController.form$,submitActionProps:n}}))},this._dispatchSubmitErrorEvent=n=>{this.dispatchEvent(new CustomEvent(f.submitError,{detail:{form:this.formController.form$,submitActionProps:n}}))},this._dispatchFormInvalidEvent=()=>{this.dispatchEvent(new CustomEvent(f.formInvalid))},this._subscriptionController.subscribe(this.formController.form$,this._setupFormSubmitHandler)}};M([w({type:String,attribute:"submit-strategy"})],d.prototype,"submitStrategy",2);d=M([v("form-connector")],d);class xt extends z{static{this.featureName=J.feature}static{this._components={formConnector:d,controlErrors:h,controlConnector:I}}}export{xt as FormManagementInitializer};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.