UNPKG

@vpwhite/vue-rule-builder

Version:

A powerful, flexible Vue 3 component library for building complex business rules with an intuitive visual interface. Transform your business logic into interactive, maintainable rule definitions.

6 lines 210 kB
(function(pe,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("pinia"),require("lucide-vue-next"),require("clsx"),require("tailwind-merge")):typeof define=="function"&&define.amd?define(["exports","vue","pinia","lucide-vue-next","clsx","tailwind-merge"],e):(pe=typeof globalThis<"u"?globalThis:pe||self,e(pe.VueRuleBuilder={},pe.Vue,pe.Pinia,pe.LucideVueNext,pe.clsx,pe.tailwindMerge))})(this,function(pe,e,Ot,k,Rt,Dt){"use strict";function Lt(r){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const t in r)if(t!=="default"){const u=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(i,t,u.get?u:{enumerable:!0,get:()=>r[t]})}}return i.default=r,Object.freeze(i)}const lt=Lt(e),De="vue-condition-builder-autosave",Ye=50;class Ce{static save(i,t,u){const d=new Date,l={id:`autosave-${Date.now()}`,instanceId:t,timestamp:d.getTime(),dateString:d.toLocaleDateString(),timeString:d.toLocaleTimeString(),rootGroup:JSON.parse(JSON.stringify(i)),preview:u},a=this.getHistory();return a.unshift(l),a.length>Ye&&a.splice(Ye),this.saveHistory(a),l}static getHistory(){try{const i=localStorage.getItem(De);if(!i)return[];const t=JSON.parse(i);return Array.isArray(t)?t:[]}catch(i){return console.warn("Failed to load autosave history:",i),[]}}static getHistoryForInstance(i){return this.getHistory().filter(u=>u.instanceId===i)}static getLatest(i){const t=i?this.getHistoryForInstance(i):this.getHistory();return t.length>0?t[0]:null}static load(i){return this.getHistory().find(u=>u.id===i)||null}static delete(i){const t=this.getHistory(),u=t.findIndex(d=>d.id===i);return u===-1?!1:(t.splice(u,1),this.saveHistory(t),!0)}static clear(){localStorage.removeItem(De)}static getHistoryGroupedByDate(i){const t=i?this.getHistoryForInstance(i):this.getHistory(),u=new Map;return t.forEach(d=>{const l=d.dateString;u.has(l)||u.set(l,[]),u.get(l).push(d)}),Array.from(u.entries()).map(([d,l])=>({date:d,entries:l})).sort((d,l)=>{var y,f;const a=((y=d.entries[0])==null?void 0:y.timestamp)||0;return(((f=l.entries[0])==null?void 0:f.timestamp)||0)-a})}static hasAutosaves(i){return(i?this.getHistoryForInstance(i):this.getHistory()).length>0}static clearInstance(i){const u=this.getHistory().filter(d=>d.instanceId!==i);this.saveHistory(u)}static getStorageSize(){try{const i=localStorage.getItem(De);return i?new Blob([i]).size/1024:0}catch{return 0}}static saveHistory(i){try{localStorage.setItem(De,JSON.stringify(i))}catch(t){if(console.error("Failed to save autosave history:",t),t instanceof Error&&t.name==="QuotaExceededError"){const u=i.slice(0,Math.floor(Ye/2));try{localStorage.setItem(De,JSON.stringify(u))}catch{console.error("Still failed to save even after reducing history")}}}}}var Z=(r=>(r[r.Group=0]="Group",r[r.Rule=1]="Rule",r[r.Expression=2]="Expression",r[r.Reference=3]="Reference",r))(Z||{}),Be=(r=>(r[r.And=0]="And",r[r.Or=1]="Or",r))(Be||{}),S=(r=>(r[r.LITERAL=0]="LITERAL",r[r.MODEL=1]="MODEL",r[r.CONTEXT=2]="CONTEXT",r[r.FUNCTION=3]="FUNCTION",r[r.PARAM=4]="PARAM",r[r.EXPRESSION=5]="EXPRESSION",r[r.PROPERTY=6]="PROPERTY",r))(S||{}),de=(r=>(r[r.Unary=1]="Unary",r[r.Binary=2]="Binary",r[r.Ternary=3]="Ternary",r[r.Variadic=99]="Variadic",r))(de||{});const It={equals:"equals",notEquals:"does not equal",contains:"contains",notContains:"does not contain",startsWith:"starts with",endsWith:"ends with",greaterThan:"is greater than",lessThan:"is less than",greaterThanOrEqual:"is greater than or equal to",lessThanOrEqual:"is less than or equal to",between:"is between"};function Pt(r){if(r==null)return"null";if(typeof r=="string")return r;try{return JSON.stringify(r)}catch{return String(r)}}function At(r){return r===Be.Or?"OR":"AND"}function Ft(r){const i=r.function?r.function.name||"function":r.field||"field",t=r.operator?It[r.operator]||r.operator:"is",u=(r.values||[]).map(l=>Pt(l.value));if(r.operator==="between"&&u.length>=2)return`${i} ${t} ${u[0]} and ${u[1]}`;const d=u[0]!==void 0?` ${u[0]}`:"";return`${i} ${t}${d}`}function jt(r){try{const i=u=>{if(u.kind===Z.Group){const d=(u.children||[]).map(a=>i(a)).filter(Boolean),l=d.join(` ${At(u.combinator)} `);return u.not?`NOT (${l})`:d.length>1?`(${l})`:l}else{if(u.kind===Z.Rule)return Ft(u);if(u.kind===Z.Expression)return u.expression?`expression(${u.expression.slice(0,30)}...)`:"expression";if(u.kind===Z.Reference)return u.referenceName?`reference(${u.referenceName})`:"reference"}return""};return i(r).trim()||"Empty condition"}catch{return"Condition"}}const zt={class:"p-4"},Ut={class:"flex items-end gap-3"},Mt={class:"shrink-0 mt-0.5"},qt={class:"flex-1 min-w-0"},Gt={key:0,class:"text-sm font-medium text-gray-900"},Ht=e.defineComponent({__name:"Toast",props:{message:{},title:{},type:{default:"info"},duration:{default:3e3},persistent:{type:Boolean,default:!1}},emits:["close"],setup(r,{expose:i,emit:t}){const u=r,d=t,l=e.ref(!1);let a=null;const g=()=>{l.value=!0,!u.persistent&&u.duration>0&&(a=window.setTimeout(()=>{y()},u.duration))},y=()=>{l.value=!1,a&&(clearTimeout(a),a=null),setTimeout(()=>{d("close")},300)};return e.onMounted(()=>{setTimeout(()=>{g()},50)}),e.onUnmounted(()=>{a&&clearTimeout(a)}),i({show:g,close:y}),(f,N)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["fixed top-4 right-4 z-50 max-w-sm w-full bg-white border border-gray-200 rounded-lg shadow-lg transform transition-all duration-300 ease-in-out",{"translate-x-0 opacity-100":l.value,"translate-x-full opacity-0":!l.value}])},[e.createElementVNode("div",zt,[e.createElementVNode("div",Ut,[e.createElementVNode("div",Mt,[f.type==="success"?(e.openBlock(),e.createBlock(e.unref(k.CheckCircle),{key:0,class:"h-5 w-5 text-green-500"})):f.type==="error"?(e.openBlock(),e.createBlock(e.unref(k.AlertCircle),{key:1,class:"h-5 w-5 text-red-500"})):f.type==="info"?(e.openBlock(),e.createBlock(e.unref(k.Info),{key:2,class:"h-5 w-5 text-blue-500"})):(e.openBlock(),e.createBlock(e.unref(k.AlertTriangle),{key:3,class:"h-5 w-5 text-yellow-500"}))]),e.createElementVNode("div",qt,[f.title?(e.openBlock(),e.createElementBlock("p",Gt,e.toDisplayString(f.title),1)):e.createCommentVNode("",!0),e.createElementVNode("p",{class:e.normalizeClass(["text-sm text-gray-600",{"mt-1":f.title}])},e.toDisplayString(f.message),3)]),e.createElementVNode("button",{type:"button",onClick:y,class:"shrink-0 p-1 rounded-md text-gray-400 hover:text-gray-600 hover:bg-gray-100 transition-colors"},[e.createVNode(e.unref(k.X),{class:"h-4 w-4"})])])])],2)):e.createCommentVNode("",!0)]))}}),Ge=e.ref([]);function Te(){const r=a=>{const g=Date.now().toString(),y=document.createElement("div"),f=e.createApp(Ht,{...a,onClose:()=>{i(g)}});return f.mount(y),Ge.value.push({id:g,app:f,container:y}),g},i=a=>{const g=Ge.value.findIndex(y=>y.id===a);g>-1&&(Ge.value[g].app.unmount(),Ge.value.splice(g,1))};return{showToast:r,success:(a,g,y)=>r({message:a,title:g,type:"success",...y}),error:(a,g,y)=>r({message:a,title:g,type:"error",duration:5e3,...y}),info:(a,g,y)=>r({message:a,title:g,type:"info",...y}),warning:(a,g,y)=>r({message:a,title:g,type:"warning",...y}),removeToast:i}}const ve=Symbol("RULE_BUILDER_INSTANCE_KEY"),st=[{id:"user",name:"User",type:"object",path:"user",isExpandable:!0,icon:"User"},{id:"order",name:"Order",type:"object",path:"order",isExpandable:!0,icon:"ShoppingCart"},{id:"datetime",name:"Date & Time",type:"object",path:"datetime",isExpandable:!0,icon:"Calendar"}],Qe=Ot.defineStore("ruleBuilder",()=>{const r=[{value:"equals",label:"Equals",supportedTypes:["string","number","boolean","date","enum","list","dictionary","object"],arity:de.Binary},{value:"notEquals",label:"Not Equals",supportedTypes:["string","number","boolean","date","enum","list","dictionary","object"],arity:de.Binary},{value:"contains",label:"Contains",supportedTypes:["string"],arity:de.Binary},{value:"notContains",label:"Does Not Contain",supportedTypes:["string"],arity:de.Binary},{value:"startsWith",label:"Starts With",supportedTypes:["string"],arity:de.Binary},{value:"endsWith",label:"Ends With",supportedTypes:["string"],arity:de.Binary},{value:"greaterThan",label:"Greater Than",supportedTypes:["number","date"],arity:de.Binary},{value:"lessThan",label:"Less Than",supportedTypes:["number","date"],arity:de.Binary},{value:"greaterThanOrEqual",label:"Greater Than or Equal",supportedTypes:["number","date"],arity:de.Binary},{value:"lessThanOrEqual",label:"Less Than or Equal",supportedTypes:["number","date"],arity:de.Binary},{value:"isEmpty",label:"Is Empty",supportedTypes:["string","object"],arity:de.Unary},{value:"isNotEmpty",label:"Is Not Empty",supportedTypes:["string","object"],arity:de.Unary},{value:"isNull",label:"Is Null",supportedTypes:["object"],arity:de.Unary},{value:"isNotNull",label:"Is Not Null",supportedTypes:["object"],arity:de.Unary},{value:"between",label:"Between",supportedTypes:["number","date"],arity:de.Ternary}],i=[{value:"AND",label:"AND"},{value:"OR",label:"OR"}],t=e.ref(r),u=e.ref(i);let d={};const l={},a=()=>({user:{email:"test@example.com",age:25,role:"admin",department:"IT",isActive:!0,profile:{firstName:"John",lastName:"Doe"}},order:{id:"ORD-001",total:299.99,status:"pending",createdAt:"2024-01-15T10:30:00Z",customer:{email:"customer@example.com",name:"Jane Smith"},items:[{name:"Product A",price:149.99},{name:"Product B",price:150}]},datetime:{created:"2024-01-15T10:30:00Z",updated:"2024-01-15T11:45:00Z",timezone:"UTC",format:"ISO"}}),g=s=>(l[s]||(l[s]={dataProviders:{...d},rootRule:e.ref({id:"root",kind:Z.Group,not:!1,children:[]}),entityName:void 0,viewName:void 0,parentEntityName:void 0,availableTabs:void 0,features:e.ref({enableRules:!0,enableExpressions:!0,enableReferences:!0,enableNotOperator:!0,enableDeveloperTools:!0}),featureFlags:e.ref({naturalLanguagePreview:!0,testPanel:!0,autoSave:!1,validation:!0,lambdaPreview:!0,animations:!0}),testResult:e.ref(null),selectedField:e.ref(null),expandedNodes:e.ref(new Set),testData:e.ref(a()),isLoadingTree:e.ref(!1),isLoadingChildren:e.ref(!1),loadingChildren:e.ref({}),isLoadingFunctions:e.ref(!1),isTestingRule:e.ref(!1),functions:e.ref([]),functionsInitialized:e.ref(!1),isLoadingOperators:e.ref(!1),operatorsInitialized:e.ref(!1),treeNodes:e.ref([]),childNodes:e.ref({}),treeInitialized:e.ref(!1),lastAutosaveTime:e.ref(0),autosaveInProgress:e.ref(!1),highlightedNodeId:e.ref(null)}),l[s]),y=(s,n)=>{const o=g(s);o.highlightedNodeId.value=n,window.setTimeout(()=>{o.highlightedNodeId.value===n&&(o.highlightedNodeId.value=null)},2e3)},f=(s,n)=>{g(s).testData.value=n},N=s=>{g(s).testResult.value=null},b=(s,n)=>{const o=g(s);o.treeNodes.value=n,o.treeInitialized.value=!0},B=async s=>{const n=g(s);if(n.treeInitialized.value&&!(n.dataProviders.fetchTreeNodes||n.dataProviders.fetchTree))return n.treeNodes.value;n.isLoadingTree.value=!0;try{n.dataProviders.fetchTree?n.treeNodes.value=await n.dataProviders.fetchTree({entityName:n.entityName||"Entity",viewName:n.viewName,parentEntityName:n.parentEntityName,path:void 0}):n.dataProviders.fetchTreeNodes?n.treeNodes.value=await n.dataProviders.fetchTreeNodes():n.treeNodes.value=st,n.treeInitialized.value=!0}catch(o){console.error("Failed to load tree nodes:",o),n.treeNodes.value=st,n.treeInitialized.value=!0}finally{n.isLoadingTree.value=!1}return n.treeNodes.value},P=async(s,n)=>{if(!n)return[];const o=g(s);if(o.childNodes.value[n])return o.childNodes.value[n];o.isLoadingChildren.value=!0,o.loadingChildren.value={...o.loadingChildren.value,[n]:!0};try{if(o.dataProviders.fetchTree)o.childNodes.value[n]=await o.dataProviders.fetchTree({entityName:o.entityName||"Entity",viewName:o.viewName,parentEntityName:o.parentEntityName,path:n});else if(o.dataProviders.fetchChildNodes)o.childNodes.value[n]=await o.dataProviders.fetchChildNodes(n);else{const c=(F,O)=>{for(const J of F){if(J.id===O&&J.children)return J.children;if(J.children){const le=c(J.children,O);if(le.length>0)return le}}return[]};o.childNodes.value[n]=c(o.treeNodes.value,n)}}catch(c){console.error(`Failed to load child nodes for ${n}:`,c),o.childNodes.value[n]=[]}finally{o.isLoadingChildren.value=!1,o.loadingChildren.value={...o.loadingChildren.value,[n]:!1}}return o.childNodes.value[n]},U=async s=>{const n=g(s);if(n.functionsInitialized.value&&!(n.dataProviders.fetchFunctions||n.dataProviders.fetchBaseConfig))return n.functions.value;n.isLoadingFunctions.value=!0;try{if(n.dataProviders.fetchBaseConfig){const o=await n.dataProviders.fetchBaseConfig({entityName:n.entityName||"Entity",viewName:n.viewName,parentEntityName:n.parentEntityName}),c=(o==null?void 0:o.functions)??(o==null?void 0:o.Functions);Array.isArray(c)&&(n.functions.value=c);const F=(o==null?void 0:o.availableTabs)??(o==null?void 0:o.AvailableTabs);F&&(n.availableTabs=F);const O=(o==null?void 0:o.availableProperties)??(o==null?void 0:o.AvailableProperties);Array.isArray(O)&&(n.treeNodes.value=O);const J=(o==null?void 0:o.operators)??(o==null?void 0:o.Operators);if(J){const le=J.comparison??J.Comparison,ie=J.group??J.Group;le&&(t.value=le),ie&&(u.value=ie)}}else n.dataProviders.fetchFunctions?n.functions.value=await n.dataProviders.fetchFunctions():n.functions.value=[];n.functionsInitialized.value=!0}catch(o){console.error("Failed to load functions:",o),n.functions.value=[],n.functionsInitialized.value=!0}finally{n.isLoadingFunctions.value=!1}return n.functions.value},M=async s=>{const n=g(s);if(n.operatorsInitialized.value&&!(n.dataProviders.fetchOperators||n.dataProviders.fetchBaseConfig))return{comparison:t.value,group:u.value};n.isLoadingOperators.value=!0;try{if(n.dataProviders.fetchBaseConfig){const o=await n.dataProviders.fetchBaseConfig({entityName:n.entityName||"Entity",viewName:n.viewName,parentEntityName:n.parentEntityName}),c=(o==null?void 0:o.operators)??(o==null?void 0:o.Operators);(c!=null&&c.comparison||c!=null&&c.Comparison)&&(t.value=c.comparison??c.Comparison),(c!=null&&c.group||c!=null&&c.Group)&&(u.value=c.group??c.Group);const F=(o==null?void 0:o.functions)??(o==null?void 0:o.functions);Array.isArray(F)&&!n.functionsInitialized.value&&(n.functions.value=F,n.functionsInitialized.value=!0);const O=(o==null?void 0:o.availableTabs)??(o==null?void 0:o.AvailableTabs);O&&(n.availableTabs=O);const J=(o==null?void 0:o.availableProperties)??(o==null?void 0:o.AvailableProperties);Array.isArray(J)&&(!n.treeNodes.value||n.treeNodes.value.length===0)&&(n.treeNodes.value=J)}else if(n.dataProviders.fetchOperators){const o=await n.dataProviders.fetchOperators();o!=null&&o.comparison&&Array.isArray(o.comparison)&&(t.value=o.comparison),o!=null&&o.group&&Array.isArray(o.group)&&(u.value=o.group)}n.operatorsInitialized.value=!0}catch(o){console.error("Failed to load operators:",o),n.operatorsInitialized.value=!0}finally{n.isLoadingOperators.value=!1}return{comparison:t.value,group:u.value}},L=s=>{const n=[],o=c=>{for(const F of c)n.push(F),F.children&&F.children.length>0&&o(F.children)};return o(s),n},C=async(s,n)=>{const o=g(n||v());if(L(o.treeNodes.value).find(J=>J.path===s))return!1;const F=s.lastIndexOf("."),O=F>0?s.substring(0,F):"";if(!o.dataProviders.fetchTree)return!1;try{const J=await o.dataProviders.fetchTree({entityName:o.entityName||"Entity",viewName:o.viewName,parentEntityName:o.parentEntityName,path:O||void 0});if(Array.isArray(J)&&J.length>0){if(O){const ie=L(o.treeNodes.value).find(he=>he.path===O);if(ie){const he=ie.children||[],Ne=new Map(he.map(ce=>[ce.path,ce]));for(const ce of J)Ne.set(ce.path,ce);ie.children=Array.from(Ne.values())}else o.treeNodes.value=[...o.treeNodes.value||[],...J]}else{const le=new Map((o.treeNodes.value||[]).map(ie=>[ie.path,ie]));for(const ie of J)le.set(ie.path,ie);o.treeNodes.value=Array.from(le.values())}return!0}}catch(J){console.warn("ensurePathLoaded failed for",s,J)}return!1},v=()=>{const s=Object.keys(l);return s.length>0?s[0]:"default"},p=(s,n)=>{const o=g(s);return L(o.treeNodes.value).find(F=>F.id===n)||null},m=()=>Math.random().toString(36).substr(2,9),x=t,_=u,h=(s,n)=>(s&n)===n,z=s=>{const n=(s||"object").toLowerCase();return n==="datetime"?"date":n==="guid"?"string":n==="collection"||n==="list"||n==="array"?"array":["string","number","boolean","date","enum","object","array"].includes(n)?n:"object"},q=(s,n,o)=>typeof n=="number"&&s.capabilityClauses&&s.capabilityClauses.length>0?s.capabilityClauses.some(c=>h(n,c)):!!(o&&s.supportedTypes&&s.supportedTypes.includes(o)),re=s=>{const n=z(s.type),o=typeof s.capabilities=="number"?s.capabilities:void 0,c=typeof s.elementCapabilities=="number"?s.elementCapabilities:void 0;return t.value.filter(F=>{const O=q(F,o,n),J=typeof c=="number"?q(F,c,void 0):!1;return O||J})},R=s=>t.value.filter(n=>n.supportedTypes.includes(s)),V=(s,n)=>{if(typeof s=="object"&&s)return typeof s.type=="string"?s.type:"object";if(typeof s=="string"&&s.length>0){const o=g(n||Object.keys(l)[0]||"default"),F=L(o.treeNodes.value).find(O=>O.path===s||O.id===s);return(F==null?void 0:F.type)??"object"}return"object"},I=s=>s==null?"string":Array.isArray(s)?"array":typeof s=="number"?"number":typeof s=="boolean"?"boolean":typeof s=="object"?"object":"string",E=s=>typeof s=="string"?515:typeof s=="number"?773:typeof s=="boolean"?521:s instanceof Date?273:Array.isArray(s)?65:1,D=(s,n)=>{if(!s)return"string";const o=s.source,c=s.value;switch(o){case S.LITERAL:return I(c);case S.PROPERTY:return typeof c=="object"&&(c!=null&&c.type)?c.type:typeof c=="string"?V(c,n):"object";case S.FUNCTION:return typeof c=="object"&&(c!=null&&c.returnType)?c.returnType:"object";default:return"string"}},X=(s,n,o)=>{const c=t.value.find(O=>O.value===s);return!c||!q(c,n.caps,n.type&&z(n.type))?!1:["isEmpty","isNotEmpty","isNull","isNotNull","isTrue","isFalse"].includes(s)||c.capabilityClauses&&c.capabilityClauses.length>0||!o||["equals","notEquals","in","notIn"].includes(s)?!0:n.type&&o.type?z(n.type)===z(o.type):!0},$=s=>{const n=[],o=(c,F="root")=>{if(c.kind===Z.Group)F!=="root"&&(!c.children||c.children.length===0)&&n.push({message:"Empty rule group detected",path:F,nodeId:c.id}),(c.children||[]).forEach((O,J)=>{o(O,`${F}.child[${J}]`)});else if(c.kind===Z.Rule||c.kind===Z.Expression||c.kind===Z.Reference){if(c.expression!==void 0)return;!c.field&&!c.function&&n.push({message:"Missing property or function selection",path:F,nodeId:c.id}),c.operator||n.push({message:"Missing operator selection",path:F,nodeId:c.id});const O=t.value.find(he=>he.value===c.operator),J=O==null?void 0:O.arity,le=Array.isArray(c.values)&&c.values.length>0&&c.values.some(he=>he.value!==""&&he.value!==null&&he.value!==void 0),ie=Array.isArray(c.values)?c.values.length:0;if(J===de.Unary?le&&n.push({message:`Operator '${c.operator}' does not require any values`,path:F,nodeId:c.id}):J===de.Binary?le?ie>1&&n.push({message:`Operator '${c.operator}' requires exactly one value, but ${ie} values were provided`,path:F,nodeId:c.id}):n.push({message:"Missing comparison value",path:F,nodeId:c.id}):J===de.Ternary?(ie!==2||!le)&&n.push({message:`Operator '${c.operator}' requires exactly two values (From, To)`,path:F,nodeId:c.id}):J===de.Variadic?le||n.push({message:`Operator '${c.operator}' requires at least one value`,path:F,nodeId:c.id}):le||n.push({message:"Missing comparison value",path:F,nodeId:c.id}),(c.field||c.function)&&c.operator&&le&&J!==de.Unary)try{const he=c.function?void 0:(()=>{const ce=g(v()),Re=L(ce.treeNodes.value).find(at=>at.path===c.field||at.id===c.field);return Re==null?void 0:Re.capabilities})(),Ne=c.function?c.function.returnType||"object":V(c.field||"",v());for(const ce of c.values||[]){const Tt=ce.source===S.LITERAL?E(ce.value):ce.source===S.PROPERTY||ce.source===S.MODEL?(()=>{const Lu=g(v()),nt=L(Lu.treeNodes.value).find(St=>St.path===ce.value||St.id===ce.value);return(nt==null?void 0:nt.capabilities)??0})():0,Re=ce.source===S.LITERAL?I(ce.value):ce.source===S.MODEL||ce.source===S.PROPERTY?V(ce.value||"",v()):"string";X(c.operator,{caps:he,type:z(Ne)},{caps:Tt,type:z(Re)})||n.push({message:`Operator '${c.operator}' is not applicable to left=${z(Ne)} / right=${z(Re)}`,path:F,nodeId:c.id})}}catch{}}};return o(s),{isValid:n.length===0,errors:n}},ae=2e3,ee=(s,n=!1)=>{const o=g(s);if(o.autosaveInProgress.value)return;const c=O=>O.kind===Z.Rule?!!(O.field||O.function||O.expression):O.kind===Z.Expression?!!O.expression:O.kind===Z.Reference?!!O.referenceId:(O.children||[]).some(c);if(!c(o.rootRule.value)){console.log("Skipping autosave - no meaningful content");return}if(!(!$(o.rootRule.value).isValid&&!n)){if(!n&&Q&&(clearTimeout(Q),Q=null),n){j(s);return}Q=window.setTimeout(()=>{j(s),Q=null},ae)}},j=async s=>{const n=g(s);if(!n.autosaveInProgress.value)try{n.autosaveInProgress.value=!0;const o=Te(),c=$(n.rootRule.value),F=jt(n.rootRule.value),O=c.isValid?`✅ ${F}`:`⚠️ ${F} (${c.errors.length} issue${c.errors.length>1?"s":""})`,J=Ce.save(n.rootRule.value,s,O);n.lastAutosaveTime.value=J.timestamp,c.isValid?o.success("Auto-saved",`Valid rule saved at ${J.timeString}`,{duration:2e3}):o.info("Auto-saved",`Draft saved at ${J.timeString} (${c.errors.length} validation issues)`,{duration:3e3})}catch(o){console.error("Autosave failed:",o),Te().error("Autosave failed","Your changes were not saved automatically")}finally{n.autosaveInProgress.value=!1}},K=(s,n)=>{try{const o=Ce.load(n);return o?(g(s).rootRule.value=o.rootGroup,Te().success("Restored",`Restored from ${o.dateString} at ${o.timeString}`),ee(s),!0):(Te().error("Restore failed","Could not find the selected autosave"),!1)}catch(o){return console.error("Restore from autosave failed:",o),Te().error("Restore failed","An error occurred while restoring"),!1}},W=(s,n,o=Z.Rule)=>{const c=g(s),F={id:m(),kind:o,not:!1,children:[],operator:o===Z.Rule?"equals":void 0,expression:o===Z.Expression?"":void 0,referenceId:o===Z.Reference?"":void 0,referenceName:o===Z.Reference?"":void 0},O=J=>J.id===n&&J.kind===Z.Group?{...J,children:[...J.children||[],F]}:{...J,children:(J.children||[]).map(O)};c.rootRule.value=O(c.rootRule.value),ee(s)},xe=(s,n,o)=>{const c=g(s),F=O=>O.id===n&&O.kind===Z.Group?{...O,children:(O.children||[]).filter(J=>J.id!==o)}:{...O,children:(O.children||[]).map(F)};c.rootRule.value=F(c.rootRule.value),ee(s)},G=(s,n,o,c)=>{const F=g(s),O=J=>J.id===n&&J.kind===Z.Group?{...J,children:(J.children||[]).map(le=>le.id===o?{...le,...c.field!==void 0?{field:c.field}:{},...c.operator!==void 0?{operator:c.operator}:{},...c.not!==void 0?{not:c.not}:{},...c.expression!==void 0?{expression:c.expression,field:void 0,operator:void 0,values:void 0}:{},...c.referenceId!==void 0?{referenceId:c.referenceId}:{},...c.referenceName!==void 0?{referenceName:c.referenceName}:{},...c.function!==void 0?{function:c.function,field:void 0}:{},...c.field!==void 0?{function:c.field?void 0:le.function}:{},...c.value!==void 0?{values:[{source:c.value.source||S.LITERAL,value:c.value.value}]}:{},...c.values!==void 0?{values:c.values.map(ie=>({source:ie.source||S.LITERAL,value:ie.value}))}:{}}:le)}:{...J,children:(J.children||[]).map(O)};F.rootRule.value=O(F.rootRule.value),ee(s)},A=(s,n)=>{const o=g(s),c={id:m(),kind:Z.Group,combinator:Be.Or,not:!1,children:[]},F=O=>O.id===n&&O.kind===Z.Group?{...O,children:[...O.children||[],c]}:{...O,children:(O.children||[]).map(F)};o.rootRule.value=F(o.rootRule.value),ee(s)},oe=(s,n,o)=>{const c=g(s),F=O=>O.id===o&&O.kind===Z.Group?{...O,children:(O.children||[]).filter(J=>J.id!==n)}:{...O,children:(O.children||[]).map(F)};c.rootRule.value=F(c.rootRule.value),ee(s)},me=(s,n,o)=>{const c=g(s),F=O=>O.id===n&&O.kind===Z.Group?{...O,combinator:o.toLowerCase()==="and"?Be.And:Be.Or}:{...O,children:(O.children||[]).map(F)};c.rootRule.value=F(c.rootRule.value),ee(s)},Ve=(s,n,o)=>{const c=g(s),F=O=>O.id===n&&O.kind===Z.Group?{...O,not:o}:{...O,children:(O.children||[]).map(F)};c.rootRule.value=F(c.rootRule.value),ee(s)},ge=(s,n)=>{const o=g(s);o.featureFlags.value[n]=!o.featureFlags.value[n]},_e=(s,n)=>{const o=g(s),c=new Set(o.expandedNodes.value);c.has(n)?c.delete(n):(c.add(n),P(s,n)),o.expandedNodes.value=c},qe=async s=>{const n=g(s);try{const o=JSON.parse(JSON.stringify(n.testData.value));n.isTestingRule.value=!0;let c;return n.dataProviders.testRule?c=await n.dataProviders.testRule(n.rootRule.value,o):c={success:!0,result:!0,message:"Test completed (mock)",data:o,executionTime:0},n.testResult.value=c,c}catch(o){throw n.testResult.value={success:!1,result:!1,error:o instanceof Error?o.message:"Test failed",executionTime:0},o}finally{n.isTestingRule.value=!1}},Xe=async(s,n)=>{const o=g(s);try{return o.dataProviders.fetchContextualData?await o.dataProviders.fetchContextualData(n):[]}catch(c){return console.error("Failed to fetch contextual data:",c),[]}},w=s=>{var F;let n="";if(s.kind===Z.Rule){if(s.expression)n=`Expression: ${s.expression}`;else{const O=s.field||((F=s.function)==null?void 0:F.name)||"Field",J=s.operator||"equals",le=s.values||[];if(le.length>1){const ie=le.map(he=>JSON.stringify(he.value)).join(", ");n=`${O} ${J} [${ie}]`}else{const ie=le[0],he=ie?JSON.stringify(ie.value):"";n=`${O} ${J} ${he}`}}return s.not?`NOT (${n})`:n}else{if(s.kind===Z.Expression)return n=`Expression: ${s.expression||"(empty)"}`,s.not?`NOT (${n})`:n;if(s.kind===Z.Reference)return n=`Reference: ${s.referenceName||s.referenceId||"(empty)"}`,s.not?`NOT (${n})`:n}const o=(s.children||[]).map(O=>O.kind===Z.Group?`(${w(O)})`:w(O));if(o.length===0)return"";if(o.length===1)return o[0];const c=s.combinator===Be.And?" AND ":" OR ";return n=o.join(c),s.not?`NOT (${n})`:n},T=s=>{var F;let n="";if(s.kind===Z.Rule){if(s.expression)n=s.expression;else{const O=s.field?`x.${s.field}`:(F=s.function)!=null&&F.name?`x.${s.function.name}()`:"x.field",J=s.operator||"equals",le=s.values||[],ie=Ne=>typeof Ne=="string"?`"${Ne}"`:Ne,he=Ne=>{const ce=ie(Ne.value);switch(J){case"equals":return`${O} == ${ce}`;case"notEquals":return`${O} != ${ce}`;case"contains":return`${O}.Contains(${ce})`;case"greaterThan":return`${O} > ${ce}`;case"lessThan":return`${O} < ${ce}`;case"greaterThanOrEqual":return`${O} >= ${ce}`;case"lessThanOrEqual":return`${O} <= ${ce}`;default:return`${O} == ${ce}`}};if(J==="between"&&le.length===2){const Ne=ie(le[0].value),ce=ie(le[1].value);n=`${O} >= ${Ne} && ${O} <= ${ce}`}else{const Ne=le.map(he);n=Ne.length>1?`(${Ne.join(" || ")})`:Ne[0]||""}}return s.not?`!(${n})`:n}else{if(s.kind===Z.Expression)return n=s.expression||"",s.not?`!(${n})`:n;if(s.kind===Z.Reference)return n=`/* Reference: ${s.referenceName||s.referenceId||"(empty)"} */`,s.not?`!(${n})`:n}const o=(s.children||[]).map(O=>O.kind===Z.Group?`(${T(O)})`:T(O));if(o.length===0)return"";if(o.length===1)return o[0];const c=s.combinator===Be.And?` && `:` || `;return n=o.join(c),s.not?`!(${n})`:n},H=(s,n)=>{const o=g(s);o.dataProviders={...o.dataProviders,...n},!o.treeInitialized.value&&n.fetchTreeNodes&&B(s),n.fetchBaseConfig?(async()=>{try{const c=await n.fetchBaseConfig({entityName:o.entityName||"Entity",viewName:o.viewName,parentEntityName:o.parentEntityName}),F=(c==null?void 0:c.operators)??(c==null?void 0:c.Operators);(F!=null&&F.comparison||F!=null&&F.Comparison)&&(t.value=F.comparison??F.Comparison),(F!=null&&F.group||F!=null&&F.Group)&&(u.value=F.group??F.Group);const O=(c==null?void 0:c.functions)??(c==null?void 0:c.functions);Array.isArray(O)&&(o.functions.value=O,o.functionsInitialized.value=!0);const J=(c==null?void 0:c.availableTabs)??(c==null?void 0:c.AvailableTabs);J&&(o.availableTabs=J);const le=(c==null?void 0:c.features)??(c==null?void 0:c.Features);le&&typeof le=="object"&&(o.features.value={...o.features.value,...le});const ie=(c==null?void 0:c.availableProperties)??(c==null?void 0:c.AvailableProperties);Array.isArray(ie)&&(o.treeNodes.value=ie),o.operatorsInitialized.value=!0}catch(c){console.error("Failed to load base config:",c),o.functions.value=o.functions.value||[],o.functionsInitialized.value=!0,o.operatorsInitialized.value=!0}})():(!o.functionsInitialized.value&&n.fetchFunctions&&U(s),!o.operatorsInitialized.value&&n.fetchOperators&&M(s))},Y=s=>{d={...d,...s};for(const n of Object.keys(l))H(n,s)};let Q=null;const te=s=>{const n=g(s);return{entityName:n.entityName,viewName:n.viewName,parentEntityName:n.parentEntityName}},se=async(s,n)=>{const o=g(s);Q&&(clearTimeout(Q),Q=null),n&&(n.entityName!==void 0&&(o.entityName=n.entityName),n.viewName!==void 0&&(o.viewName=n.viewName),n.parentEntityName!==void 0&&(o.parentEntityName=n.parentEntityName)),o.rootRule.value={id:"root",kind:Z.Group,not:!1,children:[]},o.selectedField.value=null,o.expandedNodes.value=new Set,o.highlightedNodeId.value=null,o.testResult.value=null,o.treeNodes.value=[],o.childNodes.value={},o.treeInitialized.value=!1,o.isLoadingTree.value=!1,o.isLoadingChildren.value=!1,o.loadingChildren.value={},o.functions.value=[],o.functionsInitialized.value=!1,o.isLoadingFunctions.value=!1,o.isLoadingOperators.value=!1,o.operatorsInitialized.value=!1,o.lastAutosaveTime.value=0,o.autosaveInProgress.value=!1;try{Ce.clearInstance(s)}catch{}try{await M(s)}catch{}try{await B(s)}catch{}};return{OPERATORS:x,GROUP_OPERATORS:_,validateRules:$,getOperatorsForType:R,getOperatorsForNode:re,ensurePathLoaded:C,getFieldType:V,getValueType:D,inferLiteralType:I,capabilitiesForLiteral:E,isOperatorCompatible:X,generateNaturalLanguage:w,generateLambdaExpression:T,registerDataProviders:Y,getFacade:s=>{const n=g(s);return{rootRule:n.rootRule,rootGroup:n.rootRule,featureFlags:n.featureFlags,selectedField:n.selectedField,testData:n.testData,testResult:n.testResult,expandedNodes:n.expandedNodes,lastAutosaveTime:n.lastAutosaveTime,autosaveInProgress:n.autosaveInProgress,treeNodes:n.treeNodes,childNodes:n.childNodes,functions:n.functions,isLoadingTree:n.isLoadingTree,isLoadingChildren:n.isLoadingChildren,loadingChildren:n.loadingChildren,isLoadingFunctions:n.isLoadingFunctions,isTestingRule:n.isTestingRule,isLoadingOperators:n.isLoadingOperators,treeInitialized:n.treeInitialized,functionsInitialized:n.functionsInitialized,operatorsInitialized:n.operatorsInitialized,availableTabs:()=>n.availableTabs,addRule:(o,c=Z.Rule)=>{W(s,o,c)},removeRule:(o,c)=>xe(s,o,c),updateRule:(o,c,F)=>G(s,o,c,F),addGroup:o=>A(s,o),removeGroup:(o,c)=>oe(s,o,c),updateGroupOperator:(o,c)=>me(s,o,c),updateGroupNot:(o,c)=>Ve(s,o,c),toggleFeature:o=>ge(s,o),toggleTreeNode:o=>_e(s,o),testRule:()=>qe(s),updateTestData:o=>f(s,o),clearTestResult:()=>N(s),setSelectedField:o=>{n.selectedField.value=o},setTestData:o=>{n.testData.value=o},loadTreeNodes:()=>B(s),loadChildNodes:o=>P(s,o),loadFunctions:()=>U(s),loadOperators:()=>M(s),fetchContextualData:o=>Xe(s,o),registerDataProviders:o=>H(s,o),setInstanceConfig:o=>{o.entityName!==void 0&&(n.entityName=o.entityName),o.viewName!==void 0&&(n.viewName=o.viewName),o.parentEntityName!==void 0&&(n.parentEntityName=o.parentEntityName),o.availableTabs!==void 0&&(n.availableTabs=o.availableTabs),o.features!==void 0&&(n.features.value={...n.features.value,...o.features})},resetForEntity:o=>se(s,o),initializeTreeWithData:o=>b(s,o),triggerAutosave:(o=!1)=>ee(s,o),performAutosave:()=>j(s),restoreFromAutosave:o=>K(s,o),validateRules:$,getAllNodesFromTree:L,getNodeByid:o=>p(s,o),getOperatorsForType:R,getOperatorsForNode:re,ensurePathLoaded:C,getFieldType:V,getValueType:D,inferLiteralType:I,capabilitiesForLiteral:E,isOperatorCompatible:X,generateNaturalLanguage:w,generateLambdaExpression:T,get features(){return n.features},OPERATORS:x,GROUP_OPERATORS:_,highlightedNodeId:n.highlightedNodeId,highlightNode:o=>y(s,o)}},resetInstance:se,getInstanceConfig:te}}),ye=r=>{const i=Qe(),t=i.getFacade(r);return t.resetForEntity=u=>i.resetInstance(r,u),t},Jt=Object.freeze(Object.defineProperty({__proto__:null,RULE_BUILDER_INSTANCE_KEY:ve,useRuleBuilderInstance:ye,useRuleBuilderStore:Qe},Symbol.toStringTag,{value:"Module"}));function Se(...r){return Dt.twMerge(Rt.clsx(r))}const Le=e.defineComponent({__name:"Card",setup(r){return(i,t)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(Se)("rounded-lg border bg-card text-card-foreground shadow-sm",i.$attrs.class))},[e.renderSlot(i.$slots,"default")],2))}}),Ie=e.defineComponent({__name:"CardHeader",setup(r){return(i,t)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(Se)("flex flex-col space-y-1.5 p-6",i.$attrs.class))},[e.renderSlot(i.$slots,"default")],2))}}),Pe=e.defineComponent({__name:"CardContent",setup(r){return(i,t)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(Se)("p-6 pt-0",i.$attrs.class))},[e.renderSlot(i.$slots,"default")],2))}}),Wt=["disabled"],ne=e.defineComponent({__name:"Button",props:{variant:{default:"default"},size:{default:"default"},disabled:{type:Boolean,default:!1}},emits:["click"],setup(r,{emit:i}){const t=r,u=i,d=e.computed(()=>{const a="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",g={default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},y={default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"};return Se(a,g[t.variant],y[t.size])}),l=a=>{t.disabled||u("click",a)};return(a,g)=>(e.openBlock(),e.createElementBlock("button",e.mergeProps({type:"button",class:d.value,disabled:a.disabled},a.$attrs,{onClick:l}),[e.renderSlot(a.$slots,"default")],16,Wt))}});function Xt(r,i,t){let u=e.ref(t==null?void 0:t.value),d=e.computed(()=>r.value!==void 0);return[e.computed(()=>d.value?r.value:u.value),function(l){return d.value||(u.value=l),i==null?void 0:i(l)}]}var it;let Yt=Symbol("headlessui.useid"),Qt=0;const He=(it=lt.useId)!=null?it:function(){return lt.inject(Yt,()=>`${++Qt}`)()};function fe(r){var i;if(r==null||r.value==null)return null;let t=(i=r.value.$el)!=null?i:r.value;return t instanceof Node?t:null}function we(r,i,...t){if(r in i){let d=i[r];return typeof d=="function"?d(...t):d}let u=new Error(`Tried to handle "${r}" but there is no handler defined. Only defined handlers are: ${Object.keys(i).map(d=>`"${d}"`).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(u,we),u}var Kt=Object.defineProperty,Zt=(r,i,t)=>i in r?Kt(r,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[i]=t,ut=(r,i,t)=>(Zt(r,typeof i!="symbol"?i+"":i,t),t);let $t=class{constructor(){ut(this,"current",this.detect()),ut(this,"currentId",0)}set(i){this.current!==i&&(this.currentId=0,this.current=i)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current==="server"}get isClient(){return this.current==="client"}detect(){return typeof window>"u"||typeof document>"u"?"server":"client"}},Ke=new $t;function er(r){if(Ke.isServer)return null;if(r instanceof Node)return r.ownerDocument;if(r!=null&&r.hasOwnProperty("value")){let i=fe(r);if(i)return i.ownerDocument}return document}let ct=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map(r=>`${r}:not([tabindex='-1'])`).join(",");var tr=(r=>(r[r.First=1]="First",r[r.Previous=2]="Previous",r[r.Next=4]="Next",r[r.Last=8]="Last",r[r.WrapAround=16]="WrapAround",r[r.NoScroll=32]="NoScroll",r))(tr||{}),rr=(r=>(r[r.Error=0]="Error",r[r.Overflow=1]="Overflow",r[r.Success=2]="Success",r[r.Underflow=3]="Underflow",r))(rr||{}),or=(r=>(r[r.Previous=-1]="Previous",r[r.Next=1]="Next",r))(or||{}),Ze=(r=>(r[r.Strict=0]="Strict",r[r.Loose=1]="Loose",r))(Ze||{});function dt(r,i=0){var t;return r===((t=er(r))==null?void 0:t.body)?!1:we(i,{0(){return r.matches(ct)},1(){let u=r;for(;u!==null;){if(u.matches(ct))return!0;u=u.parentElement}return!1}})}var ar=(r=>(r[r.Keyboard=0]="Keyboard",r[r.Mouse=1]="Mouse",r))(ar||{});typeof window<"u"&&typeof document<"u"&&(document.addEventListener("keydown",r=>{r.metaKey||r.altKey||r.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible="")},!0),document.addEventListener("click",r=>{r.detail===1?delete document.documentElement.dataset.headlessuiFocusVisible:r.detail===0&&(document.documentElement.dataset.headlessuiFocusVisible="")},!0));function nr(r,i=t=>t){return r.slice().sort((t,u)=>{let d=i(t),l=i(u);if(d===null||l===null)return 0;let a=d.compareDocumentPosition(l);return a&Node.DOCUMENT_POSITION_FOLLOWING?-1:a&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function lr(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function sr(){return/Android/gi.test(window.navigator.userAgent)}function ir(){return lr()||sr()}function Je(r,i,t){Ke.isServer||e.watchEffect(u=>{document.addEventListener(r,i,t),u(()=>document.removeEventListener(r,i,t))})}function ur(r,i,t){Ke.isServer||e.watchEffect(u=>{window.addEventListener(r,i,t),u(()=>window.removeEventListener(r,i,t))})}function cr(r,i,t=e.computed(()=>!0)){function u(l,a){if(!t.value||l.defaultPrevented)return;let g=a(l);if(g===null||!g.getRootNode().contains(g))return;let y=function f(N){return typeof N=="function"?f(N()):Array.isArray(N)||N instanceof Set?N:[N]}(r);for(let f of y){if(f===null)continue;let N=f instanceof HTMLElement?f:fe(f);if(N!=null&&N.contains(g)||l.composed&&l.composedPath().includes(N))return}return!dt(g,Ze.Loose)&&g.tabIndex!==-1&&l.preventDefault(),i(l,g)}let d=e.ref(null);Je("pointerdown",l=>{var a,g;t.value&&(d.value=((g=(a=l.composedPath)==null?void 0:a.call(l))==null?void 0:g[0])||l.target)},!0),Je("mousedown",l=>{var a,g;t.value&&(d.value=((g=(a=l.composedPath)==null?void 0:a.call(l))==null?void 0:g[0])||l.target)},!0),Je("click",l=>{ir()||d.value&&(u(l,()=>d.value),d.value=null)},!0),Je("touchend",l=>u(l,()=>l.target instanceof HTMLElement?l.target:null),!0),ur("blur",l=>u(l,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}function pt(r,i){if(r)return r;let t=i??"button";if(typeof t=="string"&&t.toLowerCase()==="button")return"button"}function dr(r,i){let t=e.ref(pt(r.value.type,r.value.as));return e.onMounted(()=>{t.value=pt(r.value.type,r.value.as)}),e.watchEffect(()=>{var u;t.value||fe(i)&&fe(i)instanceof HTMLButtonElement&&!((u=fe(i))!=null&&u.hasAttribute("type"))&&(t.value="button")}),t}function mt(r){return[r.screenX,r.screenY]}function pr(){let r=e.ref([-1,-1]);return{wasMoved(i){let t=mt(i);return r.value[0]===t[0]&&r.value[1]===t[1]?!1:(r.value=t,!0)},update(i){r.value=mt(i)}}}var $e=(r=>(r[r.None=0]="None",r[r.RenderStrategy=1]="RenderStrategy",r[r.Static=2]="Static",r))($e||{}),mr=(r=>(r[r.Unmount=0]="Unmount",r[r.Hidden=1]="Hidden",r))(mr||{});function Oe({visible:r=!0,features:i=0,ourProps:t,theirProps:u,...d}){var l;let a=vt(u,t),g=Object.assign(d,{props:a});if(r||i&2&&a.static)return et(g);if(i&1){let y=(l=a.unmount)==null||l?0:1;return we(y,{0(){return null},1(){return et({...d,props:{...a,hidden:!0,style:{display:"none"}}})}})}return et(g)}function et({props:r,attrs:i,slots:t,slot:u,name:d}){var l,a;let{as:g,...y}=gt(r,["unmount","static"]),f=(l=t.default)==null?void 0:l.call(t,u),N={};if(u){let b=!1,B=[];for(let[P,U]of Object.entries(u))typeof U=="boolean"&&(b=!0),U===!0&&B.push(P);b&&(N["data-headlessui-state"]=B.join(" "))}if(g==="template"){if(f=ft(f??[]),Object.keys(y).length>0||Object.keys(i).length>0){let[b,...B]=f??[];if(!vr(b)||B.length>0)throw new Error(['Passing props on "template"!',"",`The current component <${d} /> is rendering a "template".`,"However we need to passthrough the following props:",Object.keys(y).concat(Object.keys(i)).map(M=>M.trim()).filter((M,L,C)=>C.indexOf(M)===L).sort((M,L)=>M.localeCompare(L)).map(M=>` - ${M}`).join(` `),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".',"Render a single element as the child so that we can forward the props onto that element."].map(M=>` - ${M}`).join(` `)].join(` `));let P=vt((a=b.props)!=null?a:{},y,N),U=e.cloneVNode(b,P,!0);for(let M in P)M.startsWith("on")&&(U.props||(U.props={}),U.props[M]=P[M]);return U}return Array.isArray(f)&&f.length===1?f[0]:f}return e.h(g,Object.assign({},y,N),{default:()=>f})}function ft(r){return r.flatMap(i=>i.type===e.Fragment?ft(i.children):[i])}function vt(...r){if(r.length===0)return{};if(r.length===1)return r[0];let i={},t={};for(let u of r)for(let d in u)d.startsWith("on")&&typeof u[d]=="function"?(t[d]!=null||(t[d]=[]),t[d].push(u[d])):i[d]=u[d];if(i.disabled||i["aria-disabled"])return Object.assign(i,Object.fromEntries(Object.keys(t).map(u=>[u,void 0])));for(let u in t)Object.assign(i,{[u](d,...l){let a=t[u];for(let g of a){if(d instanceof Event&&d.defaultPrevented)return;g(d,...l)}}});return i}function fr(r){let i=Object.assign({},r);for(let t in i)i[t]===void 0&&delete i[t];return i}function gt(r,i=[]){let t=Object.assign({},r);for(let u of i)u in t&&delete t[u];return t}function vr(r){return r==null?!1:typeof r.type=="string"||typeof r.type=="object"||typeof r.type=="function"}var yt=(r=>(r[r.None=1]="None",r[r.Focusable=2]="Focusable",r[r.Hidden=4]="Hidden",r))(yt||{});let gr=e.defineComponent({name:"Hidden",props:{as:{type:[Object,String],default:"div"},features:{type:Number,default:1}},setup(r,{slots:i,attrs:t}){return()=>{var u;let{features:d,...l}=r,a={"aria-hidden":(d&2)===2?!0:(u=l["aria-hidden"])!=null?u:void 0,hidden:(d&4)===4?!0:void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...(d&4)===4&&(d&2)!==2&&{display:"none"}}};return Oe({ourProps:a,theirProps:l,slot:{},attrs:t,slots:i,name:"Hidden"})}}}),bt=Symbol("Context");var Ae=(r=>(r[r.Open=1]="Open",r[r.Closed=2]="Closed",r[r.Closing=4]="Closing",r[r.Opening=8]="Opening",r))(Ae||{});function yr(){return e.inject(bt,null)}function br(r){e.provide(bt,r)}var be=(r=>(r.Space=" ",r.Enter="Enter",r.Escape="Escape",r.Backspace="Backspace",r.Delete="Delete",r.ArrowLeft="ArrowLeft",r.ArrowUp="ArrowUp",r.ArrowRight="ArrowRight",r.ArrowDown="ArrowDown",r.Home="Home",r.End="End",r.PageUp="PageUp",r.PageDown="PageDown",r.Tab="Tab",r))(be||{});function hr(r){throw new Error("Unexpected object: "+r)}var ke=(r=>(r[r.First=0]="First",r[r.Previous=1]="Previous",r[r.Next=2]="Next",r[r.Last=3]="Last",r[r.Specific=4]="Specific",r[r.Nothing=5]="Nothing",r))(ke||{});function xr(r,i){let t=i.resolveItems();if(t.length<=0)return null;let u=i.resolveActiveIndex(),d=u??-1;switch(r.focus){case 0:{for(let l=0;l<t.length;++l)if(!i.resolveDisabled(t[l],l,t))return l;return u}case 1:{d===-1&&(d=t.length);for(let l=d-1;l>=0;--l)if(!i.resolveDisabled(t[l],l,t))return l;return u}case 2:{for(let l=d+1;l<t.length;++l)if(!i.resolveDisabled(t[l],l,t))return l;return u}case 3:{for(let l=t.length-1;l>=0;--l)if(!i.resolveDisabled(t[l],l,t))return l;return u}case 4:{for(let l=0;l<t.length;++l)if(i.resolveId(t[l],l,t)===r.id)return l;return u}case 5:return null;default:hr(r)}}function ht(r={},i=null,t=[]){for(let[u,d]of Object.entries(r))Nt(t,xt(i,u),d);return t}function xt(r,i){return r?r+"["+i+"]":i}function Nt(r,i,t){if(Array.isArray(t))for(let[u,d]of t.entries())Nt(r,xt(i,u.toString()),d);else t instanceof Date?r.push([i,t.toISOString()]):typeof t=="boolean"?r.push([i,t?"1":"0"]):typeof t=="string"?r.push([i,t]):typeof t=="number"?r.push([i,`${t}`]):t==null?r.push([i,""]):ht(t,i,r)}let kt=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;function Et(r){var i,t;let u=(i=r.innerText)!=null?i:"",d=r.cloneNode(!0);if(!(d instanceof HTMLElement))return u;let l=!1;for(let g of d.querySelectorAll('[hidden],[aria-hidden],[role="img"]'))g.remove(),l=!0;let a=l?(t=d.innerText)!=null?t:"":u;return kt.test(a)&&(a=a.replace(kt,"")),a}function Nr(r){let i=r.getAttribute("aria-label");if(typeof i=="string")return i.trim();let t=r.getAttribute("aria-labelledby");if(t){let u=t.split(" ").map(d=>{let l=document.getElementById(d);if(l){let a=l.getAttribute("aria-label");return typeof a=="string"?a.trim():Et(l).trim()}return null}).filter(Boolean);if(u.length>0)return u.join(", ")}return Et(r).trim()}function kr(r){let i=e.ref(""),t=e.ref("");return()=>{let u=fe(r);if(!u)return"";let d=u.innerText;if(i.value===d)return t.value;let l=Nr(u).trim().toLowerCase();return i.value=d,t.value=l,l}}function Er(r,i){return r===i}var wr=(r=>(r[r.Open=0]="Open",r[r.Closed=1]="Closed",r))(wr||{}),Vr=(r=>(r[r.Single=0]="Single",r[r.Multi=1]="Multi",r))(Vr||{}),Cr=(r=>(r[r.Pointer=0]="Pointer",r[r.Other=1]="Other",r))(Cr||{});function _r(r){requestAnimationFrame(()=>requestAnimationFrame(r))}let wt=Symbol("ListboxContext");function Fe(r){let i=e.inject(wt,null);if(i===null){let t=new Error(`<${r} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,Fe),t}return i}let Br=e.defineComponent({name:"Listbox",emits:{"update:modelValue":r=>!0},props:{as:{type:[Object,String],default:"template"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>Er},horizontal:{type:[Boolean],default:!1},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},multiple:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(r,{slots:i,attrs:t,emit:u}){let d=e.ref(1),l=e.ref(null),a=e.ref(null),g=e.ref(null),y=e.ref([]),f=e.ref(""),N=e.ref(null),b=e.ref(1);function B(p=m=>m){let m=N.value!==null?y.value[N.value]:null,x=nr(p(y.value.slice()),h=>fe(h.dataRef.domRef)),_=m?x.indexOf(m):null;return _===-1&&(_=null),{options:x,activeOptionIndex:_}}let P=e.computed(()=>r.multiple?1:0),[U,M]=Xt(e.computed(()=>r.modelValue),p=>u("update:modelValue",p),e.computed(()=>r.defaultValue)),L=e.computed(()=>U.value===void 0?we(P.value,{1:[],0:void 0}):U.value),C={listboxState:d,value:L,mode:P,compare(p,m){if(typeof r.by=="string"){let x=r.by;return(p==null?void 0:p[x])===(m==null?void 0:m[x])}return r.by(p,m)},orientation:e.computed(()=>r.horizontal?"horizontal":"vertical"),labelRef:l,buttonRef:a,optionsRef:g,disabled:e.computed(()=>r.disabled),options:y,searchQuery:f,activeOptionIndex:N,activationTrigger:b,closeListbox(){r.disabled||d.value!==1&&(d.value=1,N.value=null)},openListbox(){r.disabled||d.value!==0&&(d.value=0)},goToOption(p,m,x){if(r.disabled||d.value===1)return;let _=B(),h=xr(p===ke.Specific?{focus:ke.Specific,id:m}:{focus:p},{resolveItems:()=>_.options,resolveActiveIndex:()=>_.activeOptionIndex,resolveId:z=>z.id,resolveDisabled:z=>z.dataRef.disabled});f.value="",N.value=h,b.value=x??1,y.value=_.options},search(p){if(r.disabled||d.value===1)return;let m=f.value!==""?0:1;f.value+=p.toLowerCase();let x=(N.value!==null?y.value.slice(N.value+m).concat(y.value.slice(0,N.value+m)):y.value).find(h=>h.dataRef.textValue.startsWith(f.value)&&!h.dataRef.disabled),_=x?y.value.indexOf(x):-1;_===-1||_===N.value||(N.value=_,b.value=1)},clearSearch(){r.disabled||d.value!==1&&f.value!==""&&(f.value="")},registerOption(p,m){let x=B(_=>[..._,{id:p,dataRef:m}]);y.value=x.options,N.value=x.activeOptionIndex},unregisterOption(p){let m=B(x=>{let _=x.findIndex(h=>h.id===p);return _!==-1&&x.splice(_,1),x});y.value=m.options,N.value=m.activeOptionIndex,b.value=1},theirOnChange(p){r.disabled||M(p)},select(p){r.disabled||M(we(P.value,{0:()=>p,1:()=>{let m=e.toRaw(C.value.value).slice(),x=e.toRaw(p),_=m.findIndex(h=>C.compare(x,e.toRaw(h)));return _===-1?m.push(x):m.splice(_,1),m}}))}};cr([a,g],(p,m)=>{var x;C.closeListbox(),dt(m,Ze.Loose)||(p.preventDefault(),(x=fe(a))==null||x.focus())},e.computed(()=>d.value===0)),e.provide(wt,C),br(e.computed(()=>we(d.value,{0:Ae.Open,1:Ae.Closed})));let v=e.computed(()=>{var p;return(p=fe(a))==null?void 0:p.closest("form")});return e.onMounted(()=>{e.watch([v],()=>{if(!v.value||r.defaultValue===void 0)return;function p(){C.theirOnChange(r.defaultValue)}return v.value.addEventListener("reset",p),()=>{var m;(m=v.value)==null||m.removeEventListener("reset",p)}},{immediate:!0})}),()=>{let{name:p,modelValue:m,disabled:x,form:_,...h}=r,z={open:d.value===0,disabled:x,value:L.value};return e.h(e.Fragment,[...p!=null&&L.value!=null?ht({[p]:L.value}).map(([q,re])=>e.h(gr,fr({features:yt.Hidden,key:q,as:"input",type:"hidden",hidden:!0,readOnly:!0,form:_,disabled:x,name:q,value:re}))):[],Oe({ourProps:{},theirProps:{...t,...gt(h,["defaultValue","onUpdate:modelValue","horizontal","multiple","by"])},slot:z,slots:i,attrs:t,name:"Listbox"})])}}});e.defineComponent({name:"ListboxLabel",props:{as:{type:[Object,String],default:"label"},id:{type:String,default:null}},setup(r,{attrs:i,slots:t}){var u;let d=(u=r.id)!=null?u:`headlessui-listbox-label-${He()}`,l=Fe("ListboxLabel");function a(){var g;(g=fe(l.buttonRef))==null||g.focus({preventScroll:!0})}return()=>{let g={open:l.listboxState.value===0,disabled:l.disabled.value},{...y}=r,f={id:d,ref:l.labelRef,onClick:a};return Oe({ourProps:f,theirProps:y,slot:g,attrs:i,slots:t,name:"ListboxLabel"})}}});let Tr=e.defineComponent({name:"ListboxButton",props:{as:{type:[Object,String],default:"button"},id:{type:String,default:null}},setup(r,{attrs:i,slots:t,expose:u}){var d;let l=(d=r.id)!=null?d:`headlessui-listbox-button-${He()}`,a=Fe("ListboxButton");u({el:a.buttonRef,$el:a.buttonRef});function g(b){switch(b.key){case be.Space:case be.Enter:case be.ArrowDown:b.preventDefault(),a.openListbox(),e.nextTick(()=>{var B;(B=fe(a.optionsRef))==null||B.focus({preventScroll:!0}),a.value.value||a.goToOption(ke.First)});break;case be.ArrowUp:b.preventDefa