1 line
11 KiB
JavaScript
1 line
11 KiB
JavaScript
import{B as e,D as t,F as n,G as r,I as i,J as a,K as o,M as s,N as c,O as l,Q as u,R as d,U as f,_ as p,ct as m,d as h,f as g,g as _,h as v,i as y,lt as b,m as x,p as S,ut as C,w,wt as T,xt as E,y as D,yt as O}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import{n as k,t as A}from"./useForwardExpose-BgPOLLFN.js";import{O as ee,S as j,i as M,n as N,r as P}from"./Icon-Chkiq2IE.js";import{a as F,c as te,d as I,i as L,l as ne,o as R,s as z,u as B}from"./Button-jwL-tYHc.js";var V=D({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(e){let r=e;return A(),(e,i)=>(n(),S(O(M),t(r,{onMousedown:i[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:u(()=>[d(e.$slots,`default`)]),_:3},16))}});function H(e){return`schema`in e&&typeof e.coercer==`function`&&typeof e.validator==`function`&&typeof e.refiner==`function`}function U(e){return`~standard`in e}async function W(e,t){let n=await t[`~standard`].validate(e);return n.issues?{errors:n.issues?.map(e=>({name:e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`)||``,message:e.message}))||[],result:null}:{errors:null,result:n.value}}async function G(e,t){let[n,r]=t.validate(e);return n?{errors:n.failures().map(e=>({message:e.message,name:e.path.join(`.`)})),result:null}:{errors:null,result:r}}function re(e,t){if(U(t))return W(e,t);if(H(t))return G(e,t);throw Error(`Form validation failed: Unsupported form schema`)}function ie(e,t){return t?t.split(`.`).reduce((e,t)=>e?.[t],e):e}function ae(e,t,n){if(!t)return Object.assign(e,n);if(!e)return e;let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];(i[t]===void 0||i[t]===null)&&(e+1<r.length&&!Number.isNaN(Number(r[e+1]))?i[t]=[]:i[t]={}),i=i[t]}let a=r[r.length-1];return i[a]=n,e}var K=class e extends Error{formId;errors;constructor(t,n){super(`Form validation exception`),this.formId=t,this.errors=n,Object.setPrototypeOf(this,e.prototype)}},oe={base:``},q={__name:`Form`,props:{id:{type:[String,Number],required:!1},schema:{type:null,required:!1},state:{type:null,required:!1},validate:{type:Function,required:!1},validateOn:{type:Array,required:!1,default(){return[`input`,`blur`,`change`]}},disabled:{type:Boolean,required:!1},name:{type:null,required:!1},validateOnInputDelay:{type:Number,required:!1,default:300},transform:{type:null,required:!1,default:()=>!0},nested:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},onSubmit:{type:Function,required:!1}},emits:[`submit`,`error`],setup(t,{expose:r,emit:a}){let p=t,g=a,_=j(),v=N(`form`,p),x=h(()=>P({extend:P(oe),..._.ui?.form||{}})),T=p.id??f(),D=o(`formRef`),k=ee(`form-${T}`),A=p.nested===!0&&w(L,void 0),M=p.nested===!0?w(B,void 0):void 0,I=h(()=>M?.value?p.name?ie(M.value,p.name):M.value:p.state);i(L,k),i(B,I);let R=C(new Map);s(async()=>{A&&(await l(),A.emit({type:`attach`,validate:X,formId:T,name:p.name,api:_e}))}),c(()=>{k.reset(),A&&A.emit({type:`detach`,formId:T})}),s(async()=>{k.on(async e=>{e.type===`attach`?R.value.set(e.formId,{validate:e.validate,name:e.name,api:e.api}):e.type===`detach`?R.value.delete(e.formId):p.validateOn?.includes(e.type)&&!Z.value&&(e.type===`input`?(e.eager||G.has(e.name))&&await X({name:e.name,silent:!0,nested:!1}):await X({name:e.name,silent:!0,nested:!1})),e.type===`blur`&&G.add(e.name),(e.type===`change`||e.type===`input`||e.type===`blur`||e.type===`focus`)&&W.add(e.name),(e.type===`change`||e.type===`input`)&&U.add(e.name)})});let V=C([]);i(F,V);let H=C({});i(z,H);let U=m(new Set),W=m(new Set),G=m(new Set);function q(e){return e.map(e=>({...e,id:e?.name?H.value[e.name]?.id:void 0}))}let J=C(null);async function Y(){let e=p.validate?await p.validate(I.value)??[]:[];if(p.schema){let{errors:t,result:n}=await re(I.value,p.schema);t?e=e.concat(t):J.value=n}return q(e)}async function X(e={silent:!1,nested:!1,transform:!1}){let t=e.name&&!Array.isArray(e.name)?[e.name]:e.name,n=[],r=[];if(!t&&e.nested){let t=Array.from(R.value.values()).map(t=>se(t,e)),i=await Promise.all(t);r=i.filter(e=>e.error).flatMap(e=>e.error.errors.map(t=>ce(t,e.name))),n=i.filter(e=>e.output!==void 0)}let i=[...await Y(),...r];if(t?V.value=me(i,t):V.value=i,V.value?.length){if(e.silent)return!1;throw new K(T,V.value)}return e.transform?(n.forEach(e=>{e.name?ae(J.value,e.name,e.output):Object.assign(J.value,e.output)}),J.value??I.value):I.value}let Z=C(!1);i(te,b(Z));async function Q(e){Z.value=p.loadingAuto&&!0;let t=e;try{t.data=await X({nested:!0,transform:p.transform}),await p.onSubmit?.(t),U.clear()}catch(e){if(!(e instanceof K))throw e;g(`error`,{...t,errors:e.errors})}finally{Z.value=!1}}let $=h(()=>p.disabled||Z.value);i(ne,h(()=>({disabled:$.value,validateOnInputDelay:p.validateOnInputDelay})));async function se(e,t){try{let n=await e.validate({...t,silent:!1});return{name:e.name,output:n}}catch(t){if(!(t instanceof K))throw t;return{name:e.name,error:t}}}function ce(e,t){return!t||!e.name?e:{...e,name:t+`.`+e.name}}function le(e,t){let n=t+`.`,r=e?.name?.startsWith(n)?e.name.substring(n.length):e.name;return{...e,name:r}}function ue(e,t){return t?e.filter(e=>e?.name?.startsWith(t+`.`)).map(e=>le(e,t)):e}function de(e){return e.api.getErrors().map(t=>e.name?{...t,name:e.name+`.`+t.name}:t)}function fe(e,t){return!e||!t?!0:e instanceof RegExp?e.test(t):t===e||typeof e==`string`&&e.startsWith(t+`.`)}function pe(e,t){if(!e||e instanceof RegExp)return e;if(t!==e)return typeof e==`string`&&e.startsWith(t+`.`)?e.substring(t.length+1):e}function me(e,t){let n=new Set(t),r=t.map(e=>H.value?.[e]?.pattern).filter(Boolean),i=e=>e.name?n.has(e.name)?!0:r.some(t=>t.test(e.name)):!1,a=V.value.filter(e=>!i(e)),o=e.filter(i);return[...a,...o]}function he(e,t){return e.filter(e=>t instanceof RegExp?!(e.name&&t.test(e.name)):!e.name||e.name!==t)}function ge(e){return!e.name||!!H.value[e.name]}let _e={validate:X,errors:V,setErrors(e,t){let n=q(e.filter(ge)),r=[];for(let n of R.value.values())if(fe(t,n.name)){let i=ue(e,n.name);n.api.setErrors(i,pe(t,n.name||``)),r.push(...de(n))}t?V.value=[...he(V.value,t),...n,...r]:V.value=[...n,...r]},async submit(){D.value instanceof HTMLFormElement&&D.value.reportValidity()===!1||await Q(new Event(`submit`))},getErrors(e){return e?V.value.filter(t=>e instanceof RegExp?t.name&&e.test(t.name):t.name===e):V.value},clear(e){let t=e?V.value.filter(t=>ge(t)&&(e instanceof RegExp?!(t.name&&e.test(t.name)):t.name!==e)):[],n=[];for(let t of R.value.values())fe(e,t.name)&&t.api.clear(),n.push(...de(t));V.value=[...t,...n]},disabled:$,loading:Z,dirty:h(()=>!!U.size),dirtyFields:b(U),blurredFields:b(G),touchedFields:b(W)};return r(_e),(t,r)=>(n(),S(e(O(A)?`div`:`form`),{id:O(T),ref_key:`formRef`,ref:D,class:E(x.value({class:[O(v)?.base,p.class]})),onSubmit:y(Q,[`prevent`])},{default:u(()=>[d(t.$slots,`default`,{errors:V.value,loading:Z.value})]),_:3},40,[`id`,`class`]))}},J={slots:{root:``,wrapper:``,labelWrapper:`flex content-center items-center justify-between gap-1`,label:`block font-medium text-default`,container:`relative`,description:`text-muted`,error:`mt-2 text-error`,hint:`text-muted`,help:`mt-2 text-muted`},variants:{size:{xs:{root:`text-xs`},sm:{root:`text-xs`},md:{root:`text-sm`},lg:{root:`text-sm`},xl:{root:`text-base`}},required:{true:{label:`after:content-['*'] after:ms-0.5 after:text-error`}},orientation:{vertical:{container:`mt-1`},horizontal:{root:`flex justify-between place-items-baseline gap-2`}}},defaultVariants:{size:`md`,orientation:`vertical`}},Y=[`id`],X=[`id`],Z=[`id`],Q=[`id`],$={__name:`FormField`,props:{as:{type:null,required:!1},name:{type:String,required:!1},errorPattern:{type:null,required:!1},label:{type:String,required:!1},description:{type:String,required:!1},help:{type:String,required:!1},error:{type:[Boolean,String],required:!1,default:void 0},hint:{type:String,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},eagerValidation:{type:Boolean,required:!1},validateOnInputDelay:{type:Number,required:!1},orientation:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){let t=e,o=r(),s=j(),c=N(`formField`,t),l=h(()=>P({extend:P(J),...s.ui?.formField||{}})({size:t.size,required:t.required,orientation:t.orientation})),m=w(F,null),y=h(()=>t.error||m?.value?.find(e=>e.name===t.name||t.errorPattern&&e.name?.match(t.errorPattern))?.message),b=C(f()),D=b.value,k=w(z,void 0);return a(b,()=>{k&&t.name&&(k.value[t.name]={id:b.value,pattern:t.errorPattern})},{immediate:!0}),i(I,b),i(R,h(()=>({error:y.value,name:t.name,size:t.size,eagerValidation:t.eagerValidation,validateOnInputDelay:t.validateOnInputDelay,errorPattern:t.errorPattern,hint:t.hint,description:t.description,help:t.help,ariaId:D}))),(r,i)=>(n(),S(O(M),{as:e.as,"data-orientation":e.orientation,"data-slot":`root`,class:E(l.value.root({class:[O(c)?.root,t.class]}))},{default:u(()=>[g(`div`,{"data-slot":`wrapper`,class:E(l.value.wrapper({class:O(c)?.wrapper}))},[e.label||o.label?(n(),v(`div`,{key:0,"data-slot":`labelWrapper`,class:E(l.value.labelWrapper({class:O(c)?.labelWrapper}))},[p(O(V),{for:b.value,"data-slot":`label`,class:E(l.value.label({class:O(c)?.label}))},{default:u(()=>[d(r.$slots,`label`,{label:e.label},()=>[_(T(e.label),1)])]),_:3},8,[`for`,`class`]),e.hint||o.hint?(n(),v(`span`,{key:0,id:`${O(D)}-hint`,"data-slot":`hint`,class:E(l.value.hint({class:O(c)?.hint}))},[d(r.$slots,`hint`,{hint:e.hint},()=>[_(T(e.hint),1)])],10,Y)):x(``,!0)],2)):x(``,!0),e.description||o.description?(n(),v(`p`,{key:1,id:`${O(D)}-description`,"data-slot":`description`,class:E(l.value.description({class:O(c)?.description}))},[d(r.$slots,`description`,{description:e.description},()=>[_(T(e.description),1)])],10,X)):x(``,!0)],2),g(`div`,{class:E([(e.label||!!o.label||e.description||!!o.description)&&l.value.container({class:O(c)?.container})])},[d(r.$slots,`default`,{error:y.value}),t.error!==!1&&(typeof y.value==`string`&&y.value||o.error)?(n(),v(`div`,{key:0,id:`${O(D)}-error`,"data-slot":`error`,class:E(l.value.error({class:O(c)?.error}))},[d(r.$slots,`error`,{error:y.value},()=>[_(T(y.value),1)])],10,Z)):e.help||o.help?(n(),v(`div`,{key:1,id:`${O(D)}-help`,"data-slot":`help`,class:E(l.value.help({class:O(c)?.help}))},[d(r.$slots,`help`,{help:e.help},()=>[_(T(e.help),1)])],10,Q)):x(``,!0)],2)]),_:3},8,[`as`,`data-orientation`,`class`]))}};const se=()=>{let e=[];function t(){e.length=0}function n(t,n,r){(!t.value||!/^[A-Za-z]{2,}$/.test(t.value))&&e.push({name:n,message:r})}function r(t,n,r){(!t.value||!/^[A-Za-z]{2,}$/.test(t.value))&&e.push({name:n,message:r})}function i(t,n,r){(!t.value||!/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/.test(t.value))&&e.push({name:n,message:r})}function a(t,n,r,i,a){let o=RegExp(`^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=[\\]{};:'",.<>/?]).{8,}$`);t.value?o.test(t.value)||e.push({name:n,message:k.t(`validate_error.registration_validation_password_requirements`)}):e.push({name:n,message:k.t(`validate_error.password_required`)}),r.value?t.value!==r.value&&e.push({name:i,message:k.t(`validate_error.registration_validation_password_not_same`)}):e.push({name:i,message:a})}return{errors:e,reset:t,validateFirstName:n,validateLastName:r,validateEmail:i,validatePasswords:a}};export{V as i,$ as n,q as r,se as t}; |