cmms/frontend/dist/assets/CustomFieldsForm-BQBEtYs0.js

2 lines
37 KiB
JavaScript

import{r as $,c as A,b8 as fe,_ as ye,m as ae,o as me,a as f,g as p,b as r,d as j,e as k,j as M,n as z,i as K,aW as ue,t as C,Q as be,ae as se,aU as de,af as Z,aQ as ee,k as ce,w as te,F as we,ai as xe,b9 as ne,aT as De}from"./index-BUdRbiwj.js";import{W}from"./assets-eZiqmOvX.js";import{F as H}from"./FPInput-CzR_dWoe.js";import{F as le}from"./FPCheckbox-Bu8jNAEW.js";import{F as oe}from"./FPSelect-C7p47Ma2.js";const ve=new fe;function qt(){const x=$([]),g=$([]),D=$(new Set),V=$(null),_=$(!1),O=$(null),N=A(()=>g.value.filter(l=>!l.parentAsset)),P=A(()=>{const l={};return g.value.forEach(o=>{var c;const y=((c=o.parentAsset)==null?void 0:c.id)||"root";l[y]||(l[y]=[]),l[y].push(o)}),l}),B=A(()=>{const l=(o,y=0)=>o.reduce((c,T)=>{const I=P.value[T.id]||[],Y=I.length>0;return c.push({value:T.id,title:`${" ".repeat(y)}${T.name}`,subtitle:T.category,disabled:!1,depth:y,hasChildren:Y}),Y&&D.value.has(T.id)&&c.push(...l(I,y+1)),c},[]);return l(N.value)}),G=async()=>{try{_.value=!0,O.value=null;const l=await ve.getAll();g.value=l.data||l,U()}catch(l){O.value=null,g.value=[],console.warn("Asset hierarchy API not available, using fallback:",l.message)}finally{_.value=!1}},U=()=>{const l=(o,y=0)=>{var T;const c=P.value[o.id]||[];return{id:o.id,name:o.name,category:o.category,status:o.status,criticality:o.criticality,parentId:((T=o.parentAsset)==null?void 0:T.id)||null,children:c.map(I=>l(I,y+1)),depth:y,path:X(o),isExpanded:D.value.has(o.id),hasChildren:c.length>0,isLoading:!1,asset:o}};x.value=N.value.map(o=>l(o))},X=l=>{const o=[];let y=l;for(;y;)o.unshift(y.name),y=g.value.find(c=>{var T;return c.id===((T=y.parentAsset)==null?void 0:T.id)});return o.join(" > ")},q=l=>{D.value.add(l),U()},b=l=>{D.value.delete(l),U()},E=l=>{D.value.has(l)?b(l):q(l)},d=()=>{g.value.forEach(l=>{const o=P.value[l.id];o&&o.length>0&&D.value.add(l.id)}),U()},w=()=>{D.value.clear(),U()},L=l=>{V.value=g.value.find(o=>o.id===l)},R=l=>P.value[l]||[],F=l=>{const o=g.value.find(y=>y.id===l);return o==null?void 0:o.parentAsset},s=l=>{const o=[];let y=g.value.find(c=>c.id===l);for(;y!=null&&y.parentAsset;){const c=g.value.find(T=>T.id===y.parentAsset.id);if(c)o.unshift(c),y=c;else break}return o},v=l=>{const o=[],y=c=>{(P.value[c]||[]).forEach(I=>{o.push(I),y(I.id)})};return y(l),o},t=(l,o)=>l===o?!1:!v(l).some(c=>c.id===o),e=async(l,o)=>{try{if(!t(l,o))throw new Error("Cannot move asset: would create circular reference");_.value=!0,await ve.update(l,{parentAsset:o?{id:o}:null}),await G()}catch(y){throw O.value=y.message||"Failed to move asset",y}finally{_.value=!1}},a=(l,o=x.value)=>{for(const y of o){if(y.id===l)return y;if(y.children.length>0){const c=a(l,y.children);if(c)return c}}return null},i=l=>g.value.find(y=>y.id===l)?s(l).length:0,m=()=>Math.max(...g.value.map(l=>i(l.id)));return{hierarchyTree:x,flatAssetsList:g,expandedNodes:D,selectedAsset:V,loading:_,error:O,rootAssets:N,assetsByParent:P,hierarchyOptions:B,loadAssetHierarchy:G,buildHierarchyTree:U,expandNode:q,collapseNode:b,toggleNode:E,expandAll:d,collapseAll:w,selectAsset:L,getAssetChildren:R,getAssetParent:F,getAssetAncestors:s,getAssetDescendants:v,canMoveAsset:t,moveAsset:e,findAssetInTree:a,getHierarchyDepth:i,getMaxDepth:m,searchInHierarchy:l=>{if(!l)return x.value;const o=l.toLowerCase();return g.value.filter(c=>{var T,I,Y;return c.name.toLowerCase().includes(o)||((T=c.description)==null?void 0:T.toLowerCase().includes(o))||((I=c.model)==null?void 0:I.toLowerCase().includes(o))||((Y=c.serialNumber)==null?void 0:Y.toLowerCase().includes(o))}).forEach(c=>{s(c.id).forEach(I=>D.value.add(I.id))}),U(),x.value},validateHierarchy:()=>{const l=[];return g.value.forEach(o=>{s(o.id).some(c=>c.id===o.id)&&l.push({type:"circular_reference",assetId:o.id,assetName:o.name,message:"Circular reference detected in hierarchy"}),o.parentAsset&&(g.value.find(T=>T.id===o.parentAsset.id)||l.push({type:"orphaned_reference",assetId:o.id,assetName:o.name,parentId:o.parentAsset.id,message:"Parent asset not found"}))}),l},getHierarchyStats:()=>({totalAssets:g.value.length,rootAssets:N.value.length,maxDepth:m(),assetsWithChildren:Object.keys(P.value).length-1,leafAssets:g.value.filter(o=>{var y;return!((y=P.value[o.id])!=null&&y.length)}).length}),generateAssetPath:X}}function Ee(){const x=$([]),g=$(!1),D=$(null),V=A(()=>x.value.filter(s=>s.status===W.ACTIVE)),_=A(()=>x.value.filter(s=>s.status===W.EXPIRING_SOON)),O=A(()=>x.value.filter(s=>s.status===W.EXPIRED)),N=A(()=>({total:x.value.length,active:V.value.length,expiring:_.value.length,expired:O.value.length,notApplicable:x.value.filter(s=>s.status===W.NOT_APPLICABLE).length})),P=s=>{if(!s.isWarrantyActive||!s.warrantyEndDate)return W.NOT_APPLICABLE;const v=new Date,t=new Date(s.warrantyEndDate),e=Math.ceil((t-v)/(1e3*60*60*24));return e<0?W.EXPIRED:e<=30?W.EXPIRING_SOON:W.ACTIVE},B=s=>{if(!s.warrantyEndDate)return null;const v=new Date,t=new Date(s.warrantyEndDate);return Math.ceil((t-v)/(1e3*60*60*24))};return{warranties:x,loading:g,error:D,activeWarranties:V,expiringWarranties:_,expiredWarranties:O,warrantyStats:N,calculateWarrantyStatus:P,getDaysUntilExpiry:B,getWarrantyDuration:s=>{if(!s.warrantyStartDate||!s.warrantyEndDate)return null;const v=new Date(s.warrantyStartDate),e=new Date(s.warrantyEndDate)-v,a=Math.ceil(e/(1e3*60*60*24));if(a>=365){const i=Math.floor(a/365),m=a%365,n=Math.floor(m/30);return n>0?`${i} year${i>1?"s":""}, ${n} month${n>1?"s":""}`:`${i} year${i>1?"s":""}`}else if(a>=30){const i=Math.floor(a/30);return`${i} month${i>1?"s":""}`}else return`${a} day${a>1?"s":""}`},getWarrantyProgress:s=>{if(!s.warrantyStartDate||!s.warrantyEndDate)return 0;const v=new Date,t=new Date(s.warrantyStartDate),e=new Date(s.warrantyEndDate);if(v<=t)return 0;if(v>=e)return 100;const a=e-t,i=v-t;return Math.round(i/a*100)},formatWarrantyPeriod:s=>{if(!s.warrantyStartDate||!s.warrantyEndDate)return"N/A";const v=new Date(s.warrantyStartDate).toLocaleDateString(),t=new Date(s.warrantyEndDate).toLocaleDateString();return`${v} - ${t}`},validateWarrantyDates:s=>{const v=[];if(s.isWarrantyActive&&(s.warrantyStartDate||v.push("Warranty start date is required"),s.warrantyEndDate||v.push("Warranty end date is required"),s.warrantyStartDate&&s.warrantyEndDate)){const t=new Date(s.warrantyStartDate),e=new Date(s.warrantyEndDate);t>=e&&v.push("Warranty end date must be after start date")}return v},getWarrantyTypeOptions:()=>[{value:"Full",label:"Full Warranty"},{value:"Limited",label:"Limited Warranty"},{value:"Extended",label:"Extended Warranty"},{value:"Manufacturer",label:"Manufacturer Warranty"},{value:"Third Party",label:"Third Party Warranty"},{value:"Service",label:"Service Warranty"},{value:"Parts",label:"Parts Warranty"},{value:"Labor",label:"Labor Warranty"}],createWarrantyTemplate:(s="Full")=>({isWarrantyActive:!1,warrantyStartDate:null,warrantyEndDate:null,warrantyProvider:"",warrantyType:s,warrantyTerms:"",status:W.NOT_APPLICABLE,warrantyNumber:"",contactInfo:"",claimHistory:[],renewalDate:null,cost:0,currency:"USD"}),updateWarrantyStatus:s=>{const v=P(s);return{...s,status:v}},getWarrantyAlerts:s=>{const v=[],t=B(s);return s.status===W.EXPIRED?v.push({type:"error",message:"Warranty has expired",action:"Consider renewal or replacement"}):s.status===W.EXPIRING_SOON&&v.push({type:"warning",message:`Warranty expires in ${t} days`,action:"Contact provider for renewal options"}),s.renewalDate&&new Date(s.renewalDate)<=new Date&&v.push({type:"info",message:"Warranty renewal date has passed",action:"Check if renewal is still available"}),v},generateWarrantyReport:s=>{const v={generatedAt:new Date().toISOString(),totalAssets:s.length,summary:{active:0,expiring:0,expired:0,notApplicable:0},byProvider:{},byType:{},expiringIn30Days:[],expiringIn90Days:[],totalValue:0};return s.forEach(t=>{v.summary[t.status.toLowerCase()]=(v.summary[t.status.toLowerCase()]||0)+1,t.warrantyProvider&&(v.byProvider[t.warrantyProvider]=(v.byProvider[t.warrantyProvider]||0)+1),v.byType[t.warrantyType]=(v.byType[t.warrantyType]||0)+1;const e=B(t);e!==null&&e>0&&(e<=30?v.expiringIn30Days.push(t):e<=90&&v.expiringIn90Days.push(t)),t.cost&&(v.totalValue+=t.cost)}),v},getWarrantyStatusConfig:s=>{const v={[W.ACTIVE]:{label:"Active",color:"green",badge:"success",icon:"CheckCircleIcon"},[W.EXPIRING_SOON]:{label:"Expiring Soon",color:"yellow",badge:"warning",icon:"ClockIcon"},[W.EXPIRED]:{label:"Expired",color:"red",badge:"error",icon:"XCircleIcon"},[W.NOT_APPLICABLE]:{label:"N/A",color:"gray",badge:"secondary",icon:"MinusCircleIcon"}};return v[s]||v[W.NOT_APPLICABLE]},scheduleWarrantyReminders:s=>{const v=[];if(s.warrantyEndDate){const t=new Date(s.warrantyEndDate),e=new Date,a=new Date(t);a.setDate(a.getDate()-90),a>e&&v.push({date:a,type:"info",message:"Warranty expires in 90 days"});const i=new Date(t);i.setDate(i.getDate()-30),i>e&&v.push({date:i,type:"warning",message:"Warranty expires in 30 days"});const m=new Date(t);m.setDate(m.getDate()-7),m>e&&v.push({date:m,type:"urgent",message:"Warranty expires in 7 days"})}return v}}}const Ce={class:"warranty-form"},Ae={class:"flex items-start space-x-3 mb-6"},ke={key:0,class:"space-y-6"},Ve={class:"flex items-center justify-between"},Te={class:"flex items-center space-x-3"},Se={class:"flex-shrink-0"},We={key:0,class:"text-right"},_e={class:"w-20 h-2 bg-gray-200 rounded-full mt-1"},$e={class:"grid grid-cols-1 md:grid-cols-2 gap-6"},Pe={class:"space-y-4"},Fe={class:"space-y-4"},Ie={key:0,class:"p-3 bg-blue-50 rounded-lg"},Me={class:"flex items-center justify-between text-sm"},Ne={class:"text-blue-600"},Le={key:0,class:"flex items-center justify-between text-sm mt-1"},Oe={class:"text-blue-700 font-medium"},Ue={class:"text-blue-600"},Be={class:"space-y-4"},qe={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Re={class:"flex space-x-2"},je={key:0,class:"mt-1 text-sm text-red-600"},ze={class:"space-y-4"},Xe={class:"flex items-start space-x-3"},He={key:0,class:"ml-6 space-y-4"},Ge={key:1,class:"space-y-2"},Je={class:"flex items-start"},Qe={class:"flex-1"},Ye={class:"font-medium text-sm"},Ke={key:0,class:"text-sm opacity-75 mt-1"},Ze={key:2,class:"p-4 bg-red-50 border border-red-200 rounded-lg"},et={class:"flex items-start"},tt={class:"text-sm text-red-700 space-y-1"},at={key:1,class:"text-center py-8 text-gray-500"},rt={__name:"WarrantyForm",props:{modelValue:{type:Object,default:()=>({isWarrantyActive:!1,warrantyStartDate:null,warrantyEndDate:null,warrantyProvider:"",warrantyType:"Full",warrantyTerms:"",status:W.NOT_APPLICABLE})},disabled:{type:Boolean,default:!1}},emits:["update:modelValue","validation-change"],setup(x,{expose:g,emit:D}){const V=x,_=D,{calculateWarrantyStatus:O,getDaysUntilExpiry:N,getWarrantyDuration:P,getWarrantyProgress:B,validateWarrantyDates:G,getWarrantyTypeOptions:U,createWarrantyTemplate:X,updateWarrantyStatus:q,getWarrantyAlerts:b,getWarrantyStatusConfig:E}=Ee(),d=$({...V.modelValue}),w=$({}),L=$(!1),R=A(()=>d.value.isWarrantyActive?O(d.value):null),F=A(()=>R.value?E(R.value):null),s=A(()=>d.value.isWarrantyActive?N(d.value):null),v=A(()=>d.value.isWarrantyActive?P(d.value):null),t=A(()=>d.value.isWarrantyActive?B(d.value):null),e=A(()=>d.value.isWarrantyActive?b(d.value):[]),a=A(()=>{if(!R.value)return"";switch(R.value){case W.ACTIVE:return s.value?`Expires in ${s.value} days`:"Coverage active";case W.EXPIRING_SOON:return`Expires in ${s.value} days`;case W.EXPIRED:return`Expired ${Math.abs(s.value)} days ago`;default:return"No warranty coverage"}}),i=A(()=>F.value?`border-l-4 ${{green:"bg-green-50 border-green-400",yellow:"bg-yellow-50 border-yellow-400",red:"bg-red-50 border-red-400",gray:"bg-gray-50 border-gray-400"}[F.value.color]}`:""),m=A(()=>F.value?{green:"text-green-800",yellow:"text-yellow-800",red:"text-red-800",gray:"text-gray-800"}[F.value.color]:""),n=A(()=>F.value?{green:"text-green-600",yellow:"text-yellow-600",red:"text-red-600",gray:"text-gray-600"}[F.value.color]:""),J=A(()=>F.value?{green:"text-green-500",yellow:"text-yellow-500",red:"text-red-500",gray:"text-gray-500"}[F.value.color]:""),Q=A(()=>F.value?{green:"bg-green-500",yellow:"bg-yellow-500",red:"bg-red-500",gray:"bg-gray-500"}[F.value.color]:""),l=A(()=>U()),o=[{value:"USD",label:"USD"},{value:"EUR",label:"EUR"},{value:"GBP",label:"GBP"},{value:"CAD",label:"CAD"},{value:"AUD",label:"AUD"}],y=A(()=>Object.keys(w.value).length===0),c=()=>{d.value.isWarrantyActive?(d.value={...X(),isWarrantyActive:!0},I()):(d.value={...X(),isWarrantyActive:!1},w.value={}),ie()},T=()=>{},I=()=>{var S;return w.value={},d.value.isWarrantyActive&&((S=d.value.warrantyProvider)!=null&&S.trim()||(w.value.warrantyProvider="Warranty provider is required"),d.value.warrantyType||(w.value.warrantyType="Warranty type is required"),G(d.value).forEach(h=>{h.includes("start")?w.value.warrantyStartDate=h:h.includes("end")&&(w.value.warrantyEndDate=h)})),_("validation-change",{isValid:y.value,errors:{...w.value}}),y.value},Y=S=>({warrantyProvider:"Warranty Provider",warrantyType:"Warranty Type",warrantyStartDate:"Start Date",warrantyEndDate:"End Date",warrantyNumber:"Warranty Number",contactInfo:"Contact Information",cost:"Warranty Cost",warrantyTerms:"Terms & Conditions",renewalDate:"Renewal Deadline"})[S]||S,pe=S=>{const u={error:"bg-red-50 border-red-400",warning:"bg-yellow-50 border-yellow-400",info:"bg-blue-50 border-blue-400"};return u[S]||u.info},ge=S=>({error:"XCircleIcon",warning:"ExclamationTriangleIcon",info:"InformationCircleIcon"})[S]||"InformationCircleIcon",he=S=>{const u={error:"text-red-500",warning:"text-yellow-500",info:"text-blue-500"};return u[S]||u.info},ie=()=>{d.value.isWarrantyActive&&(d.value=q(d.value)),_("update:modelValue",{...d.value})};return ae(()=>d.value,()=>{I(),ie()},{deep:!0}),ae(()=>V.modelValue,S=>{d.value={...S},L.value=!!S.renewalDate},{deep:!0}),me(()=>{I()}),g({validateForm:I,isValid:y}),(S,u)=>(p(),f("div",Ce,[r("div",Ae,[j(k(le),{id:"warranty-active",modelValue:d.value.isWarrantyActive,"onUpdate:modelValue":u[0]||(u[0]=h=>d.value.isWarrantyActive=h),onChange:c},null,8,["modelValue"]),u[13]||(u[13]=r("div",{class:"flex-1"},[r("label",{for:"warranty-active",class:"text-base font-medium"}," This asset has warranty coverage "),r("p",{class:"text-sm text-gray-500 mt-1"}," Enable to track warranty information, expiration alerts, and coverage details ")],-1))]),d.value.isWarrantyActive?(p(),f("div",ke,[R.value?(p(),f("div",{key:0,class:z(["p-4 rounded-lg border",i.value])},[r("div",Ve,[r("div",Te,[r("div",Se,[(p(),K(ue(F.value.icon),{class:z(["w-5 h-5",J.value])},null,8,["class"]))]),r("div",null,[r("h4",{class:z(["font-medium",m.value])},C(F.value.label),3),r("p",{class:z(["text-sm",n.value])},C(a.value),3)])]),t.value!==null?(p(),f("div",We,[r("div",{class:z(["text-sm font-medium",m.value])},C(t.value)+"%",3),r("div",_e,[r("div",{class:z(["h-2 rounded-full transition-all",Q.value]),style:be({width:`${t.value}%`})},null,6)])])):M("",!0)])],2)):M("",!0),r("div",$e,[r("div",Pe,[u[14]||(u[14]=r("h4",{class:"text-lg font-medium text-gray-900 mb-4"},"Basic Information",-1)),j(k(H),{modelValue:d.value.warrantyProvider,"onUpdate:modelValue":u[1]||(u[1]=h=>d.value.warrantyProvider=h),label:"Warranty Provider",placeholder:"Enter provider name",required:!0,error:w.value.warrantyProvider},null,8,["modelValue","error"]),j(k(oe),{modelValue:d.value.warrantyType,"onUpdate:modelValue":u[2]||(u[2]=h=>d.value.warrantyType=h),label:"Warranty Type",placeholder:"Select warranty type",options:l.value,required:!0,error:w.value.warrantyType},null,8,["modelValue","options","error"]),j(k(H),{modelValue:d.value.warrantyNumber,"onUpdate:modelValue":u[3]||(u[3]=h=>d.value.warrantyNumber=h),label:"Warranty Number",placeholder:"Enter warranty number/ID",error:w.value.warrantyNumber},null,8,["modelValue","error"])]),r("div",Fe,[u[16]||(u[16]=r("h4",{class:"text-lg font-medium text-gray-900 mb-4"},"Coverage Period",-1)),j(k(H),{modelValue:d.value.warrantyStartDate,"onUpdate:modelValue":u[4]||(u[4]=h=>d.value.warrantyStartDate=h),type:"date",label:"Start Date",required:!0,error:w.value.warrantyStartDate,onChange:T},null,8,["modelValue","error"]),j(k(H),{modelValue:d.value.warrantyEndDate,"onUpdate:modelValue":u[5]||(u[5]=h=>d.value.warrantyEndDate=h),type:"date",label:"End Date",required:!0,min:d.value.warrantyStartDate,error:w.value.warrantyEndDate,onChange:k(q)},null,8,["modelValue","min","error","onChange"]),v.value?(p(),f("div",Ie,[r("div",Me,[u[15]||(u[15]=r("span",{class:"text-blue-700 font-medium"},"Duration:",-1)),r("span",Ne,C(v.value),1)]),s.value!==null?(p(),f("div",Le,[r("span",Oe,C(s.value>0?"Days remaining:":"Days overdue:"),1),r("span",Ue,C(Math.abs(s.value)),1)])):M("",!0)])):M("",!0)])]),r("div",Be,[u[18]||(u[18]=r("h4",{class:"text-lg font-medium text-gray-900"},"Additional Details",-1)),r("div",qe,[j(k(H),{modelValue:d.value.contactInfo,"onUpdate:modelValue":u[6]||(u[6]=h=>d.value.contactInfo=h),label:"Contact Information",placeholder:"Phone, email, or website",error:w.value.contactInfo},null,8,["modelValue","error"]),r("div",Re,[j(k(H),{modelValue:d.value.cost,"onUpdate:modelValue":u[7]||(u[7]=h=>d.value.cost=h),modelModifiers:{number:!0},type:"number",label:"Warranty Cost",placeholder:"0.00",step:"0.01",min:"0",error:w.value.cost,class:"flex-1"},null,8,["modelValue","error"]),j(k(oe),{modelValue:d.value.currency,"onUpdate:modelValue":u[8]||(u[8]=h=>d.value.currency=h),label:"Currency",options:o,class:"w-24"},null,8,["modelValue"])])]),r("div",null,[u[17]||(u[17]=r("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Terms & Conditions",-1)),se(r("textarea",{"onUpdate:modelValue":u[9]||(u[9]=h=>d.value.warrantyTerms=h),class:z(["w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-primary-500 focus:border-primary-500",{"border-red-300":w.value.warrantyTerms}]),placeholder:"Describe warranty coverage, limitations, and terms...",rows:"4"},null,2),[[de,d.value.warrantyTerms]]),w.value.warrantyTerms?(p(),f("p",je,C(w.value.warrantyTerms),1)):M("",!0)])]),r("div",ze,[r("div",Xe,[j(k(le),{id:"has-renewal",modelValue:L.value,"onUpdate:modelValue":u[10]||(u[10]=h=>L.value=h)},null,8,["modelValue"]),u[19]||(u[19]=r("div",{class:"flex-1"},[r("label",{for:"has-renewal",class:"text-base font-medium"}," Renewal Option Available "),r("p",{class:"text-sm text-gray-500 mt-1"}," Check if this warranty can be renewed or extended ")],-1))]),L.value?(p(),f("div",He,[j(k(H),{modelValue:d.value.renewalDate,"onUpdate:modelValue":u[11]||(u[11]=h=>d.value.renewalDate=h),type:"date",label:"Renewal Deadline",placeholder:"When must renewal be completed",error:w.value.renewalDate},null,8,["modelValue","error"]),r("div",null,[u[20]||(u[20]=r("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Renewal Notes",-1)),se(r("textarea",{"onUpdate:modelValue":u[12]||(u[12]=h=>d.value.renewalNotes=h),class:"w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-primary-500 focus:border-primary-500",placeholder:"Instructions for renewal, contact information, etc.",rows:"3"},null,512),[[de,d.value.renewalNotes]])])])):M("",!0)]),e.value.length?(p(),f("div",Ge,[u[21]||(u[21]=r("h4",{class:"text-lg font-medium text-gray-900"},"Alerts",-1)),(p(!0),f(Z,null,ee(e.value,(h,re)=>(p(),f("div",{key:re,class:z(["p-3 rounded-lg border-l-4",pe(h.type)])},[r("div",Je,[(p(),K(ue(ge(h.type)),{class:z(["w-5 h-5 mr-2 mt-0.5 flex-shrink-0",he(h.type)])},null,8,["class"])),r("div",Qe,[r("p",Ye,C(h.message),1),h.action?(p(),f("p",Ke,C(h.action),1)):M("",!0)])])],2))),128))])):M("",!0),Object.keys(w.value).length?(p(),f("div",Ze,[r("div",et,[u[23]||(u[23]=r("svg",{class:"w-5 h-5 text-red-400 mt-0.5 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),r("div",null,[u[22]||(u[22]=r("h4",{class:"text-sm font-medium text-red-800 mb-1"},"Please fix the following errors:",-1)),r("ul",tt,[(p(!0),f(Z,null,ee(w.value,(h,re)=>(p(),f("li",{key:re}," • "+C(Y(re))+": "+C(h),1))),128))])])])])):M("",!0)])):(p(),f("div",at,u[24]||(u[24]=[r("svg",{class:"w-12 h-12 mx-auto mb-4 text-gray-300",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.031 9-11.622 0-1.042-.133-2.052-.382-3.016z"})],-1),r("p",{class:"text-lg font-medium mb-2"},"No warranty coverage",-1),r("p",{class:"text-sm"},"Enable warranty tracking to monitor coverage and expiration dates",-1)])))]))}},Rt=ye(rt,[["__scopeId","data-v-1fcbff7b"]]);function nt(){const x=$([]),g=$([]),D=$(!1),V=$(null),_=A(()=>{const t={};return g.value.forEach(e=>{const a=e.category||"General";t[a]||(t[a]=[]),t[a].push(e)}),Object.keys(t).forEach(e=>{t[e].sort((a,i)=>a.order-i.order)}),t}),O=A(()=>g.value.filter(t=>t.required)),N={TEXT:{component:"FPInput",validate:(t,e)=>{var a,i,m;return(a=e.validation)!=null&&a.minLength&&(t==null?void 0:t.length)<e.validation.minLength?`Minimum ${e.validation.minLength} characters required`:(i=e.validation)!=null&&i.maxLength&&(t==null?void 0:t.length)>e.validation.maxLength?`Maximum ${e.validation.maxLength} characters allowed`:(m=e.validation)!=null&&m.pattern&&!new RegExp(e.validation.pattern).test(t)?"Invalid format":null}},NUMBER:{component:"FPInput",validate:(t,e)=>{var i,m;const a=parseFloat(t);return isNaN(a)?"Must be a valid number":((i=e.validation)==null?void 0:i.min)!==null&&a<e.validation.min?`Minimum value is ${e.validation.min}`:((m=e.validation)==null?void 0:m.max)!==null&&a>e.validation.max?`Maximum value is ${e.validation.max}`:null}},DATE:{component:"FPDatePicker",validate:(t,e)=>{var i,m;if(!t)return null;const a=new Date(t);return isNaN(a.getTime())?"Invalid date":(i=e.validation)!=null&&i.min&&a<new Date(e.validation.min)?`Date must be after ${new Date(e.validation.min).toLocaleDateString()}`:(m=e.validation)!=null&&m.max&&a>new Date(e.validation.max)?`Date must be before ${new Date(e.validation.max).toLocaleDateString()}`:null}},BOOLEAN:{component:"FPCheckbox",validate:()=>null},SELECT:{component:"FPSelect",validate:(t,e)=>{var a;return t&&!((a=e.options)!=null&&a.some(i=>i.value===t))?"Invalid selection":null}},MULTISELECT:{component:"FPMultiSelect",validate:(t,e)=>{if(Array.isArray(t)&&e.options){const a=e.options.map(m=>m.value);if(t.filter(m=>!a.includes(m)).length>0)return"Invalid selections detected"}return null}}},P=async()=>{try{D.value=!0,V.value=null,await new Promise(t=>setTimeout(t,500)),g.value=[{id:"1",label:"Serial Number",type:"TEXT",category:"Equipment Details",required:!0,placeholder:"Enter serial number",description:"Manufacturer serial number for warranty and identification"},{id:"2",label:"Manufacture Date",type:"DATE",category:"Equipment Details",required:!1,description:"Original manufacturing date"},{id:"3",label:"Operating Temperature Range",type:"TEXT",category:"Technical Specifications",required:!1,placeholder:"e.g., -10°C to 50°C",description:"Acceptable operating temperature range"},{id:"4",label:"Power Rating (kW)",type:"NUMBER",category:"Technical Specifications",required:!1,validation:{min:0,max:1e3,step:.1},description:"Electrical power consumption rating"},{id:"5",label:"Safety Certified",type:"BOOLEAN",category:"Compliance",required:!1,description:"Has current safety certification"},{id:"6",label:"Certification Type",type:"SELECT",category:"Compliance",required:!1,options:[{value:"CE",label:"CE Marking"},{value:"UL",label:"UL Listed"},{value:"CSA",label:"CSA Approved"},{value:"ISO",label:"ISO Certified"}],description:"Type of safety/quality certification"},{id:"7",label:"Maintenance Notes",type:"TEXT",category:"Maintenance",required:!1,placeholder:"Special maintenance considerations...",description:"Any special maintenance requirements or notes"}]}catch(t){V.value=t.message||"Failed to load custom field definitions",console.error("Error loading field definitions:",t)}finally{D.value=!1}},B=async t=>{try{D.value=!0,await new Promise(a=>setTimeout(a,1e3));const e={...t,id:Date.now().toString(),createdAt:new Date().toISOString()};return g.value.push(e),e}catch(e){throw V.value=e.message||"Failed to create field definition",e}finally{D.value=!1}},G=async(t,e)=>{try{D.value=!0,await new Promise(m=>setTimeout(m,1e3));const a={...e,id:t,updatedAt:new Date().toISOString()},i=g.value.findIndex(m=>m.id===t);return i!==-1&&(g.value[i]=a),a}catch(a){throw V.value=a.message||"Failed to update field definition",a}finally{D.value=!1}},U=async t=>{try{D.value=!0,V.value=null,await new Promise(e=>setTimeout(e,500)),g.value=g.value.filter(e=>e.id!==t)}catch(e){throw V.value=e.message||"Failed to delete field definition",e}finally{D.value=!1}},X=(t,e)=>{const a=g.value.find(m=>m.id===t);if(!a)return null;if(a.required&&(e==null||e===""))return`${a.label} is required`;if(!a.required&&(e==null||e===""))return null;const i=N[a.type];return i!=null&&i.validate?i.validate(e,a):null},q=t=>{const e={};return g.value.forEach(a=>{const i=t[a.id],m=X(a.id,i);m&&(e[a.id]=m)}),e},b=t=>{var e;return((e=N[t])==null?void 0:e.component)||"FPInput"},E=t=>{if(t.defaultValue!==null&&t.defaultValue!==void 0)return t.defaultValue;switch(t.type){case"TEXT":case"SELECT":return"";case"NUMBER":return null;case"DATE":return null;case"BOOLEAN":return!1;case"MULTISELECT":return[];default:return null}};return{customFields:x,fieldDefinitions:g,loading:D,error:V,fieldsByCategory:_,requiredFields:O,loadFieldDefinitions:P,createFieldDefinition:B,updateFieldDefinition:G,deleteFieldDefinition:U,validateFieldValue:X,validateAllFields:q,getFieldComponent:b,getDefaultValue:E,initializeFieldValues:(t={})=>{const e={...t};return g.value.forEach(a=>{a.id in e||(e[a.id]=E(a))}),e},formatFieldValue:(t,e)=>{var a;if(e==null)return"";switch(t.type){case"DATE":return new Date(e).toLocaleDateString();case"BOOLEAN":return e?"Yes":"No";case"MULTISELECT":return Array.isArray(e)?e.map(n=>{var Q;const J=(Q=t.options)==null?void 0:Q.find(l=>l.value===n);return(J==null?void 0:J.label)||n}).join(", "):e;case"SELECT":const i=(a=t.options)==null?void 0:a.find(m=>m.value===e);return(i==null?void 0:i.label)||e;case"NUMBER":return parseFloat(e).toLocaleString();default:return e}},serializeFieldValues:t=>Object.entries(t).map(([e,a])=>({fieldId:parseInt(e),value:a})),deserializeFieldValues:t=>{const e={};return Array.isArray(t)&&t.forEach(a=>{e[a.fieldId]=a.value}),e},reorderFields:async(t,e)=>{try{D.value=!0;const a=t.map((i,m)=>({id:i.id,order:e[m]}));await Promise.all(a.map(i=>Promise.resolve())),await P()}catch(a){throw V.value=a.message||"Failed to reorder fields",a}finally{D.value=!1}},duplicateField:async t=>{try{const e=g.value.find(i=>i.id===t);if(!e)throw new Error("Field not found");const a={...e,id:null,name:`${e.name}_copy`,label:`${e.label} (Copy)`,order:Math.max(...g.value.map(i=>i.order))+1};return await B(a)}catch(e){throw V.value=e.message||"Failed to duplicate field",e}},getFieldUsageStats:async t=>{try{return{fieldId:t,totalAssets:0,assetsWithValue:0,assetsWithoutValue:0,usagePercentage:0,commonValues:[]}}catch(e){return console.error("Error getting field usage stats:",e),null}},fieldTypeConfig:N}}const st={class:"custom-fields-form"},lt={key:0,class:"flex items-center justify-center py-8"},ot={key:1,class:"p-4 bg-red-50 border border-red-200 rounded-lg text-red-700"},it={class:"flex items-center"},ut={key:2,class:"space-y-6"},dt={class:"flex items-center justify-between mb-4"},ct={class:"text-lg font-medium text-gray-900"},vt={class:"relative group"},yt={class:"absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-gray-900 text-white text-xs px-2 py-1 rounded opacity-0 group-hover:opacity-100 transition-opacity z-10 whitespace-nowrap"},mt={class:"relative group"},pt={class:"absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-gray-900 text-white text-xs px-2 py-1 rounded opacity-0 group-hover:opacity-100 transition-opacity z-10 whitespace-nowrap"},gt={class:"relative group"},ht={class:"absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-gray-900 text-white text-xs px-2 py-1 rounded opacity-0 group-hover:opacity-100 transition-opacity z-10 whitespace-nowrap"},ft={key:3,class:"flex items-start space-x-3"},bt={class:"flex-1"},wt=["for","required"],xt={key:0,class:"text-sm text-gray-500 mt-1"},Dt={key:1,class:"text-sm text-red-600 mt-1"},Et={class:"relative group"},Ct={class:"absolute bottom-6 left-1/2 transform -translate-x-1/2 bg-gray-900 text-white text-xs px-2 py-1 rounded opacity-0 group-hover:opacity-100 transition-opacity z-10 whitespace-nowrap"},At={key:5},kt=["for"],Vt={key:0,class:"text-red-500"},Tt=["id","onUpdate:modelValue","disabled","onChange"],St=["value"],Wt={key:0,class:"text-sm text-gray-500 mt-1"},_t={key:1,class:"text-sm text-red-600 mt-1"},$t={key:3,class:"text-center py-8 text-gray-500"},Pt={key:4,class:"mt-6 p-4 bg-red-50 border border-red-200 rounded-lg"},Ft={class:"flex items-start"},It={class:"text-sm text-red-700 space-y-1"},Mt={__name:"CustomFieldsForm",props:{modelValue:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!0},singleColumn:{type:Boolean,default:!1},showValidationSummary:{type:Boolean,default:!0},validateOnMount:{type:Boolean,default:!1}},emits:["update:modelValue","validation-change"],setup(x,{expose:g,emit:D}){const V=x,_=D,{fieldsByCategory:O,fieldDefinitions:N,loading:P,error:B,loadFieldDefinitions:G,validateFieldValue:U,validateAllFields:X,initializeFieldValues:q}=nt(),b=$({}),E=$({}),d=$(new Set),w=A(()=>Object.keys(E.value).length===0),L=e=>{const a=U(e,b.value[e]);a?E.value[e]=a:delete E.value[e],_("validation-change",{isValid:w.value,errors:{...E.value}})},R=()=>{const e=X(b.value);return E.value=e,_("validation-change",{isValid:Object.keys(e).length===0,errors:{...e}}),Object.keys(e).length===0},F=e=>{const a=N.value.find(i=>i.id==e);return(a==null?void 0:a.label)||`Field ${e}`},s=e=>{d.value.has(e)?d.value.delete(e):d.value.add(e)},v=()=>{b.value=q(),E.value={},_("update:modelValue",b.value)},t=e=>{b.value=q(e),E.value={},_("update:modelValue",b.value)};return ae(()=>b.value,e=>{_("update:modelValue",e)},{deep:!0}),ae(()=>V.modelValue,e=>{JSON.stringify(e)!==JSON.stringify(b.value)&&(b.value=q(e))},{deep:!0}),ae(()=>N.value,()=>{N.value.length>0&&(b.value=q(V.modelValue),V.validateOnMount&&R())}),me(async()=>{await G()}),g({validateAllCustomFields:R,resetForm:v,setFieldValues:t,isValid:w}),(e,a)=>(p(),f("div",st,[k(P)?(p(),f("div",lt,a[0]||(a[0]=[r("div",{class:"flex items-center space-x-2 text-gray-500"},[r("svg",{class:"w-5 h-5 animate-spin",fill:"none",viewBox:"0 0 24 24"},[r("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),r("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]),r("span",null,"Loading custom fields...")],-1)]))):k(B)?(p(),f("div",ot,[r("div",it,[a[1]||(a[1]=r("svg",{class:"w-5 h-5 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),ce(" "+C(k(B)),1)])])):Object.keys(k(O)).length?(p(),f("div",ut,[(p(!0),f(Z,null,ee(k(O),(i,m)=>(p(),f("div",{key:m,class:"custom-field-category"},[r("div",dt,[r("h4",ct,C(m),1),x.collapsible?(p(),K(k(we),{key:0,variant:"ghost",size:"sm",onClick:n=>s(m)},{default:te(()=>[(p(),f("svg",{class:z(["w-4 h-4 transition-transform",{"rotate-180":!d.value.has(m)}]),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},a[2]||(a[2]=[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 9l-7 7-7-7"},null,-1)]),2))]),_:2},1032,["onClick"])):M("",!0)]),se(r("div",{class:z(["grid grid-cols-1 md:grid-cols-2 gap-4",{"md:grid-cols-1":x.singleColumn}])},[(p(!0),f(Z,null,ee(i,n=>{var J,Q,l,o,y;return p(),f("div",{key:n.id,class:"custom-field-wrapper"},[n.type==="TEXT"?(p(),K(k(H),{key:0,id:`field-${n.id}`,modelValue:b.value[n.id],"onUpdate:modelValue":c=>b.value[n.id]=c,label:n.label,placeholder:n.placeholder,required:n.required,disabled:x.disabled,error:E.value[n.id],onBlur:c=>L(n.id)},ne({_:2},[n.description?{name:"append",fn:te(()=>[r("div",vt,[a[3]||(a[3]=r("svg",{class:"w-4 h-4 text-gray-400 cursor-help",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),r("div",yt,C(n.description),1)])]),key:"0"}:void 0]),1032,["id","modelValue","onUpdate:modelValue","label","placeholder","required","disabled","error","onBlur"])):n.type==="NUMBER"?(p(),K(k(H),{key:1,id:`field-${n.id}`,modelValue:b.value[n.id],"onUpdate:modelValue":c=>b.value[n.id]=c,modelModifiers:{number:!0},type:"number",label:n.label,placeholder:n.placeholder,required:n.required,disabled:x.disabled,error:E.value[n.id],min:(J=n.validation)==null?void 0:J.min,max:(Q=n.validation)==null?void 0:Q.max,step:((l=n.validation)==null?void 0:l.step)||1,onBlur:c=>L(n.id)},ne({_:2},[n.description?{name:"append",fn:te(()=>[r("div",mt,[a[4]||(a[4]=r("svg",{class:"w-4 h-4 text-gray-400 cursor-help",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),r("div",pt,C(n.description),1)])]),key:"0"}:void 0]),1032,["id","modelValue","onUpdate:modelValue","label","placeholder","required","disabled","error","min","max","step","onBlur"])):n.type==="DATE"?(p(),K(k(H),{key:2,id:`field-${n.id}`,modelValue:b.value[n.id],"onUpdate:modelValue":c=>b.value[n.id]=c,type:"date",label:n.label,required:n.required,disabled:x.disabled,error:E.value[n.id],min:(o=n.validation)==null?void 0:o.min,max:(y=n.validation)==null?void 0:y.max,onChange:c=>L(n.id)},ne({_:2},[n.description?{name:"append",fn:te(()=>[r("div",gt,[a[5]||(a[5]=r("svg",{class:"w-4 h-4 text-gray-400 cursor-help",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),r("div",ht,C(n.description),1)])]),key:"0"}:void 0]),1032,["id","modelValue","onUpdate:modelValue","label","required","disabled","error","min","max","onChange"])):n.type==="BOOLEAN"?(p(),f("div",ft,[j(k(le),{id:`field-${n.id}`,modelValue:b.value[n.id],"onUpdate:modelValue":c=>b.value[n.id]=c,disabled:x.disabled,onChange:c=>L(n.id)},null,8,["id","modelValue","onUpdate:modelValue","disabled","onChange"]),r("div",bt,[r("label",{class:"block text-sm font-medium text-gray-700",for:`field-${n.id}`,required:n.required},C(n.label),9,wt),n.description?(p(),f("p",xt,C(n.description),1)):M("",!0),E.value[n.id]?(p(),f("p",Dt,C(E.value[n.id]),1)):M("",!0)])])):n.type==="SELECT"?(p(),K(k(oe),{key:4,id:`field-${n.id}`,modelValue:b.value[n.id],"onUpdate:modelValue":c=>b.value[n.id]=c,label:n.label,placeholder:n.placeholder||"Select an option",required:n.required,disabled:x.disabled,error:E.value[n.id],options:n.options||[],onChange:c=>L(n.id)},ne({_:2},[n.description?{name:"append",fn:te(()=>[r("div",Et,[a[6]||(a[6]=r("svg",{class:"w-4 h-4 text-gray-400 cursor-help",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),r("div",Ct,C(n.description),1)])]),key:"0"}:void 0]),1032,["id","modelValue","onUpdate:modelValue","label","placeholder","required","disabled","error","options","onChange"])):n.type==="MULTISELECT"?(p(),f("div",At,[r("label",{class:"block text-sm font-medium text-gray-700 mb-1",for:`field-${n.id}`},[ce(C(n.label)+" ",1),n.required?(p(),f("span",Vt,"*")):M("",!0)],8,kt),se(r("select",{id:`field-${n.id}`,"onUpdate:modelValue":c=>b.value[n.id]=c,multiple:"",disabled:x.disabled,class:z([{"border-red-300":E.value[n.id]},"w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-primary-500 focus:border-primary-500"]),onChange:c=>L(n.id)},[(p(!0),f(Z,null,ee(n.options||[],c=>(p(),f("option",{key:c.value,value:c.value},C(c.label),9,St))),128))],42,Tt),[[De,b.value[n.id]]]),n.description?(p(),f("p",Wt,C(n.description),1)):M("",!0),E.value[n.id]?(p(),f("p",_t,C(E.value[n.id]),1)):M("",!0)])):M("",!0)])}),128))],2),[[xe,!d.value.has(m)]])]))),128))])):(p(),f("div",$t,a[7]||(a[7]=[r("svg",{class:"w-12 h-12 mx-auto mb-4 text-gray-300",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})],-1),r("p",{class:"text-lg font-medium mb-2"},"No custom fields configured",-1),r("p",{class:"text-sm"},"Custom fields will appear here when they're added to the system",-1)]))),x.showValidationSummary&&Object.keys(E.value).length?(p(),f("div",Pt,[r("div",Ft,[a[9]||(a[9]=r("svg",{class:"w-5 h-5 text-red-400 mt-0.5 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)),r("div",null,[a[8]||(a[8]=r("h4",{class:"text-sm font-medium text-red-800 mb-1"},"Please fix the following errors:",-1)),r("ul",It,[(p(!0),f(Z,null,ee(E.value,(i,m)=>(p(),f("li",{key:m}," • "+C(F(m))+": "+C(i),1))),128))])])])])):M("",!0)]))}},jt=ye(Mt,[["__scopeId","data-v-329d3630"]]);export{jt as C,Rt as W,qt as u};