@process.co/ui 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/proc-app/proc-app/out/process-co/ui/dist/index.js","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/config-utils.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/tw-join.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/from-theme.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/validators.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/default-config.ts","../../../node_modules/.pnpm/tailwind-merge@3.1.0/node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/lib/utils.ts","../src/components/ui/input.tsx","../src/stores/expressionModeStore.ts","../src/hooks/useExpressionMode.ts","../src/components/expression/ExpressionEditor.tsx","../src/hooks/useASTParser.ts","../src/components/expression/ASTRenderer.tsx","../src/components/expression/ExpressionWrapper.tsx","../src/components/input.tsx","../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../src/components/ui/button.tsx"],"names":["v","v__default","useState","useCallback","useEffect","useMemo","useRef","create","Editor","FontAwesomeIcon","faExpand","faSpinner","Slot","r","e","t","f","n","Array","isArray","o","length","clsx","arguments","clsx_default","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","classParts","split","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","nextPart","get","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","classGroups","Map","processClassesRecursively","classGroup","forEach","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","Object","entries","key","path","currentClassPartObject","pathPart","has","set","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","value","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","MODIFIER_SEPARATOR_LENGTH","createParseClassName","prefix","experimentalParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","baseClassName","stripImportantModifier","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","startsWith","isExternal","endsWith","createSortModifiers","orderSensitiveModifiers","fromEntries","map","modifier","sortedModifiers","unsortedModifiers","sort","createConfigUtils","sortModifiers","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","result","originalClassName","variantModifier","modifierId","classId","includes","conflictGroups","i","group","twJoin","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","apply","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","Boolean","Number","isNaN","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isLabelShadow","testLabel","testValue","shouldMatchNoLabel","label","imageLabels","Set","sizeLabels","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleBlur","scaleOrigin","scaleRotate","scaleScale","scaleSkew","scaleTranslate","animate","aspect","blur","breakpoint","color","container","ease","font","leading","perspective","radius","shadow","spacing","text","tracking","columns","box","display","sr","float","clear","isolation","object","overflow","overscroll","position","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","content","items","self","p","px","py","ps","pe","pt","pr","pb","pl","m","mx","my","ms","me","mt","mr","mb","ml","size","w","screen","h","list","placeholder","decoration","indent","align","whitespace","break","hyphens","bg","repeat","linear","to","radial","conic","from","via","rounded","border","divide","outline","ring","opacity","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","transform","origin","translate","accent","appearance","caret","scheme","cursor","resize","scroll","snap","touch","select","fill","stroke","twMerge","cn","inputs","Input","wrapperClassName","type","required","error","props","Se","createElement","defaultState","expression","mode","isEditing","currentValue","isFullScreen","useExpressionModeStore","states","setState","fieldName","state","store","getState","switchToValue","currentState","switchToExpression","switchToEditor","setExpression","setEditing","setFullScreen","setCurrentValue","useExpressionMode","expr","editing","current","isExpressionMode","isEditorMode","inferTypeFromMonaco","editor","monaco","logPrefix","currentModel","wrappedCode","tempModel","client","exprIndex","quickInfo","extractedType","foundColon","typeParts","part","prevPart","typeString","console","log","hasTextFocus","getModel","getModelMarkers","resource","uri","some","marker","severity","MarkerSeverity","Error","createModel","languages","typescript","getTypeScriptWorker","getPositionAt","getQuickInfoAtPosition","toString","getOffsetAt","displayParts","kind","dispose","warn","InlineEditorOptions","fontSize","fontWeight","wordWrap","lineNumbers","lineNumbersMinChars","overviewRulerLanes","overviewRulerBorder","hideCursorInOverviewRuler","lineDecorationsWidth","glyphMargin","folding","scrollBeyondLastColumn","scrollbar","horizontal","vertical","alwaysConsumeMouseWheel","addExtraSpaceOnTop","autoFindInSelection","seedSearchStringFromSelection","minimap","enabled","wordBasedSuggestions","links","occurrencesHighlight","cursorStyle","renderLineHighlight","contextmenu","roundedSelection","hover","acceptSuggestionOnEnter","automaticLayout","fixedOverflowWidgets","padding","fontFamily","letterSpacing","lineHeight","FullPanelEditorOptions","readOnly","domReadOnly","InlineExpressionEditor","onChange","onBlur","onEnter","onTypeInferred","onValidationChange","context","editorRef","monacoRef","typeInferenceTimeoutRef","handleEditorWillMount","contextKeys","keys","javascriptDefaults","addExtraLib","handleEditorDidMount","updateOptions","getDomNode","findCommand","addCommand","KeyMod","CtrlCmd","KeyCode","KEY_F","enterKeyDisposable","onKeyDown","keyCode","Enter","shiftKey","preventDefault","stopPropagation","suggestWidget","_contentWidgets","isSuggestVisible","widget","_hidden","suggestWidgetVisible","_contextKeyService","getContextKeyValue","trigger","onDidPaste","endLineNumber","newContent","textModel","lineCount","getLineCount","getLineContent","setValue","setPosition","column","lineNumber","onDidBlurEditorText","getValue","onDidChangeModelContent","model","markers","hasErrors","clearTimeout","setTimeout","expressionToAnalyze","inferredType","markerChangeDisposable","onDidChangeMarkers","uris","F1","cursorDisposable","onDidChangeCursorPosition","window","requestAnimationFrame","focus","_inlineDisposables","disposables","handleEditorChange","newValue","React","height","language","onMount","beforeMount","width","loading","Fragment","icon","options","FullPanelExpressionEditor","onClose","handleFPEditorDidMount","getOption","EditorOption","escapeKeyDisposable","Escape","changeCount","changeDisposable","lastLineLength","getLineLength","_fullScreenDisposables","onClick","useASTParser","controlKey","ast","setAST","tokens","setTokens","dependencies","setDependencies","isLoading","setIsLoading","setError","requestIdRef","messageHandlerRef","controlKeyRef","navigator","serviceWorker","handleMessage","event","data","payload","id","receivedId","expectedId","receivedKey","expectedKey","addEventListener","removeEventListener","controller","postMessage","ASTRenderer","variant","showTokens","getNodeColor","renderInlineNode","node","depth","name","operator","callee","renderTreeNode","children","child","renderTokens","displayTokens","token","ExpressionWrapper","valuesLoading","onValueChange","onDependenciesChange","metadata","expressionContext","availableNodes","myInterface","contextTypeDefinitions","inlineEditor","editorClassName","expressionPlaceholder","evaluateExpression","expressionResult","isEvaluating","isExpressionValid","expectedType","expressionMetadata","setExpressionMetadata","originalValue","setOriginalValue","formatValue","parseFloat","parseInt","currentEditorValue","setCurrentEditorValue","currentExpressionValueExt","isExpressionValue","isInitialMount","exprValue","exprString","expressionMode","isMetadataOutOfSync","syncedMetadata","isParsing","parseError","dependencyList","dep","exists","typeScriptInferredType","setTypeScriptInferredType","handleTypeInferred","expressionHasNewlines","inferredReturnType","hasTypeMismatch","normalizedInferred","toLowerCase","normalizedExpected","internalExpressionResult","setInternalExpressionResult","internalIsEvaluating","setInternalIsEvaluating","isHovering","setIsHovering","internalIsExpressionValid","setInternalIsExpressionValid","syntax","security","validationState","setValidationState","hasExpressionError","isProgrammaticallyClearing","isSwitchingToFullScreen","isBlur","handleValidationChange","isValid","errors","prev","checkForMultiLine","hasNewlines","isLong","internalEvaluateExpression","message","validation","currentMetadata","currentExpressionValue","handleValueChange","handleExpressionChange","newExpression","handleExpressionBlur","forceBlur","handleModeChange","newMode","shouldBeFullScreen","editorMetadata","handleClear","localInput","setLocalInput","controlProps","onExpressionClick","hasError","renderContent","onMouseDown","title","JSON","stringify","onMouseEnter","onMouseLeave","htmlFor","localValue","setLocalValue","localMetadata","setLocalMetadata","be","val","onChangeExpression","expressionValue","target","falsyToString","cx","cva","base","_config_compoundVariants","variants","class","defaultVariants","getVariantClassNames","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","compoundVariants","cvClass","cvClassName","compoundVariantOptions","every","buttonVariants","default","destructive","secondary","ghost","link","sm","lg","Button","asChild","Ft","Ii","Ti","Pr"],"mappings":"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","sourcesContent":["import*as v from'react';import v__default,{useState,useCallback,useEffect,useMemo,useRef}from'react';import {create}from'zustand';import {Editor}from'@monaco-editor/react';import {FontAwesomeIcon}from'@fortawesome/react-fontawesome';import {faExpand,faSpinner}from'@fortawesome/pro-regular-svg-icons';import {Slot}from'@radix-ui/react-slot';function tt(e){var t,r,n=\"\";if(typeof e==\"string\"||typeof e==\"number\")n+=e;else if(typeof e==\"object\")if(Array.isArray(e)){var s=e.length;for(t=0;t<s;t++)e[t]&&(r=tt(e[t]))&&(n&&(n+=\" \"),n+=r);}else for(r in e)e[r]&&(n&&(n+=\" \"),n+=r);return n}function we(){for(var e,t,r=0,n=\"\",s=arguments.length;r<s;r++)(e=arguments[r])&&(t=tt(e))&&(n&&(n+=\" \"),n+=t);return n}var rt=we;var je=\"-\",_t=e=>{let t=Gt(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:n}=e;return {getClassGroupId:p=>{let x=p.split(je);return x[0]===\"\"&&x.length!==1&&x.shift(),ot(x,t)||jt(p)},getConflictingClassGroupIds:(p,x)=>{let d=r[p]||[];return x&&n[p]?[...d,...n[p]]:d}}},ot=(e,t)=>{if(e.length===0)return t.classGroupId;let r=e[0],n=t.nextPart.get(r),s=n?ot(e.slice(1),n):void 0;if(s)return s;if(t.validators.length===0)return;let u=e.join(je);return t.validators.find(({validator:p})=>p(u))?.classGroupId},it=/^\\[(.+)\\]$/,jt=e=>{if(it.test(e)){let t=it.exec(e)[1],r=t?.substring(0,t.indexOf(\":\"));if(r)return \"arbitrary..\"+r}},Gt=e=>{let{theme:t,classGroups:r}=e,n={nextPart:new Map,validators:[]};for(let s in r)$e(r[s],n,s,t);return n},$e=(e,t,r,n)=>{e.forEach(s=>{if(typeof s==\"string\"){let u=s===\"\"?t:nt(t,s);u.classGroupId=r;return}if(typeof s==\"function\"){if(Kt(s)){$e(s(n),t,r,n);return}t.validators.push({validator:s,classGroupId:r});return}Object.entries(s).forEach(([u,p])=>{$e(p,nt(t,u),r,n);});});},nt=(e,t)=>{let r=e;return t.split(je).forEach(n=>{r.nextPart.has(n)||r.nextPart.set(n,{nextPart:new Map,validators:[]}),r=r.nextPart.get(n);}),r},Kt=e=>e.isThemeGetter,Bt=e=>{if(e<1)return {get:()=>{},set:()=>{}};let t=0,r=new Map,n=new Map,s=(u,p)=>{r.set(u,p),t++,t>e&&(t=0,n=r,r=new Map);};return {get(u){let p=r.get(u);if(p!==void 0)return p;if((p=n.get(u))!==void 0)return s(u,p),p},set(u,p){r.has(u)?r.set(u,p):s(u,p);}}},We=\"!\",_e=\":\",Ut=_e.length,Ht=e=>{let{prefix:t,experimentalParseClassName:r}=e,n=s=>{let u=[],p=0,x=0,d=0,h;for(let g=0;g<s.length;g++){let l=s[g];if(p===0&&x===0){if(l===_e){u.push(s.slice(d,g)),d=g+Ut;continue}if(l===\"/\"){h=g;continue}}l===\"[\"?p++:l===\"]\"?p--:l===\"(\"?x++:l===\")\"&&x--;}let i=u.length===0?s:s.substring(d),c=qt(i),T=c!==i,I=h&&h>d?h-d:void 0;return {modifiers:u,hasImportantModifier:T,baseClassName:c,maybePostfixModifierPosition:I}};if(t){let s=t+_e,u=n;n=p=>p.startsWith(s)?u(p.substring(s.length)):{isExternal:true,modifiers:[],hasImportantModifier:false,baseClassName:p,maybePostfixModifierPosition:void 0};}if(r){let s=n;n=u=>r({className:u,parseClassName:s});}return n},qt=e=>e.endsWith(We)?e.substring(0,e.length-1):e.startsWith(We)?e.substring(1):e,Jt=e=>{let t=Object.fromEntries(e.orderSensitiveModifiers.map(n=>[n,true]));return n=>{if(n.length<=1)return n;let s=[],u=[];return n.forEach(p=>{p[0]===\"[\"||t[p]?(s.push(...u.sort(),p),u=[]):u.push(p);}),s.push(...u.sort()),s}},Qt=e=>({cache:Bt(e.cacheSize),parseClassName:Ht(e),sortModifiers:Jt(e),..._t(e)}),Zt=/\\s+/,Xt=(e,t)=>{let{parseClassName:r,getClassGroupId:n,getConflictingClassGroupIds:s,sortModifiers:u}=t,p=[],x=e.trim().split(Zt),d=\"\";for(let h=x.length-1;h>=0;h-=1){let i=x[h],{isExternal:c,modifiers:T,hasImportantModifier:I,baseClassName:g,maybePostfixModifierPosition:l}=r(i);if(c){d=i+(d.length>0?\" \"+d:d);continue}let E=!!l,z=n(E?g.substring(0,l):g);if(!z){if(!E){d=i+(d.length>0?\" \"+d:d);continue}if(z=n(g),!z){d=i+(d.length>0?\" \"+d:d);continue}E=false;}let D=u(T).join(\":\"),V=I?D+We:D,W=V+z;if(p.includes(W))continue;p.push(W);let G=s(z,E);for(let o=0;o<G.length;++o){let y=G[o];p.push(V+y);}d=i+(d.length>0?\" \"+d:d);}return d};function Yt(){let e=0,t,r,n=\"\";for(;e<arguments.length;)(t=arguments[e++])&&(r=at(t))&&(n&&(n+=\" \"),n+=r);return n}var at=e=>{if(typeof e==\"string\")return e;let t,r=\"\";for(let n=0;n<e.length;n++)e[n]&&(t=at(e[n]))&&(r&&(r+=\" \"),r+=t);return r};function Rt(e,...t){let r,n,s,u=p;function p(d){let h=t.reduce((i,c)=>c(i),e());return r=Qt(h),n=r.cache.get,s=r.cache.set,u=x,x(d)}function x(d){let h=n(d);if(h)return h;let i=Xt(d,r);return s(d,i),i}return function(){return u(Yt.apply(null,arguments))}}var $=e=>{let t=r=>r[e]||[];return t.isThemeGetter=true,t},lt=/^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i,ut=/^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i,er=/^\\d+\\/\\d+$/,tr=/^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/,rr=/\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/,ir=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/,nr=/^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/,sr=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/,ge=e=>er.test(e),S=e=>!!e&&!Number.isNaN(Number(e)),ie=e=>!!e&&Number.isInteger(Number(e)),st=e=>e.endsWith(\"%\")&&S(e.slice(0,-1)),ne=e=>tr.test(e),or=()=>true,ar=e=>rr.test(e)&&!ir.test(e),Ge=()=>false,lr=e=>nr.test(e),ur=e=>sr.test(e),cr=e=>!f(e)&&!m(e),dr=e=>fe(e,pt,Ge),f=e=>lt.test(e),ue=e=>fe(e,gt,ar),Oe=e=>fe(e,Er,S),pr=e=>fe(e,ct,Ge),gr=e=>fe(e,dt,ur),fr=e=>fe(e,Ge,lr),m=e=>ut.test(e),Ee=e=>me(e,gt),mr=e=>me(e,Sr),xr=e=>me(e,ct),br=e=>me(e,pt),yr=e=>me(e,dt),hr=e=>me(e,Tr,true),fe=(e,t,r)=>{let n=lt.exec(e);return n?n[1]?t(n[1]):r(n[2]):false},me=(e,t,r=false)=>{let n=ut.exec(e);return n?n[1]?t(n[1]):r:false},ct=e=>e===\"position\",vr=new Set([\"image\",\"url\"]),dt=e=>vr.has(e),wr=new Set([\"length\",\"size\",\"percentage\"]),pt=e=>wr.has(e),gt=e=>e===\"length\",Er=e=>e===\"number\",Sr=e=>e===\"family-name\",Tr=e=>e===\"shadow\";var Nr=()=>{let e=$(\"color\"),t=$(\"font\"),r=$(\"text\"),n=$(\"font-weight\"),s=$(\"tracking\"),u=$(\"leading\"),p=$(\"breakpoint\"),x=$(\"container\"),d=$(\"spacing\"),h=$(\"radius\"),i=$(\"shadow\"),c=$(\"inset-shadow\"),T=$(\"drop-shadow\"),I=$(\"blur\"),g=$(\"perspective\"),l=$(\"aspect\"),E=$(\"ease\"),z=$(\"animate\"),D=()=>[\"auto\",\"avoid\",\"all\",\"avoid-page\",\"page\",\"left\",\"right\",\"column\"],V=()=>[\"bottom\",\"center\",\"left\",\"left-bottom\",\"left-top\",\"right\",\"right-bottom\",\"right-top\",\"top\"],W=()=>[\"auto\",\"hidden\",\"clip\",\"visible\",\"scroll\"],G=()=>[\"auto\",\"contain\",\"none\"],o=()=>[m,f,d],y=()=>[ge,\"full\",\"auto\",...o()],N=()=>[ie,\"none\",\"subgrid\",m,f],F=()=>[\"auto\",{span:[\"full\",ie,m,f]},ie,m,f],A=()=>[ie,\"auto\",m,f],k=()=>[\"auto\",\"min\",\"max\",\"fr\",m,f],B=()=>[\"start\",\"end\",\"center\",\"between\",\"around\",\"evenly\",\"stretch\",\"baseline\"],O=()=>[\"start\",\"end\",\"center\",\"stretch\"],Z=()=>[\"auto\",...o()],R=()=>[ge,\"auto\",\"full\",\"dvw\",\"dvh\",\"lvw\",\"lvh\",\"svw\",\"svh\",\"min\",\"max\",\"fit\",...o()],M=()=>[e,m,f],ye=()=>[st,Ee,ue],P=()=>[\"\",\"none\",\"full\",h,m,f],a=()=>[\"\",S,Ee,ue],U=()=>[\"solid\",\"dashed\",\"dotted\",\"double\"],he=()=>[\"normal\",\"multiply\",\"screen\",\"overlay\",\"darken\",\"lighten\",\"color-dodge\",\"color-burn\",\"hard-light\",\"soft-light\",\"difference\",\"exclusion\",\"hue\",\"saturation\",\"color\",\"luminosity\"],q=()=>[\"\",\"none\",I,m,f],ve=()=>[\"center\",\"top\",\"top-right\",\"right\",\"bottom-right\",\"bottom\",\"bottom-left\",\"left\",\"top-left\",m,f],J=()=>[\"none\",S,m,f],te=()=>[\"none\",S,m,f],ae=()=>[S,m,f],de=()=>[ge,\"full\",...o()];return {cacheSize:500,theme:{animate:[\"spin\",\"ping\",\"pulse\",\"bounce\"],aspect:[\"video\"],blur:[ne],breakpoint:[ne],color:[or],container:[ne],\"drop-shadow\":[ne],ease:[\"in\",\"out\",\"in-out\"],font:[cr],\"font-weight\":[\"thin\",\"extralight\",\"light\",\"normal\",\"medium\",\"semibold\",\"bold\",\"extrabold\",\"black\"],\"inset-shadow\":[ne],leading:[\"none\",\"tight\",\"snug\",\"normal\",\"relaxed\",\"loose\"],perspective:[\"dramatic\",\"near\",\"normal\",\"midrange\",\"distant\",\"none\"],radius:[ne],shadow:[ne],spacing:[\"px\",S],text:[ne],tracking:[\"tighter\",\"tight\",\"normal\",\"wide\",\"wider\",\"widest\"]},classGroups:{aspect:[{aspect:[\"auto\",\"square\",ge,f,m,l]}],container:[\"container\"],columns:[{columns:[S,f,m,x]}],\"break-after\":[{\"break-after\":D()}],\"break-before\":[{\"break-before\":D()}],\"break-inside\":[{\"break-inside\":[\"auto\",\"avoid\",\"avoid-page\",\"avoid-column\"]}],\"box-decoration\":[{\"box-decoration\":[\"slice\",\"clone\"]}],box:[{box:[\"border\",\"content\"]}],display:[\"block\",\"inline-block\",\"inline\",\"flex\",\"inline-flex\",\"table\",\"inline-table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row-group\",\"table-row\",\"flow-root\",\"grid\",\"inline-grid\",\"contents\",\"list-item\",\"hidden\"],sr:[\"sr-only\",\"not-sr-only\"],float:[{float:[\"right\",\"left\",\"none\",\"start\",\"end\"]}],clear:[{clear:[\"left\",\"right\",\"both\",\"none\",\"start\",\"end\"]}],isolation:[\"isolate\",\"isolation-auto\"],\"object-fit\":[{object:[\"contain\",\"cover\",\"fill\",\"none\",\"scale-down\"]}],\"object-position\":[{object:[...V(),f,m]}],overflow:[{overflow:W()}],\"overflow-x\":[{\"overflow-x\":W()}],\"overflow-y\":[{\"overflow-y\":W()}],overscroll:[{overscroll:G()}],\"overscroll-x\":[{\"overscroll-x\":G()}],\"overscroll-y\":[{\"overscroll-y\":G()}],position:[\"static\",\"fixed\",\"absolute\",\"relative\",\"sticky\"],inset:[{inset:y()}],\"inset-x\":[{\"inset-x\":y()}],\"inset-y\":[{\"inset-y\":y()}],start:[{start:y()}],end:[{end:y()}],top:[{top:y()}],right:[{right:y()}],bottom:[{bottom:y()}],left:[{left:y()}],visibility:[\"visible\",\"invisible\",\"collapse\"],z:[{z:[ie,\"auto\",m,f]}],basis:[{basis:[ge,\"full\",\"auto\",x,...o()]}],\"flex-direction\":[{flex:[\"row\",\"row-reverse\",\"col\",\"col-reverse\"]}],\"flex-wrap\":[{flex:[\"nowrap\",\"wrap\",\"wrap-reverse\"]}],flex:[{flex:[S,ge,\"auto\",\"initial\",\"none\",f]}],grow:[{grow:[\"\",S,m,f]}],shrink:[{shrink:[\"\",S,m,f]}],order:[{order:[ie,\"first\",\"last\",\"none\",m,f]}],\"grid-cols\":[{\"grid-cols\":N()}],\"col-start-end\":[{col:F()}],\"col-start\":[{\"col-start\":A()}],\"col-end\":[{\"col-end\":A()}],\"grid-rows\":[{\"grid-rows\":N()}],\"row-start-end\":[{row:F()}],\"row-start\":[{\"row-start\":A()}],\"row-end\":[{\"row-end\":A()}],\"grid-flow\":[{\"grid-flow\":[\"row\",\"col\",\"dense\",\"row-dense\",\"col-dense\"]}],\"auto-cols\":[{\"auto-cols\":k()}],\"auto-rows\":[{\"auto-rows\":k()}],gap:[{gap:o()}],\"gap-x\":[{\"gap-x\":o()}],\"gap-y\":[{\"gap-y\":o()}],\"justify-content\":[{justify:[...B(),\"normal\"]}],\"justify-items\":[{\"justify-items\":[...O(),\"normal\"]}],\"justify-self\":[{\"justify-self\":[\"auto\",...O()]}],\"align-content\":[{content:[\"normal\",...B()]}],\"align-items\":[{items:[...O(),\"baseline\"]}],\"align-self\":[{self:[\"auto\",...O(),\"baseline\"]}],\"place-content\":[{\"place-content\":B()}],\"place-items\":[{\"place-items\":[...O(),\"baseline\"]}],\"place-self\":[{\"place-self\":[\"auto\",...O()]}],p:[{p:o()}],px:[{px:o()}],py:[{py:o()}],ps:[{ps:o()}],pe:[{pe:o()}],pt:[{pt:o()}],pr:[{pr:o()}],pb:[{pb:o()}],pl:[{pl:o()}],m:[{m:Z()}],mx:[{mx:Z()}],my:[{my:Z()}],ms:[{ms:Z()}],me:[{me:Z()}],mt:[{mt:Z()}],mr:[{mr:Z()}],mb:[{mb:Z()}],ml:[{ml:Z()}],\"space-x\":[{\"space-x\":o()}],\"space-x-reverse\":[\"space-x-reverse\"],\"space-y\":[{\"space-y\":o()}],\"space-y-reverse\":[\"space-y-reverse\"],size:[{size:R()}],w:[{w:[x,\"screen\",...R()]}],\"min-w\":[{\"min-w\":[x,\"screen\",\"none\",...R()]}],\"max-w\":[{\"max-w\":[x,\"screen\",\"none\",\"prose\",{screen:[p]},...R()]}],h:[{h:[\"screen\",...R()]}],\"min-h\":[{\"min-h\":[\"screen\",\"none\",...R()]}],\"max-h\":[{\"max-h\":[\"screen\",...R()]}],\"font-size\":[{text:[\"base\",r,Ee,ue]}],\"font-smoothing\":[\"antialiased\",\"subpixel-antialiased\"],\"font-style\":[\"italic\",\"not-italic\"],\"font-weight\":[{font:[n,m,Oe]}],\"font-stretch\":[{\"font-stretch\":[\"ultra-condensed\",\"extra-condensed\",\"condensed\",\"semi-condensed\",\"normal\",\"semi-expanded\",\"expanded\",\"extra-expanded\",\"ultra-expanded\",st,f]}],\"font-family\":[{font:[mr,f,t]}],\"fvn-normal\":[\"normal-nums\"],\"fvn-ordinal\":[\"ordinal\"],\"fvn-slashed-zero\":[\"slashed-zero\"],\"fvn-figure\":[\"lining-nums\",\"oldstyle-nums\"],\"fvn-spacing\":[\"proportional-nums\",\"tabular-nums\"],\"fvn-fraction\":[\"diagonal-fractions\",\"stacked-fractions\"],tracking:[{tracking:[s,m,f]}],\"line-clamp\":[{\"line-clamp\":[S,\"none\",m,Oe]}],leading:[{leading:[u,...o()]}],\"list-image\":[{\"list-image\":[\"none\",m,f]}],\"list-style-position\":[{list:[\"inside\",\"outside\"]}],\"list-style-type\":[{list:[\"disc\",\"decimal\",\"none\",m,f]}],\"text-alignment\":[{text:[\"left\",\"center\",\"right\",\"justify\",\"start\",\"end\"]}],\"placeholder-color\":[{placeholder:M()}],\"text-color\":[{text:M()}],\"text-decoration\":[\"underline\",\"overline\",\"line-through\",\"no-underline\"],\"text-decoration-style\":[{decoration:[...U(),\"wavy\"]}],\"text-decoration-thickness\":[{decoration:[S,\"from-font\",\"auto\",m,ue]}],\"text-decoration-color\":[{decoration:M()}],\"underline-offset\":[{\"underline-offset\":[S,\"auto\",m,f]}],\"text-transform\":[\"uppercase\",\"lowercase\",\"capitalize\",\"normal-case\"],\"text-overflow\":[\"truncate\",\"text-ellipsis\",\"text-clip\"],\"text-wrap\":[{text:[\"wrap\",\"nowrap\",\"balance\",\"pretty\"]}],indent:[{indent:o()}],\"vertical-align\":[{align:[\"baseline\",\"top\",\"middle\",\"bottom\",\"text-top\",\"text-bottom\",\"sub\",\"super\",m,f]}],whitespace:[{whitespace:[\"normal\",\"nowrap\",\"pre\",\"pre-line\",\"pre-wrap\",\"break-spaces\"]}],break:[{break:[\"normal\",\"words\",\"all\",\"keep\"]}],hyphens:[{hyphens:[\"none\",\"manual\",\"auto\"]}],content:[{content:[\"none\",m,f]}],\"bg-attachment\":[{bg:[\"fixed\",\"local\",\"scroll\"]}],\"bg-clip\":[{\"bg-clip\":[\"border\",\"padding\",\"content\",\"text\"]}],\"bg-origin\":[{\"bg-origin\":[\"border\",\"padding\",\"content\"]}],\"bg-position\":[{bg:[...V(),xr,pr]}],\"bg-repeat\":[{bg:[\"no-repeat\",{repeat:[\"\",\"x\",\"y\",\"space\",\"round\"]}]}],\"bg-size\":[{bg:[\"auto\",\"cover\",\"contain\",br,dr]}],\"bg-image\":[{bg:[\"none\",{linear:[{to:[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"]},ie,m,f],radial:[\"\",m,f],conic:[ie,m,f]},yr,gr]}],\"bg-color\":[{bg:M()}],\"gradient-from-pos\":[{from:ye()}],\"gradient-via-pos\":[{via:ye()}],\"gradient-to-pos\":[{to:ye()}],\"gradient-from\":[{from:M()}],\"gradient-via\":[{via:M()}],\"gradient-to\":[{to:M()}],rounded:[{rounded:P()}],\"rounded-s\":[{\"rounded-s\":P()}],\"rounded-e\":[{\"rounded-e\":P()}],\"rounded-t\":[{\"rounded-t\":P()}],\"rounded-r\":[{\"rounded-r\":P()}],\"rounded-b\":[{\"rounded-b\":P()}],\"rounded-l\":[{\"rounded-l\":P()}],\"rounded-ss\":[{\"rounded-ss\":P()}],\"rounded-se\":[{\"rounded-se\":P()}],\"rounded-ee\":[{\"rounded-ee\":P()}],\"rounded-es\":[{\"rounded-es\":P()}],\"rounded-tl\":[{\"rounded-tl\":P()}],\"rounded-tr\":[{\"rounded-tr\":P()}],\"rounded-br\":[{\"rounded-br\":P()}],\"rounded-bl\":[{\"rounded-bl\":P()}],\"border-w\":[{border:a()}],\"border-w-x\":[{\"border-x\":a()}],\"border-w-y\":[{\"border-y\":a()}],\"border-w-s\":[{\"border-s\":a()}],\"border-w-e\":[{\"border-e\":a()}],\"border-w-t\":[{\"border-t\":a()}],\"border-w-r\":[{\"border-r\":a()}],\"border-w-b\":[{\"border-b\":a()}],\"border-w-l\":[{\"border-l\":a()}],\"divide-x\":[{\"divide-x\":a()}],\"divide-x-reverse\":[\"divide-x-reverse\"],\"divide-y\":[{\"divide-y\":a()}],\"divide-y-reverse\":[\"divide-y-reverse\"],\"border-style\":[{border:[...U(),\"hidden\",\"none\"]}],\"divide-style\":[{divide:[...U(),\"hidden\",\"none\"]}],\"border-color\":[{border:M()}],\"border-color-x\":[{\"border-x\":M()}],\"border-color-y\":[{\"border-y\":M()}],\"border-color-s\":[{\"border-s\":M()}],\"border-color-e\":[{\"border-e\":M()}],\"border-color-t\":[{\"border-t\":M()}],\"border-color-r\":[{\"border-r\":M()}],\"border-color-b\":[{\"border-b\":M()}],\"border-color-l\":[{\"border-l\":M()}],\"divide-color\":[{divide:M()}],\"outline-style\":[{outline:[...U(),\"none\",\"hidden\"]}],\"outline-offset\":[{\"outline-offset\":[S,m,f]}],\"outline-w\":[{outline:[\"\",S,Ee,ue]}],\"outline-color\":[{outline:[e]}],shadow:[{shadow:[\"\",\"none\",i,hr,fr]}],\"shadow-color\":[{shadow:M()}],\"inset-shadow\":[{\"inset-shadow\":[\"none\",m,f,c]}],\"inset-shadow-color\":[{\"inset-shadow\":M()}],\"ring-w\":[{ring:a()}],\"ring-w-inset\":[\"ring-inset\"],\"ring-color\":[{ring:M()}],\"ring-offset-w\":[{\"ring-offset\":[S,ue]}],\"ring-offset-color\":[{\"ring-offset\":M()}],\"inset-ring-w\":[{\"inset-ring\":a()}],\"inset-ring-color\":[{\"inset-ring\":M()}],opacity:[{opacity:[S,m,f]}],\"mix-blend\":[{\"mix-blend\":[...he(),\"plus-darker\",\"plus-lighter\"]}],\"bg-blend\":[{\"bg-blend\":he()}],filter:[{filter:[\"\",\"none\",m,f]}],blur:[{blur:q()}],brightness:[{brightness:[S,m,f]}],contrast:[{contrast:[S,m,f]}],\"drop-shadow\":[{\"drop-shadow\":[\"\",\"none\",T,m,f]}],grayscale:[{grayscale:[\"\",S,m,f]}],\"hue-rotate\":[{\"hue-rotate\":[S,m,f]}],invert:[{invert:[\"\",S,m,f]}],saturate:[{saturate:[S,m,f]}],sepia:[{sepia:[\"\",S,m,f]}],\"backdrop-filter\":[{\"backdrop-filter\":[\"\",\"none\",m,f]}],\"backdrop-blur\":[{\"backdrop-blur\":q()}],\"backdrop-brightness\":[{\"backdrop-brightness\":[S,m,f]}],\"backdrop-contrast\":[{\"backdrop-contrast\":[S,m,f]}],\"backdrop-grayscale\":[{\"backdrop-grayscale\":[\"\",S,m,f]}],\"backdrop-hue-rotate\":[{\"backdrop-hue-rotate\":[S,m,f]}],\"backdrop-invert\":[{\"backdrop-invert\":[\"\",S,m,f]}],\"backdrop-opacity\":[{\"backdrop-opacity\":[S,m,f]}],\"backdrop-saturate\":[{\"backdrop-saturate\":[S,m,f]}],\"backdrop-sepia\":[{\"backdrop-sepia\":[\"\",S,m,f]}],\"border-collapse\":[{border:[\"collapse\",\"separate\"]}],\"border-spacing\":[{\"border-spacing\":o()}],\"border-spacing-x\":[{\"border-spacing-x\":o()}],\"border-spacing-y\":[{\"border-spacing-y\":o()}],\"table-layout\":[{table:[\"auto\",\"fixed\"]}],caption:[{caption:[\"top\",\"bottom\"]}],transition:[{transition:[\"\",\"all\",\"colors\",\"opacity\",\"shadow\",\"transform\",\"none\",m,f]}],\"transition-behavior\":[{transition:[\"normal\",\"discrete\"]}],duration:[{duration:[S,\"initial\",m,f]}],ease:[{ease:[\"linear\",\"initial\",E,m,f]}],delay:[{delay:[S,m,f]}],animate:[{animate:[\"none\",z,m,f]}],backface:[{backface:[\"hidden\",\"visible\"]}],perspective:[{perspective:[g,m,f]}],\"perspective-origin\":[{\"perspective-origin\":ve()}],rotate:[{rotate:J()}],\"rotate-x\":[{\"rotate-x\":J()}],\"rotate-y\":[{\"rotate-y\":J()}],\"rotate-z\":[{\"rotate-z\":J()}],scale:[{scale:te()}],\"scale-x\":[{\"scale-x\":te()}],\"scale-y\":[{\"scale-y\":te()}],\"scale-z\":[{\"scale-z\":te()}],\"scale-3d\":[\"scale-3d\"],skew:[{skew:ae()}],\"skew-x\":[{\"skew-x\":ae()}],\"skew-y\":[{\"skew-y\":ae()}],transform:[{transform:[m,f,\"\",\"none\",\"gpu\",\"cpu\"]}],\"transform-origin\":[{origin:ve()}],\"transform-style\":[{transform:[\"3d\",\"flat\"]}],translate:[{translate:de()}],\"translate-x\":[{\"translate-x\":de()}],\"translate-y\":[{\"translate-y\":de()}],\"translate-z\":[{\"translate-z\":de()}],\"translate-none\":[\"translate-none\"],accent:[{accent:M()}],appearance:[{appearance:[\"none\",\"auto\"]}],\"caret-color\":[{caret:M()}],\"color-scheme\":[{scheme:[\"normal\",\"dark\",\"light\",\"light-dark\",\"only-dark\",\"only-light\"]}],cursor:[{cursor:[\"auto\",\"default\",\"pointer\",\"wait\",\"text\",\"move\",\"help\",\"not-allowed\",\"none\",\"context-menu\",\"progress\",\"cell\",\"crosshair\",\"vertical-text\",\"alias\",\"copy\",\"no-drop\",\"grab\",\"grabbing\",\"all-scroll\",\"col-resize\",\"row-resize\",\"n-resize\",\"e-resize\",\"s-resize\",\"w-resize\",\"ne-resize\",\"nw-resize\",\"se-resize\",\"sw-resize\",\"ew-resize\",\"ns-resize\",\"nesw-resize\",\"nwse-resize\",\"zoom-in\",\"zoom-out\",m,f]}],\"field-sizing\":[{\"field-sizing\":[\"fixed\",\"content\"]}],\"pointer-events\":[{\"pointer-events\":[\"auto\",\"none\"]}],resize:[{resize:[\"none\",\"\",\"y\",\"x\"]}],\"scroll-behavior\":[{scroll:[\"auto\",\"smooth\"]}],\"scroll-m\":[{\"scroll-m\":o()}],\"scroll-mx\":[{\"scroll-mx\":o()}],\"scroll-my\":[{\"scroll-my\":o()}],\"scroll-ms\":[{\"scroll-ms\":o()}],\"scroll-me\":[{\"scroll-me\":o()}],\"scroll-mt\":[{\"scroll-mt\":o()}],\"scroll-mr\":[{\"scroll-mr\":o()}],\"scroll-mb\":[{\"scroll-mb\":o()}],\"scroll-ml\":[{\"scroll-ml\":o()}],\"scroll-p\":[{\"scroll-p\":o()}],\"scroll-px\":[{\"scroll-px\":o()}],\"scroll-py\":[{\"scroll-py\":o()}],\"scroll-ps\":[{\"scroll-ps\":o()}],\"scroll-pe\":[{\"scroll-pe\":o()}],\"scroll-pt\":[{\"scroll-pt\":o()}],\"scroll-pr\":[{\"scroll-pr\":o()}],\"scroll-pb\":[{\"scroll-pb\":o()}],\"scroll-pl\":[{\"scroll-pl\":o()}],\"snap-align\":[{snap:[\"start\",\"end\",\"center\",\"align-none\"]}],\"snap-stop\":[{snap:[\"normal\",\"always\"]}],\"snap-type\":[{snap:[\"none\",\"x\",\"y\",\"both\"]}],\"snap-strictness\":[{snap:[\"mandatory\",\"proximity\"]}],touch:[{touch:[\"auto\",\"none\",\"manipulation\"]}],\"touch-x\":[{\"touch-pan\":[\"x\",\"left\",\"right\"]}],\"touch-y\":[{\"touch-pan\":[\"y\",\"up\",\"down\"]}],\"touch-pz\":[\"touch-pinch-zoom\"],select:[{select:[\"none\",\"text\",\"all\",\"auto\"]}],\"will-change\":[{\"will-change\":[\"auto\",\"scroll\",\"contents\",\"transform\",m,f]}],fill:[{fill:[\"none\",...M()]}],\"stroke-w\":[{stroke:[S,Ee,ue,Oe]}],stroke:[{stroke:[\"none\",...M()]}],\"forced-color-adjust\":[{\"forced-color-adjust\":[\"auto\",\"none\"]}]},conflictingClassGroups:{overflow:[\"overflow-x\",\"overflow-y\"],overscroll:[\"overscroll-x\",\"overscroll-y\"],inset:[\"inset-x\",\"inset-y\",\"start\",\"end\",\"top\",\"right\",\"bottom\",\"left\"],\"inset-x\":[\"right\",\"left\"],\"inset-y\":[\"top\",\"bottom\"],flex:[\"basis\",\"grow\",\"shrink\"],gap:[\"gap-x\",\"gap-y\"],p:[\"px\",\"py\",\"ps\",\"pe\",\"pt\",\"pr\",\"pb\",\"pl\"],px:[\"pr\",\"pl\"],py:[\"pt\",\"pb\"],m:[\"mx\",\"my\",\"ms\",\"me\",\"mt\",\"mr\",\"mb\",\"ml\"],mx:[\"mr\",\"ml\"],my:[\"mt\",\"mb\"],size:[\"w\",\"h\"],\"font-size\":[\"leading\"],\"fvn-normal\":[\"fvn-ordinal\",\"fvn-slashed-zero\",\"fvn-figure\",\"fvn-spacing\",\"fvn-fraction\"],\"fvn-ordinal\":[\"fvn-normal\"],\"fvn-slashed-zero\":[\"fvn-normal\"],\"fvn-figure\":[\"fvn-normal\"],\"fvn-spacing\":[\"fvn-normal\"],\"fvn-fraction\":[\"fvn-normal\"],\"line-clamp\":[\"display\",\"overflow\"],rounded:[\"rounded-s\",\"rounded-e\",\"rounded-t\",\"rounded-r\",\"rounded-b\",\"rounded-l\",\"rounded-ss\",\"rounded-se\",\"rounded-ee\",\"rounded-es\",\"rounded-tl\",\"rounded-tr\",\"rounded-br\",\"rounded-bl\"],\"rounded-s\":[\"rounded-ss\",\"rounded-es\"],\"rounded-e\":[\"rounded-se\",\"rounded-ee\"],\"rounded-t\":[\"rounded-tl\",\"rounded-tr\"],\"rounded-r\":[\"rounded-tr\",\"rounded-br\"],\"rounded-b\":[\"rounded-br\",\"rounded-bl\"],\"rounded-l\":[\"rounded-tl\",\"rounded-bl\"],\"border-spacing\":[\"border-spacing-x\",\"border-spacing-y\"],\"border-w\":[\"border-w-s\",\"border-w-e\",\"border-w-t\",\"border-w-r\",\"border-w-b\",\"border-w-l\"],\"border-w-x\":[\"border-w-r\",\"border-w-l\"],\"border-w-y\":[\"border-w-t\",\"border-w-b\"],\"border-color\":[\"border-color-s\",\"border-color-e\",\"border-color-t\",\"border-color-r\",\"border-color-b\",\"border-color-l\"],\"border-color-x\":[\"border-color-r\",\"border-color-l\"],\"border-color-y\":[\"border-color-t\",\"border-color-b\"],translate:[\"translate-x\",\"translate-y\",\"translate-none\"],\"translate-none\":[\"translate\",\"translate-x\",\"translate-y\",\"translate-z\"],\"scroll-m\":[\"scroll-mx\",\"scroll-my\",\"scroll-ms\",\"scroll-me\",\"scroll-mt\",\"scroll-mr\",\"scroll-mb\",\"scroll-ml\"],\"scroll-mx\":[\"scroll-mr\",\"scroll-ml\"],\"scroll-my\":[\"scroll-mt\",\"scroll-mb\"],\"scroll-p\":[\"scroll-px\",\"scroll-py\",\"scroll-ps\",\"scroll-pe\",\"scroll-pt\",\"scroll-pr\",\"scroll-pb\",\"scroll-pl\"],\"scroll-px\":[\"scroll-pr\",\"scroll-pl\"],\"scroll-py\":[\"scroll-pt\",\"scroll-pb\"],touch:[\"touch-x\",\"touch-y\",\"touch-pz\"],\"touch-x\":[\"touch\"],\"touch-y\":[\"touch\"],\"touch-pz\":[\"touch\"]},conflictingClassGroupModifiers:{\"font-size\":[\"leading\"]},orderSensitiveModifiers:[\"before\",\"after\",\"placeholder\",\"file\",\"marker\",\"selection\",\"first-line\",\"first-letter\",\"backdrop\",\"*\",\"**\"]}};var ft=Rt(Nr);function L(...e){return ft(we(e))}function mt({className:e,wrapperClassName:t,type:r,required:n,error:s,...u}){return v.createElement(\"div\",{className:L(\"uii:relative\",t)},v.createElement(\"input\",{\"aria-invalid\":s,type:r,\"data-slot\":\"input\",className:L(\"uii:border-input uii:file:text-foreground uii:placeholder:text-muted-foreground uii:selection:bg-primary uii:selection:text-primary-foreground uii:flex uii:h-9 uii:w-full uii:min-w-0 uii:rounded-sm uii:border uii:bg-transparent uii:px-3 uii:py-1 uii:text-base uii:shadow-xs uii:transition-[color,box-shadow] uii:outline-none uii:file:inline-flex uii:file:h-7 uii:file:border-0 uii:file:bg-transparent uii:file:text-sm uii:file:font-medium uii:disabled:pointer-events-none uii:disabled:cursor-not-allowed uii:disabled:opacity-50 uii:md:text-sm\",\"uii:focus-visible:border-ring uii:focus-visible:ring-ring/50 uii:focus-visible:ring-[3px]\",\"uii:aria-invalid:ring-destructive/20 uii:dark:aria-invalid:ring-destructive/40 uii:aria-invalid:border-destructive\",{\"uii:pr-30\":s},e),...u}),s&&v.createElement(\"span\",{className:\"uii:absolute uii:inset-y-0 uii:right-0 uii:flex uii:items-center uii:pr-2 uii:border-l-10 uii:border-l-background uii:my-[6px] uii:pointer-events-none \"},v.createElement(\"span\",{className:\"uii:bg-destructive uii:text-white uii:px-1.5 uii:py-1.5 uii:rounded-xs uii:uppercase uii:tracking-wide uii:font-medium uii:text-xs uii:leading-none uii:font-sans\"},s&&n?\"required\":\"error\")))}var xt={expression:\"\",mode:\"value\",isEditing:false,currentValue:void 0,isFullScreen:false},Fe=create((e,t)=>({states:{},setState:(r,n)=>{e(s=>({states:{...s.states,[r]:n}}));},getState:r=>t().states[r]||xt,clear:r=>{e(n=>({states:{...n.states,[r]:xt}}));},switchToValue:r=>{let n=t().getState(r);t().setState(r,{...n,mode:\"value\",isEditing:false});},switchToExpression:r=>{let n=t().getState(r);t().setState(r,{...n,mode:\"expression\",isEditing:false});},switchToEditor:r=>{let n=t().getState(r);t().setState(r,{...n,mode:\"expression\",isEditing:true});},setExpression:(r,n)=>{let s=t().getState(r);t().setState(r,{...s,expression:n});},setEditing:(r,n)=>{let s=t().getState(r);t().setState(r,{...s,isEditing:n});},setFullScreen:(r,n)=>{let s=t().getState(r);t().setState(r,{...s,isFullScreen:n});},setCurrentValue:(r,n)=>{let s=t().getState(r);t().setState(r,{...s,currentValue:n});}}));function bt(e){let t=Fe(),r=t.getState(e),n=useCallback(()=>{t.switchToValue(e);},[t,e]),s=useCallback(()=>{t.switchToExpression(e);},[t,e]),u=useCallback(()=>{t.switchToEditor(e);},[t,e]),p=useCallback(()=>{t.clear(e);},[t,e]),x=useCallback(c=>{t.setExpression(e,c);},[t,e]),d=useCallback(c=>{t.setEditing(e,c);},[t,e]),h=useCallback(c=>{t.setCurrentValue(e,c);},[t,e]),i=useCallback(c=>{t.setFullScreen(e,c);},[t,e]);return {current:r.mode,switchToValue:n,switchToExpression:s,switchToEditor:u,clear:p,isExpressionMode:r.mode===\"expression\",isEditorMode:r.isEditing,expression:r.expression,setExpression:x,isEditing:r.isEditing,setEditing:d,currentValue:r.currentValue,setCurrentValue:h,isFullScreen:r.isFullScreen,setFullScreen:i}}async function oe(e,t,r,n=\"\\u{1F537}\"){if(!r.trim())return console.log(`${n} Type inference skipped - no expression`),null;if(!e.hasTextFocus())return console.log(`${n} Skipping type inference - editor does not have focus`),null;console.log(`${n} Running type inference, expression:`,r);try{let s=e.getModel();if(s&&t.editor.getModelMarkers({resource:s.uri}).some(l=>l.severity===t.MarkerSeverity.Error))return console.log(`${n} Type inference skipped - expression has validation errors`),\"error\";let u=`const __expr__ = (${r});`,p=t.editor.createModel(u,\"typescript\"),d=await(await t.languages.typescript.getTypeScriptWorker())(p.uri),h=u.indexOf(\"__expr__\"),i=p.getPositionAt(h),c=await d.getQuickInfoAtPosition(p.uri.toString(),p.getOffsetAt(i));console.log(`${n} QuickInfo response:`,c);let T=null;if(c&&c.displayParts){let I=!1,g=[];for(let l of c.displayParts)if(I&&g.push(l),l.kind===\"punctuation\"&&l.text===\":\"&&!I){let E=c.displayParts[c.displayParts.indexOf(l)-1];E&&(E.kind===\"localName\"||E.kind===\"parameterName\")&&(I=!0);}if(g.length>0){let l=g.map(E=>E.text).join(\"\").trim();console.log(`${n} Extracted type:`,l),l&&l!==\"any\"&&(T=l);}}return p.dispose(),T}catch(s){return console.warn(`${n} Type inference failed:`,s),null}}var yt={fontSize:\"14px\",fontWeight:\"normal\",wordWrap:\"off\",lineNumbers:\"off\",lineNumbersMinChars:0,overviewRulerLanes:0,overviewRulerBorder:false,hideCursorInOverviewRuler:true,lineDecorationsWidth:0,glyphMargin:false,folding:false,scrollBeyondLastColumn:0,scrollbar:{horizontal:\"hidden\",vertical:\"hidden\",alwaysConsumeMouseWheel:false},find:{addExtraSpaceOnTop:false,autoFindInSelection:\"never\",seedSearchStringFromSelection:false},minimap:{enabled:false},wordBasedSuggestions:true,links:false,occurrencesHighlight:false,cursorStyle:\"line\",renderLineHighlight:\"none\",contextmenu:false,roundedSelection:false,hover:{delay:300},acceptSuggestionOnEnter:\"on\",automaticLayout:true,fixedOverflowWidgets:true,padding:{top:4,bottom:4},fontFamily:\"inherit\",letterSpacing:\"normal\",lineHeight:\"normal\"},ht={fontSize:\"14px\",fontWeight:\"normal\",wordWrap:\"on\",lineNumbers:\"on\",lineNumbersMinChars:3,overviewRulerLanes:3,overviewRulerBorder:true,hideCursorInOverviewRuler:false,lineDecorationsWidth:10,glyphMargin:true,folding:true,scrollBeyondLastColumn:5,scrollbar:{horizontal:\"auto\",vertical:\"auto\",alwaysConsumeMouseWheel:false},find:{addExtraSpaceOnTop:false,autoFindInSelection:\"never\",seedSearchStringFromSelection:false},minimap:{enabled:true},wordBasedSuggestions:true,links:true,occurrencesHighlight:true,cursorStyle:\"line\",renderLineHighlight:\"line\",contextmenu:true,roundedSelection:true,hover:{delay:300},acceptSuggestionOnEnter:\"off\",automaticLayout:true,fixedOverflowWidgets:true,readOnly:false,domReadOnly:false};function Et({value:e,onChange:t,onBlur:r,onEnter:n,onTypeInferred:s,onValidationChange:u,context:p={},className:x,placeholder:d=\"Enter expression...\"}){let h=useRef(null),i=useRef(null),c=useRef(null),T=l=>{i.current=l;let E=Object.keys(p);E.length>0&&l.languages.typescript.javascriptDefaults.addExtraLib(`\n declare const ${E.join(\", \")}: any;\n `,\"context.d.ts\");},I=(l,E)=>{h.current=l,l.updateOptions(yt),console.log(\"\\u{1F537} Inline editor mounted!\");l.getDomNode();let D=l.addCommand(E.KeyMod.CtrlCmd|E.KeyCode.KEY_F,()=>{}),V=l.onKeyDown(o=>{if(o.keyCode===E.KeyCode.Enter){if(!l.hasTextFocus()){console.log(\"\\u{1F537} Enter keydown but inline editor does NOT have focus - allowing default\");return}if(o.shiftKey){console.log(\"\\u{1F537} Shift+Enter in INLINE editor - switching to full-screen\"),o.preventDefault(),o.stopPropagation(),n&&n();return}let y=l._contentWidgets?.[\"editor.widget.suggestWidget\"],N=y?.widget&&!y.widget._hidden&&y.widget.state!==void 0&&y.widget.state!==0,A=l._contextKeyService?.getContextKeyValue?.(\"suggestWidgetVisible\");N||A?(console.log(\"\\u{1F537} Enter in INLINE editor - accepting autocomplete\"),o.preventDefault(),o.stopPropagation(),l.trigger(\"\",\"acceptSelectedSuggestion\")):(console.log(\"\\u{1F537} Enter in INLINE editor - blurring (finishing edit)\"),o.preventDefault(),o.stopPropagation(),r?.({}));}});l.onDidPaste(o=>{if(o.endLineNumber<=1)return;let y=\"\",N=l.getModel(),F=N.getLineCount();for(let A=0;A<F;A+=1)y+=N.getLineContent(A+1);N.setValue(y),l.setPosition({column:y.length+1,lineNumber:1});}),l.onDidBlurEditorText(o=>{let y=l.getValue();r?.({...o,currentValue:y});}),l.onDidChangeModelContent(()=>{let o=l.getModel();if(o){if(u){let y=E.editor.getModelMarkers({resource:o.uri}),N=y.some(F=>F.severity===E.MarkerSeverity.Error);u(!N,y);}s&&(c.current&&clearTimeout(c.current),console.log(\"\\u{1F537} Content changed - debouncing type inference\"),c.current=setTimeout(async()=>{let y=o.getValue(),N=await oe(l,E,y,\"\\u{1F537}\");N&&s(N);},200));}});let W=E.editor.onDidChangeMarkers(o=>{let y=l.getModel();if(!y||!s||!o.some(k=>k.toString()===y.uri.toString()))return;let A=E.editor.getModelMarkers({resource:y.uri}).some(k=>k.severity===E.MarkerSeverity.Error);console.log(\"\\u{1F537} Monaco markers changed - hasErrors:\",A),A?(c.current&&(clearTimeout(c.current),c.current=null),console.log(\"\\u{1F537} ERROR detected - immediately setting type to error\"),s(\"error\")):(c.current&&clearTimeout(c.current),console.log(\"\\u{1F537} Errors cleared - triggering type inference\"),c.current=setTimeout(async()=>{let k=y.getValue(),B=await oe(l,E,k,\"\\u{1F537}\");B&&s(B);},100));});l.addCommand(E.KeyCode.F1,()=>{});let G=l.onDidChangeCursorPosition(async()=>{if(s&&l.hasTextFocus()){let o=l.getModel();if(o&&o.getValue().trim()){c.current&&clearTimeout(c.current);let y=o.getValue(),N=await oe(l,E,y,\"\\u{1F537}\");N&&s(N);}}});l.setPosition({lineNumber:1,column:999999}),window.requestAnimationFrame(()=>{l.focus(),setTimeout(async()=>{let o=l.getModel();if(s&&o&&o.getValue())if(console.log(\"\\u{1F537} Triggering initial type inference for inline editor\"),E.editor.getModelMarkers({resource:o.uri}).some(F=>F.severity===E.MarkerSeverity.Error))s(\"error\");else {let F=o.getValue(),A=await oe(l,E,F,\"\\u{1F537}\");A&&s(A);}},100);}),h.current._inlineDisposables={enterKeyDisposable:V,findCommand:D,markerChangeDisposable:W,cursorDisposable:G};};useEffect(()=>()=>{if(h.current){if(console.log(\"\\u{1F537} Inline editor unmounting - cleaning up\"),c.current&&clearTimeout(c.current),h.current._inlineDisposables){let l=h.current._inlineDisposables;l.enterKeyDisposable?.dispose?.(),l.findCommand?.dispose?.(),l.markerChangeDisposable?.dispose?.(),l.cursorDisposable?.dispose?.();}h.current=null;}},[]);let g=l=>{t(l||\"\");};return v__default.createElement(\"div\",{className:L(\"uii:relative uii:flex-1\",x)},v__default.createElement(Editor,{theme:\"vs-dark\",height:\"26px\",language:\"typescript\",value:e,onChange:g,onMount:I,beforeMount:T,width:\"100%\",loading:v__default.createElement(v__default.Fragment,null,v__default.createElement(FontAwesomeIcon,{icon:faSpinner,className:\"uii:animate-spin\"})),options:yt,className:\"uii:-ml-[4px] uii:-mt-[1px] inline-editor\"}),!e&&v__default.createElement(\"div\",{className:\"uii:absolute uii:inset-0 uii:flex uii:items-center uii:pointer-events-none uii:text-muted-foreground uii:text-sm\"},d))}function St({value:e,onChange:t,onClose:r,onBlur:n,onTypeInferred:s,context:u={},className:p,placeholder:x=\"Enter expression...\"}){let d=useRef(null),h=useRef(null),i=useRef(null),c=g=>{h.current=g;let l=Object.keys(u);l.length>0&&g.languages.typescript.javascriptDefaults.addExtraLib(`\n declare const ${l.join(\", \")}: any;\n `,\"context.d.ts\");},T=(g,l)=>{d.current=g,g.updateOptions(ht),console.log(\"\\u{1F7E6} FULL-SCREEN panel editor mounted!\"),console.log(\"Full-screen editor is read-only?\",g.getOption(l.editor.EditorOption.readOnly));let E=g.onKeyDown(o=>{if(o.keyCode===l.KeyCode.Escape&&(console.log(\"\\u{1F7E6} Escape pressed in FULL-SCREEN editor - closing\"),o.preventDefault(),o.stopPropagation(),r()),o.keyCode===l.KeyCode.Enter){let y=g._contentWidgets?.[\"editor.widget.suggestWidget\"],N=y?.widget&&!y.widget._hidden&&y.widget.state!==void 0&&y.widget.state!==0,A=g._contextKeyService?.getContextKeyValue?.(\"suggestWidgetVisible\");N||A?(console.log(\"\\u{1F7E6} Enter in FULL-SCREEN - accepting autocomplete\"),o.preventDefault(),o.stopPropagation(),g.trigger(\"\",\"acceptSelectedSuggestion\")):console.log(\"\\u{1F7E6} Enter in FULL-SCREEN - allowing newline (default behavior)\");}}),z=0,D=g.onDidChangeModelContent(o=>{z++;let y=g.getValue();console.log(`\\u{1F7E6} FULL-SCREEN content changed (${z}):`,y),console.log(`\\u{1F7E6} Line count: ${g.getModel()?.getLineCount()}`),s&&(i.current&&clearTimeout(i.current),console.log(\"\\u{1F7E6} Content changed - debouncing type inference\"),i.current=setTimeout(async()=>{let F=await oe(g,l,y,\"\\u{1F7E6}\");F&&s(F);},200));}),V=l.editor.onDidChangeMarkers(o=>{let y=g.getModel();if(!y||!s||!o.some(k=>k.toString()===y.uri.toString()))return;let A=l.editor.getModelMarkers({resource:y.uri}).some(k=>k.severity===l.MarkerSeverity.Error);console.log(\"\\u{1F7E6} Monaco markers changed - hasErrors:\",A),A?(i.current&&(clearTimeout(i.current),i.current=null),console.log(\"\\u{1F7E6} ERROR detected - immediately setting type to error\"),s(\"error\")):(i.current&&clearTimeout(i.current),console.log(\"\\u{1F7E6} Errors cleared - triggering type inference\"),i.current=setTimeout(async()=>{let k=y.getValue(),B=await oe(g,l,k,\"\\u{1F7E6}\");B&&s(B);},100));});g.onDidBlurEditorText(o=>{let y=g.getValue();n?.({...o,currentValue:y});});let W=g.getModel();if(W){let o=W.getLineCount(),y=W.getLineLength(o);g.setPosition({lineNumber:o,column:y+1});}g.focus(),setTimeout(async()=>{if(s&&W)if(console.log(\"\\u{1F7E6} Triggering initial type inference for full-screen editor\"),l.editor.getModelMarkers({resource:W.uri}).some(N=>N.severity===l.MarkerSeverity.Error))console.log(\"\\u{1F7E6} Initial load has error - setting type to error\"),s(\"error\");else {let N=W.getValue(),F=await oe(g,l,N,\"\\u{1F7E6}\");F&&s(F);}},100);let G=g.onDidChangeCursorPosition(async()=>{if(s&&g.hasTextFocus()){let o=g.getModel();if(o&&o.getValue().trim()){i.current&&clearTimeout(i.current);let y=o.getValue(),N=await oe(g,l,y,\"\\u{1F7E6}\");N&&s(N);}}});d.current._fullScreenDisposables={escapeKeyDisposable:E,changeDisposable:D,markerChangeDisposable:V,cursorDisposable:G};};useEffect(()=>()=>{if(d.current){if(console.log(\"\\u{1F7E6} Full-screen editor unmounting - cleaning up\"),i.current&&clearTimeout(i.current),d.current._fullScreenDisposables){let g=d.current._fullScreenDisposables;g.escapeKeyDisposable?.dispose?.(),g.changeDisposable?.dispose?.(),g.markerChangeDisposable?.dispose?.(),g.cursorDisposable?.dispose?.();}d.current=null;}},[]);let I=g=>{t(g||\"\");};return v__default.createElement(\"div\",{className:L(\"uii:relative uii:border uii:rounded-md uii:bg-background\",p)},v__default.createElement(\"div\",{className:\"uii:flex uii:items-center uii:justify-between uii:p-2 uii:border-b uii:bg-muted/50\"},v__default.createElement(\"span\",{className:\"uii:text-sm uii:font-medium\"},\"Expression Editor\"),v__default.createElement(\"button\",{type:\"button\",onClick:r,className:\"uii:text-muted-foreground hover:uii:text-foreground uii:p-1 uii:rounded uii:cursor-pointer uii:text-xs\"},\"\\u2715\")),v__default.createElement(Editor,{height:\"300px\",theme:\"vs-dark\",language:\"typescript\",value:e,onChange:I,onMount:T,beforeMount:c,options:ht}),!e&&v__default.createElement(\"div\",{className:\"uii:absolute uii:inset-0 uii:flex uii:items-center uii:justify-center uii:pointer-events-none uii:text-muted-foreground\"},x))}function Tt(e,t){let[r,n]=useState(null),[s,u]=useState([]),[p,x]=useState([]),[d,h]=useState(false),[i,c]=useState(null),T=useRef(0),I=useRef(null),g=useRef(t||\"default\");return useEffect(()=>{g.current=t||\"default\";},[t]),useEffect(()=>{if(typeof window>\"u\"||!navigator.serviceWorker){c(\"Service worker not available\");return}let l=E=>{if(E.data.type===\"AST_PARSE_RESULT\"){let{id:z,controlKey:D,result:V}=E.data.payload;z===T.current&&D===g.current?(console.log(\"Service worker AST response:\",{id:z,controlKey:D,result:V}),n(V.ast),u(V.tokens),x(V.dependencies||[]),c(V.error||null),h(false)):console.log(\"Ignoring AST response - wrong control:\",{receivedId:z,expectedId:T.current,receivedKey:D,expectedKey:g.current});}};return I.current=l,navigator.serviceWorker.addEventListener(\"message\",l),()=>{I.current&&navigator.serviceWorker.removeEventListener(\"message\",I.current);}},[]),useEffect(()=>{if(!e.trim()){n(null),u([]),x([]),c(null),h(false);return}if(!navigator.serviceWorker||!navigator.serviceWorker.controller){c(\"Service worker not ready\"),h(false);return}h(true),c(null),T.current++,console.log(\"Sending expression to service worker:\",{expression:e.trim(),controlKey:g.current,id:T.current}),navigator.serviceWorker.controller.postMessage({type:\"PARSE_AST\",payload:{expression:e.trim(),id:T.current,controlKey:g.current}});},[e]),{ast:r,tokens:s,dependencies:p,isLoading:d,error:i}}function Ue({ast:e,key:t,className:r,variant:n=\"inline\",showTokens:s=false,tokens:u=[]}){let p=i=>{switch(i){case \"StringLiteral\":return \"uii:text-green-600 uii:bg-green-100\";case \"NumericLiteral\":return \"uii:text-purple-600 uii:bg-purple-100\";case \"Identifier\":return \"uii:text-blue-600 uii:bg-blue-100\";case \"Keyword\":case \"Literal\":return \"uii:text-orange-600 uii:bg-orange-100\";case \"BinaryExpression\":return \"uii:text-gray-700 uii:bg-gray-100\";case \"CallExpression\":return \"uii:text-indigo-600 uii:bg-indigo-100\";case \"MemberExpression\":return \"uii:text-cyan-600 uii:bg-cyan-100\";case \"UnaryExpression\":return \"uii:text-pink-600 uii:bg-pink-100\";case \"ParenthesizedExpression\":return \"uii:text-yellow-600 uii:bg-yellow-100\";default:return \"uii:text-gray-600 uii:bg-gray-100\"}},x=(i,c=0)=>c>2?null:i.type===\"Identifier\"?v__default.createElement(\"span\",{key:`${i.start}-${i.end}`,className:\"uii:inline-flex uii:items-center uii:mr-1\"},v__default.createElement(\"span\",{className:\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:bg-blue-100 uii:text-blue-800 uii:font-mono\"},i.name||i.value)):i.type===\"StringLiteral\"||i.type===\"NumericLiteral\"?v__default.createElement(\"span\",{key:`${i.start}-${i.end}`,className:\"uii:inline-flex uii:items-center uii:mr-1\"},v__default.createElement(\"span\",{className:\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:bg-green-100 uii:text-green-800 uii:font-mono\"},i.value)):i.type===\"BinaryExpression\"?v__default.createElement(\"span\",{key:`${i.start}-${i.end}`,className:\"uii:inline-flex uii:items-center uii:mr-1\"},i.left&&x(i.left,c+1),v__default.createElement(\"span\",{className:\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:bg-purple-100 uii:text-purple-800 uii:font-mono uii:mx-1\"},i.operator),i.right&&x(i.right,c+1)):i.type===\"CallExpression\"?v__default.createElement(\"span\",{key:`${i.start}-${i.end}`,className:\"uii:inline-flex uii:items-center uii:mr-1\"},i.callee&&x(i.callee,c+1),v__default.createElement(\"span\",{className:\"text-xs text-gray-600\"},\"()\")):i.type===\"PropertyAccessExpression\"?v__default.createElement(\"span\",{key:`${i.start}-${i.end}`,className:\"uii:inline-flex uii:items-center uii:mr-1\"},i.object&&x(i.object,c+1),v__default.createElement(\"span\",{className:\"text-xs text-gray-600\"},\".\"),i.property&&x(i.property,c+1)):v__default.createElement(\"span\",{key:`${i.start}-${i.end}`,className:\"uii:inline-flex uii:items-center uii:mr-1\"},v__default.createElement(\"span\",{className:\"px-1 py-0.5 rounded text-xs bg-gray-100 text-gray-600 font-mono\"},i.type)),d=(i,c=0)=>{if(c>4)return null;let T=\" \".repeat(c);return v__default.createElement(\"div\",{key:`${i.start}-${i.end}`,className:\"font-mono text-xs\"},v__default.createElement(\"div\",{className:\"uii:flex uii:items-start uii:gap-2\"},v__default.createElement(\"span\",{className:\"uii:text-gray-400\"},T),v__default.createElement(\"span\",{className:L(\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:font-semibold\",p(i.type))},i.type),i.value&&v__default.createElement(\"span\",{className:\"uii:text-green-600\"},'\"',i.value,'\"'),i.operator&&v__default.createElement(\"span\",{className:\"uii:text-purple-600\"},i.operator),i.name&&v__default.createElement(\"span\",{className:\"uii:text-blue-600\"},i.name)),i.left&&v__default.createElement(\"div\",{className:\"uii:ml-2\"},v__default.createElement(\"span\",{className:\"uii:text-gray-500 uii:text-xs\"},\"left: \"),d(i.left,c+1)),i.right&&v__default.createElement(\"div\",{className:\"uii:ml-2\"},v__default.createElement(\"span\",{className:\"uii:text-gray-500 uii:text-xs\"},\"right: \"),d(i.right,c+1)),i.argument&&v__default.createElement(\"div\",{className:\"uii:ml-2\"},v__default.createElement(\"span\",{className:\"uii:text-gray-500 uii:text-xs\"},\"arg: \"),d(i.argument,c+1)),i.object&&v__default.createElement(\"div\",{className:\"uii:ml-2\"},v__default.createElement(\"span\",{className:\"uii:text-gray-500 uii:text-xs\"},\"obj: \"),d(i.object,c+1)),i.property&&v__default.createElement(\"div\",{className:\"uii:ml-2\"},v__default.createElement(\"span\",{className:\"uii:text-gray-500 uii:text-xs\"},\"prop: \"),d(i.property,c+1)),i.index&&v__default.createElement(\"div\",{className:\"uii:ml-2\"},v__default.createElement(\"span\",{className:\"uii:text-gray-500 uii:text-xs\"},\"idx: \"),d(i.index,c+1)),!i.left&&!i.right&&!i.argument&&!i.object&&!i.property&&!i.index&&i.children&&i.children.length>0&&v__default.createElement(\"div\",{className:\"uii:ml-2\"},i.children.slice(0,3).map((I,g)=>d(I,c+1)),i.children.length>3&&v__default.createElement(\"div\",{className:\"uii:ml-2 uii:text-gray-500 uii:text-xs\"},\"... and \",i.children.length-3,\" more\")))},h=()=>{if(u.length===0)return null;let i=u.slice(0,10);return v__default.createElement(\"div\",{className:\"uii:space-y-2\"},v__default.createElement(\"div\",{className:\"uii:text-sm uii:font-semibold uii:text-gray-700\"},\"Tokens \",u.length>10&&`(${u.length} total)`,\":\"),v__default.createElement(\"div\",{className:\"uii:flex uii:flex-wrap uii:gap-1\"},i.map((c,T)=>v__default.createElement(\"span\",{key:T,className:L(\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:font-mono\",c.type.includes(\"Keyword\")&&\"uii:bg-blue-100 uii:text-blue-800\",c.type.includes(\"Identifier\")&&\"uii:bg-green-100 uii:text-green-800\",c.type.includes(\"String\")&&\"uii:bg-yellow-100 uii:text-yellow-800\",c.type.includes(\"Numeric\")&&\"uii:bg-purple-100 uii:text-purple-800\",c.type.includes(\"Punctuation\")&&\"uii:bg-gray-100 uii:text-gray-800\",\"uii:bg-gray-100 uii:text-gray-600\")},c.value)),u.length>10&&v__default.createElement(\"span\",{className:\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:bg-gray-200 uii:text-gray-600\"},\"+\",u.length-10,\" more\")))};return e?n===\"inline\"?v__default.createElement(\"div\",{className:L(\"uii:inline-flex uii:items-center uii:gap-2\",r)},x(e)):n===\"compact\"?v__default.createElement(\"div\",{className:L(\"uii:space-y-2\",r)},v__default.createElement(\"div\",{className:\"uii:flex uii:flex-wrap uii:gap-1\"},x(e)),s&&h()):v__default.createElement(\"div\",{className:L(\"uii:space-y-3\",r)},v__default.createElement(\"div\",{className:\"uii:space-y-2\"},v__default.createElement(\"div\",{className:\"uii:text-sm uii:font-semibold uii:text-gray-700\"},\"AST Tree:\"),v__default.createElement(\"div\",{className:\"uii:p-3 uii:border uii:rounded-md uii:bg-gray-50 uii:max-h-64 uii:overflow-auto\"},d(e))),s&&h()):v__default.createElement(\"div\",{className:L(\"uii:text-gray-500 uii:text-sm uii:italic\",r)},\"No AST available\")}function Nt({label:e,value:t,type:r,valuesLoading:n=false,key:s,onValueChange:u,onDependenciesChange:p,metadata:x,children:d,fieldName:h,expressionContext:i={},availableNodes:c,myInterface:T,contextTypeDefinitions:I,inlineEditor:g=true,className:l,editorClassName:E,expressionPlaceholder:z=\"Enter expression...\",evaluateExpression:D,expressionResult:V,isEvaluating:W=false,isExpressionValid:G=true,expectedType:o=\"any\"}){let[y,N]=useState(()=>({...x||{expression:\"\",mode:\"value\",isEditing:false,isFullScreen:false,value:void 0},isEditing:false,isFullScreen:false,mode:\"value\"})),[F,A]=useState(t&&typeof t==\"object\"&&\"expression\"in t&&\"type\"in t&&t.type===\"expression\"?t.value:t),[k,B]=useState(t&&typeof t==\"object\"&&\"expression\"in t&&\"type\"in t&&t.type===\"expression\"?t.value:t),O=useCallback(b=>{switch(r){case \"float\":return typeof b==\"string\"&&!isNaN(parseFloat(b))?parseFloat(b):b;case \"integer\":case \"number\":return typeof b==\"string\"&&!isNaN(parseInt(b))?parseInt(b):b;case \"string[]\":return typeof b==\"string\"?b.split(\",\"):b;case \"string\":default:return b}},[r]),[Z,R]=useState(),M=Fe.getState().getState(h).expression;useEffect(()=>{x&&N({...x,isEditing:false,isFullScreen:false});},[x]);let ye=useMemo(()=>t&&typeof t==\"object\"&&\"expression\"in t&&\"type\"in t&&t.type===\"expression\",[t]),P=useRef(true);useEffect(()=>{if(t&&typeof t==\"object\"&&\"expression\"in t&&\"type\"in t&&t.type===\"expression\"){let b=t.value,C=t.expression;b!==void 0&&(B(O(b)),A(O(b))),C&&a.expression!==C&&(a.setExpression(C),P.current&&!a.isEditing&&a.switchToExpression());let K=!x||x.expression!==C||x.mode===\"value\"||x.isEditing===true||x.isFullScreen===true;if(P.current&&K){let _={expression:C||\"\",value:O(b),mode:\"expression\",isEditing:false,isFullScreen:false};setTimeout(()=>{u(t,{..._,value:O(t)});},0);}}else if(!n&&(B(O(t)),A(O(t)),P.current&&(x?.expression||x?.mode===\"expression\"))){let b={expression:\"\",value:O(t),mode:\"value\",isEditing:false,isFullScreen:false};setTimeout(()=>{u(O(t),{...b,value:O(t)});},0);}P.current&&setTimeout(()=>{P.current=false;},100);},[t,n]);let a=bt(h),{ast:U,tokens:he,dependencies:q,isLoading:ve,error:J}=Tt(a.expression,h),te=useMemo(()=>!U||q.length===0?[]:q.map(b=>({name:b,exists:i?b in i:false,value:i?i[b]:void 0})),[q,i,U]),[ae,de]=useState(null),He=useCallback(b=>{de(b);},[]),re=useMemo(()=>a.expression.includes(`\n`)||a.expression.includes(\"\\r\"),[a.expression]),j=useMemo(()=>ae||\"unknown\",[ae]),Ne=useMemo(()=>{if(!j||j===\"unknown\"||j===\"any\"||j===\"error\")return false;let b=j.toLowerCase().trim(),C=(r||o||\"any\").toLowerCase().trim();return !(C===\"array\"&&b.endsWith(\"[]\")||b===C||C===\"any\"||C===\"string\"&&(b.startsWith('\"')||b.startsWith(\"'\"))||C===\"number\"&&/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(b)||C===\"integer\"&&/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(b)||C===\"integer\"&&b===\"number\"||C===\"float\"&&/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(b)||C===\"float\"&&b===\"number\"||C===\"boolean\"&&(b===\"true\"||b===\"false\"))},[j,r,o]),[ke,qe]=useState(null),[It,Je]=useState(false),[Pt,Qe]=useState(false),[Pe,Vt]=useState(true),[Ve,Lt]=useState({syntax:true,expression:true,context:true,type:true,security:true}),Ze=useMemo(()=>!a.expression||!a.expression.trim()?false:!!(!Pe||!G||J||!Ve.syntax||!Ve.expression||V?.error||ke?.error),[a.expression,Pe,G,J,Ve,V,ke]),Me=useRef(false),pe=useRef(false),Ce=useRef(false),zt=useCallback((b,C)=>{Vt(b),Lt(K=>({...K,syntax:b}));},[]),Xe=useCallback(b=>{let C=b.includes(`\n`),K=b.length>80;a.isFullScreen||a.setFullScreen(C||K);},[a.isFullScreen]),Dt=useCallback(async(b,C)=>{if(!(!D||!b.trim())){Je(true);try{let K=await D(b,C);qe(K);}catch(K){qe({value:null,ast:{kind:0,text:\"\",color:\"#ff0000\"},error:K instanceof Error?K.message:\"Unknown error\",isValid:false,validation:{syntax:false,expression:false,context:false,type:false,security:false}});}finally{Je(false);}}},[D]),X=useMemo(()=>({expression:a.expression,value:k,mode:a.current,isEditing:a.isEditing,isFullScreen:a.isFullScreen}),[a.expression,a.current,a.isFullScreen,a.isEditing,k]),Ot=useMemo(()=>({expression:a.expression,type:\"expression\"}),[a.currentValue||a.expression]),Ye=useCallback(b=>{u(O(b),{...X,value:O(b)});},[u,a,ye,k]),Ae=useCallback(b=>{Me.current=false,a.setExpression(b),R(b),Xe(b),u({expression:b,type:\"expression\"},{...X,expression:b});},[a,i,u,D,Dt,Xe]),Le=useCallback(async(b,C=false)=>{if(Me.current){Me.current=false;return}if(pe.current){pe.current=false;return}a.isFullScreen&&!C||re&&!C||(Ce.current=true,a.setEditing(false),a.setFullScreen(false));},[a,V,ke,i,u,k,W,It,Ot,re]);useEffect(()=>{u(k,{...X,isFullScreen:a.isFullScreen});},[a.isFullScreen]),useEffect(()=>{a.isEditing&&re&&!a.isFullScreen&&a.setFullScreen(true);},[re,a.isEditing,a.isFullScreen]);let le=useCallback(b=>{switch(b){case \"value\":a.switchToValue(),a.setFullScreen(false),u(F||t,void 0);break;case \"editor\":a.switchToEditor();let C=re;C&&a.setFullScreen(true);let K={expression:a.expression,value:k,mode:\"expression\",isEditing:true,isFullScreen:C};u(a.expression?{expression:a.expression,type:\"expression\"}:k,K);break;case \"expression\":A(k),a.switchToExpression(),re&&a.setFullScreen(true);break}},[a,k,u,re,F,t]);useEffect(()=>{Ce.current&&(a.expression&&a.expression.trim()?u(X.mode===\"value\"?X.value??\"\":{expression:X.expression.trim(),type:\"expression\"},{...X,isEditing:false,isFullScreen:false}):(a.switchToValue(),u(X.value??\"\",{...X,mode:\"value\",expression:\"\",isEditing:false,isFullScreen:false})),Ce.current=false);},[a.isEditing,a.isFullScreen,Ce.current]),useEffect(()=>{p&&p(q);},[q,p]);let ze=useCallback(()=>{Me.current=true,u(k,X),le(\"value\"),a.setFullScreen(false);},[u,a,F]),[$t,Re]=useState(k);useEffect(()=>{Re(k);},[k]);let et=useMemo(()=>({value:k,onChange:Ye,onExpressionClick:()=>le(\"editor\"),inferredType:j,hasTypeMismatch:Ne,hasError:Ze,localInput:$t,setLocalInput:Re,expressionMode:{current:a.current,switchToValue:()=>le(\"value\"),switchToExpression:()=>le(\"expression\"),switchToEditor:()=>le(\"editor\"),clear:ze,isExpressionMode:a.isExpressionMode,isEditorMode:a.isEditorMode,expression:a.expression,setExpression:Ae,isEditing:a.isEditing,setEditing:a.setEditing,isFullScreen:a.isFullScreen,setFullScreen:a.setFullScreen}}),[k,Ye,a,le,ze,Ae,j,Ne,Ze]),Wt=()=>{switch(a.current){case \"expression\":a.expression&&a.expression.trim();(V||ke)?.isValid;return et.expressionMode.isEditing?v__default.createElement(\"div\",{key:`${s}-expression`,className:L(\"relative\",l)},g&&!a.isFullScreen&&!re?v__default.createElement(\"div\",{className:L(`uii:flex uii:h-9 uii:w-full \n uii:min-w-0 uii:rounded-sm \n uii:border uii:border-ring \n uii:bg-background uii:px-3 uii:py-1 uii:text-base uii:shadow-xs \n uii:ring-ring/50 uii:ring-[3px] uii:transition-[color,box-shadow] \n uii:outline-none uii:md:text-sm uii:cursor-pointer\n uii:mt-0.5 `,E)},v__default.createElement(Et,{value:a.expression,onChange:_=>{Ae(_);},onEnter:()=>{pe.current=true,a.setFullScreen(true),setTimeout(()=>{pe.current=false;},100);},onBlur:Le,onTypeInferred:He,onValidationChange:zt,context:i,placeholder:z}),v__default.createElement(\"div\",{className:\"uii:flex uii:items-center uii:gap-2 uii:mt-0.5\"},v__default.createElement(\"span\",{className:\"uii:text-xs uii:font-mono uii:cursor-pointer uii:text-muted-foreground\",onMouseDown:_=>{_.preventDefault(),_.stopPropagation(),pe.current=true,a.setFullScreen(true),setTimeout(()=>{pe.current=false;},100);}},v__default.createElement(FontAwesomeIcon,{icon:faExpand})),v__default.createElement(\"span\",{className:\"uii:text-xs uii:font-mono uii:cursor-pointer uii:text-muted-foreground\",onMouseDown:_=>{_.preventDefault(),ze();}},\"Clear\"))):v__default.createElement(\"div\",{className:\"uii:space-y-4\"},v__default.createElement(St,{value:a.expression,onChange:_=>{Ae(_);},onClose:()=>{Le(void 0,true),a.setFullScreen(false);},onBlur:Le,onTypeInferred:He,context:i,placeholder:z}),(U||q.length>0)&&v__default.createElement(\"div\",{className:\"uii:space-y-3\"},j&&j!==\"unknown\"&&v__default.createElement(\"div\",{className:\"uii:space-y-2\"},v__default.createElement(\"div\",{className:\"uii:flex uii:items-center uii:gap-2\"},v__default.createElement(\"div\",{className:\"uii:text-sm uii:font-semibold uii:text-gray-700\"},\"Inferred Return Type:\"),ae&&j!==\"error\"&&v__default.createElement(\"span\",{className:\"uii:px-1.5 uii:py-0.5 uii:text-xs uii:rounded uii:bg-blue-100 uii:text-blue-700 uii:border uii:border-blue-200\"},\"TypeScript\")),v__default.createElement(\"div\",{className:\"uii:flex uii:items-center uii:gap-2\"},j===\"error\"?v__default.createElement(\"span\",{className:\"uii:px-3 uii:py-1.5 uii:text-sm uii:font-mono uii:rounded uii:border uii:bg-red-50 uii:text-red-800 uii:border-red-200\"},\"\\u274C Syntax Error\"):v__default.createElement(v__default.Fragment,null,v__default.createElement(\"span\",{className:\"uii:px-3 uii:py-1.5 uii:text-sm uii:font-mono uii:rounded uii:border uii:bg-purple-50 uii:text-purple-800 uii:border-purple-200\"},j),Ne&&v__default.createElement(\"span\",{className:\"uii:text-xs uii:text-orange-600 uii:font-semibold\"},\"\\u26A0\\uFE0F Expected: \",r||o)))),te.length>0&&v__default.createElement(\"div\",{className:\"uii:space-y-2\"},v__default.createElement(\"div\",{className:\"uii:text-sm uii:font-semibold uii:text-gray-700\"},\"Dependencies (\",te.length,\"):\"),v__default.createElement(\"div\",{className:\"uii:flex uii:flex-wrap uii:gap-2\"},te.map((_,De)=>v__default.createElement(\"span\",{key:De,className:L(\"uii:px-2 uii:py-1 uii:text-sm uii:rounded uii:border\",_.exists?\"uii:bg-blue-100 uii:text-blue-800 uii:border-blue-200\":\"uii:bg-red-100 uii:text-red-800 uii:border-red-200\"),title:_.exists?`Value: ${JSON.stringify(_.value)}`:\"Not found in context\"},_.name)))),U&&v__default.createElement(Ue,{ast:U,tokens:he,variant:\"tree\",showTokens:true,className:\"uii:w-full\"}),ve&&v__default.createElement(\"div\",{className:\"uii:text-sm uii:text-gray-500 uii:italic\"},\"Parsing expression...\"),J&&v__default.createElement(\"div\",{className:\"uii:text-sm uii:text-red-600\"},\"Parse Error: \",J)))):v__default.createElement(\"div\",{className:L(\"uii:relative\",l),key:`${s}-expression-display`},v__default.createElement(\"div\",{className:rt(\"uii:flex uii:h-9 uii:w-full uii:min-w-0 uii:rounded-sm uii:border uii:border-input uii:bg-transparent uii:px-3 uii:py-1 uii:text-base uii:shadow-xs uii:transition-[color,box-shadow] uii:outline-none uii:focus-visible:border-ring uii:focus-visible:ring-ring/50 uii:focus-visible:ring-[3px] uii:md:text-sm uii:cursor-pointer uii:hover:bg-muted/50\",\"uii:mt-0.5 uii:bg-white uii:rounded-md uii:items-center\"),onClick:()=>le(\"editor\"),onMouseEnter:()=>Qe(true),onMouseLeave:()=>Qe(false)},v__default.createElement(\"span\",{className:\"uii:flex-1 uii:truncate uii:text-foreground uii:items-center\"},Pt?v__default.createElement(\"div\",{className:\"uii:flex uii:items-center uii:gap-2\"},U?v__default.createElement(Ue,{key:`${s}-ast`,ast:U,tokens:he,variant:\"inline\",showTokens:false,className:\"uii:text-xs\"}):v__default.createElement(\"div\",{className:\"uii:text-xs uii:text-gray-500\"},ve?\"Parsing...\":J?`Error: ${J}`:\"No AST available\"),q.length>0&&v__default.createElement(\"div\",{className:\"uii:flex uii:gap-1\"},q.map((_,De)=>v__default.createElement(\"span\",{key:De,className:\"uii:px-1 uii:py-0.5 uii:bg-blue-100 uii:text-blue-800 uii:text-xs uii:rounded\"},_)))):v__default.createElement(\"span\",{className:\"uii:font-mono uii:text-sm\"},M||\"No expression\"))));default:return d(et)}};return v__default.createElement(v__default.Fragment,null,v__default.createElement(\"div\",{className:\"uii:flex uii:items-center uii:gap-2 uii:mt-2\"},v__default.createElement(\"label\",{className:\"uii:text-xs uii:text-muted-foreground uii:font-bold\",htmlFor:s},e,\":\"),v__default.createElement(\"span\",{className:\"uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-gray-200 uii:rounded-sm uii:text-[10px] uii:font-mono uii:text-muted-foreground uii:font-light\"},r),Ne||j===\"error\"?v__default.createElement(v__default.Fragment,null,a.current===\"expression\"?v__default.createElement(v__default.Fragment,null,v__default.createElement(\"span\",{className:\"uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-gray-200 uii:rounded-sm uii:text-[10px] uii:font-mono uii:text-muted-foreground uii:font-light\"},a.expression.trim()!==\"\"?j:\"empty\"),v__default.createElement(\"span\",{className:\"uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-gray-200 uii:rounded-sm uii:text-[10px] uii:font-mono uii:font-light uii:text-orange-600 \"},\"\\u26A0\\uFE0F Expected: \",r||o)):v__default.createElement(v__default.Fragment,null)):v__default.createElement(v__default.Fragment,null)),Wt())}function Ti({className:e,expectedType:t,...r}){let[n,s]=useState(r.value),[u,p]=useState({});return v.createElement(Nt,{label:r.label??\"Test Entry\",key:r.name,type:t??\"string\",valuesLoading:false,value:r.value,onValueChange:(x,d)=>{s(x),d&&p(d);},expectedType:t,fieldName:r.name,children:({onExpressionClick:x,onChange:d,value:h,localInput:i,setLocalInput:c})=>v.createElement(\"div\",{className:\"uii:relative uii:text-xs uii:mt-0.5\"},v.createElement(mt,{type:\"text\",value:i,onChange:T=>{c(T.target.value),d(T.target.value);},placeholder:r.placeholder??\"Enter value...\"}),v.createElement(\"div\",{className:\"uii:flex uii:bg-white uii:border-white/40 uii:border-l-8 uii:items-center uii:gap-1 uii:absolute uii:right-1.5 uii:top-2.5 uii:cursor-pointer uii:truncate\",onClick:()=>x()},v.createElement(\"span\",{className:\"uii:border-l uii:border-gray-200 uii:px-2\"},\"Custom Expression\")))})}var Mt=e=>typeof e==\"boolean\"?`${e}`:e===0?\"0\":e,Ct=we,At=(e,t)=>r=>{var n;if(t?.variants==null)return Ct(e,r?.class,r?.className);let{variants:s,defaultVariants:u}=t,p=Object.keys(s).map(h=>{let i=r?.[h],c=u?.[h];if(i===null)return null;let T=Mt(i)||Mt(c);return s[h][T]}),x=r&&Object.entries(r).reduce((h,i)=>{let[c,T]=i;return T===void 0||(h[c]=T),h},{}),d=t==null||(n=t.compoundVariants)===null||n===void 0?void 0:n.reduce((h,i)=>{let{class:c,className:T,...I}=i;return Object.entries(I).every(g=>{let[l,E]=g;return Array.isArray(E)?E.includes({...u,...x}[l]):{...u,...x}[l]===E})?[...h,c,T]:h},[]);return Ct(e,p,d,r?.class,r?.className)};var Pr=At(\"ui:inline-flex ui:items-center ui:justify-center ui:gap-2 ui:whitespace-nowrap ui:rounded-sm ui:text-sm ui:font-medium ui:transition-[color,box-shadow] ui:disabled:pointer-events-none ui:disabled:opacity-50 ui:[&_svg]:pointer-events-none ui:[&_svg:not([class*=size-])]:size-4 ui:shrink-0 ui:[&_svg]:shrink-0 ui:outline-none ui:focus-visible:border-ring ui:focus-visible:ring-ring/50 ui:focus-visible:ring-[3px] ui:aria-invalid:ring-destructive/20 ui:dark:aria-invalid:ring-destructive/40 ui:aria-invalid:border-destructive ui:cursor-pointer\",{variants:{variant:{default:\"ui:bg-primary ui:text-primary-foreground ui:shadow-xs ui:hover:bg-primary/90 ui:select-none\",destructive:\"ui:bg-destructive ui:text-white ui:shadow-xs ui:hover:bg-destructive/90 ui:focus-visible:ring-destructive/20 ui:dark:focus-visible:ring-destructive/40\",outline:\"ui:border ui:border-input ui:bg-background ui:shadow-xs ui:hover:bg-accent ui:hover:text-accent-foreground\",secondary:\"ui:bg-secondary ui:text-secondary-foreground ui:shadow-xs ui:hover:bg-secondary/80\",ghost:\"ui:hover:bg-accent ui:hover:text-accent-foreground\",link:\"ui:text-primary ui:underline-offset-4 ui:hover:underline\"},size:{default:\"ui:h-9 ui:px-4 ui:py-2 ui:has-[>svg]:px-3\",sm:\"ui:h-8 ui:rounded-sm ui:gap-1.5 ui:px-3 ui:has-[>svg]:px-2.5\",lg:\"ui:h-10 ui:rounded-sm ui:px-6 ui:has-[>svg]:px-4\",icon:\"ui:size-9\"}},defaultVariants:{variant:\"default\",size:\"default\"}});function Ii({className:e,variant:t,size:r,asChild:n=false,...s}){return v.createElement(n?Slot:\"button\",{\"data-slot\":\"button\",className:L(Pr({variant:t,size:r,className:e})),...s})}export{Ii as Button,Ti as Input,Pr as buttonVariants};//# sourceMappingURL=index.js.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import {\n AnyClassGroupIds,\n AnyConfig,\n AnyThemeGroupIds,\n ClassGroup,\n ClassValidator,\n Config,\n ThemeGetter,\n ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: AnyClassGroupIds\n}\n\ninterface ClassValidatorObject {\n classGroupId: AnyClassGroupIds\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: AnyClassGroupIds,\n hasPostfixModifier: boolean,\n ) => {\n const conflicts = conflictingClassGroups[classGroupId] || []\n\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n }\n\n return conflicts\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nconst getGroupIdForArbitraryProperty = (className: string) => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':'),\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n const { theme, classGroups } = config\n const classMap: ClassPartObject = {\n nextPart: new Map<string, ClassPartObject>(),\n validators: [],\n }\n\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId]!, classMap, classGroupId, theme)\n }\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<AnyThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme,\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme,\n )\n })\n })\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string) => {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: [],\n })\n }\n\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n })\n\n return currentClassPartObject\n}\n\nconst isThemeGetter = (func: ClassValidator | ThemeGetter): func is ThemeGetter =>\n (func as ThemeGetter).isThemeGetter\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport const createLruCache = <Key, Value>(maxCacheSize: number): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache = new Map<Key, Value>()\n let previousCache = new Map<Key, Value>()\n\n const update = (key: Key, value: Value) => {\n cache.set(key, value)\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = new Map()\n }\n }\n\n return {\n get(key) {\n let value = cache.get(key)\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value)\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\nconst MODIFIER_SEPARATOR = ':'\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length\n\nexport const createParseClassName = (config: AnyConfig) => {\n const { prefix, experimentalParseClassName } = config\n\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = (className: string): ParsedClassName => {\n const modifiers = []\n\n let bracketDepth = 0\n let parenDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index]\n\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') {\n bracketDepth++\n } else if (currentCharacter === ']') {\n bracketDepth--\n } else if (currentCharacter === '(') {\n parenDepth++\n } else if (currentCharacter === ')') {\n parenDepth--\n }\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.substring(modifierStart)\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier)\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n }\n }\n\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR\n const parseClassNameOriginal = parseClassName\n parseClassName = (className) =>\n className.startsWith(fullPrefix)\n ? parseClassNameOriginal(className.substring(fullPrefix.length))\n : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined,\n }\n }\n\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName\n parseClassName = (className) =>\n experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n }\n\n return parseClassName\n}\n\nconst stripImportantModifier = (baseClassName: string) => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1)\n }\n\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1)\n }\n\n return baseClassName\n}\n","import { AnyConfig } from './types'\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const createSortModifiers = (config: AnyConfig) => {\n const orderSensitiveModifiers = Object.fromEntries(\n config.orderSensitiveModifiers.map((modifier) => [modifier, true]),\n )\n\n const sortModifiers = (modifiers: string[]) => {\n if (modifiers.length <= 1) {\n return modifiers\n }\n\n const sortedModifiers: string[] = []\n let unsortedModifiers: string[] = []\n\n modifiers.forEach((modifier) => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier]\n\n if (isPositionSensitive) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n unsortedModifiers = []\n } else {\n unsortedModifiers.push(modifier)\n }\n })\n\n sortedModifiers.push(...unsortedModifiers.sort())\n\n return sortedModifiers\n }\n\n return sortModifiers\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds, sortModifiers } =\n configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n } = parseClassName(originalClassName)\n\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n let hasPostfixModifier = !!maybePostfixModifierPosition\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n const variantModifier = sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < arguments.length) {\n if ((argument = arguments[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string) => {\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall = initTailwindMerge\n\n function initTailwindMerge(classList: string) {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as AnyConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n function tailwindMerge(classList: string) {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments as any))\n }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || []\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => Boolean(value) && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => Boolean(value) && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) => getIsArbitraryValue(value, isNever, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n getIsArbitraryVariable(value, isLabelShadow, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n value: string,\n testLabel: (label: string) => boolean,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst getIsArbitraryVariable = (\n value: string,\n testLabel: (label: string) => boolean,\n shouldMatchNoLabel = false,\n) => {\n const result = arbitraryVariableRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n return shouldMatchNoLabel\n }\n\n return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position'\n\nconst imageLabels = new Set(['image', 'url'])\n\nconst isLabelImage = (label: string) => imageLabels.has(label)\n\nconst sizeLabels = new Set(['length', 'size', 'percentage'])\n\nconst isLabelSize = (label: string) => sizeLabels.has(label)\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n\n const themeColor = fromTheme('color')\n const themeFont = fromTheme('font')\n const themeText = fromTheme('text')\n const themeFontWeight = fromTheme('font-weight')\n const themeTracking = fromTheme('tracking')\n const themeLeading = fromTheme('leading')\n const themeBreakpoint = fromTheme('breakpoint')\n const themeContainer = fromTheme('container')\n const themeSpacing = fromTheme('spacing')\n const themeRadius = fromTheme('radius')\n const themeShadow = fromTheme('shadow')\n const themeInsetShadow = fromTheme('inset-shadow')\n const themeDropShadow = fromTheme('drop-shadow')\n const themeBlur = fromTheme('blur')\n const themePerspective = fromTheme('perspective')\n const themeAspect = fromTheme('aspect')\n const themeEase = fromTheme('ease')\n const themeAnimate = fromTheme('animate')\n\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n\n const scaleBreak = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const scalePosition = () =>\n [\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ] as const\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n const scaleUnambiguousSpacing = () =>\n [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n const scaleGridTemplateColsRows = () =>\n [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridColRowStartAndEnd = () =>\n [\n 'auto',\n { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleGridColRowStartOrEnd = () =>\n [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridAutoColsRows = () =>\n ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n const scaleAlignPrimaryAxis = () =>\n ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline'] as const\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch'] as const\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n const scaleSizing = () =>\n [\n isFraction,\n 'auto',\n 'full',\n 'dvw',\n 'dvh',\n 'lvw',\n 'lvh',\n 'svw',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n const scaleGradientStopPosition = () =>\n [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleRadius = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n 'full',\n themeRadius,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleBorderWidth = () =>\n ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n const scaleBlendMode = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const scaleBlur = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeBlur,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleOrigin = () =>\n [\n 'center',\n 'top',\n 'top-right',\n 'right',\n 'bottom-right',\n 'bottom',\n 'bottom-left',\n 'left',\n 'top-left',\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n ],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest'],\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [\n {\n aspect: [\n 'auto',\n 'square',\n isFraction,\n isArbitraryValue,\n isArbitraryVariable,\n themeAspect,\n ],\n },\n ],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [\n { columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer] },\n ],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': scaleBreak() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': scaleBreak() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [\n { object: [...scalePosition(), isArbitraryValue, isArbitraryVariable] },\n ],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: scaleOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: scaleOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: scaleInset() }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': scaleInset() }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': scaleInset() }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{ start: scaleInset() }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{ end: scaleInset() }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: scaleInset() }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: scaleInset() }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: scaleInset() }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: scaleInset() }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [\n {\n basis: [\n isFraction,\n 'full',\n 'auto',\n themeContainer,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [\n {\n order: [\n isInteger,\n 'first',\n 'last',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: scaleUnambiguousSpacing() }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: [...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{ self: ['auto', ...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: scaleUnambiguousSpacing() }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: scaleUnambiguousSpacing() }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: scaleUnambiguousSpacing() }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: scaleUnambiguousSpacing() }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: scaleUnambiguousSpacing() }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: scaleUnambiguousSpacing() }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: scaleUnambiguousSpacing() }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: scaleUnambiguousSpacing() }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: scaleUnambiguousSpacing() }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: scaleMargin() }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: scaleMargin() }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: scaleMargin() }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: scaleMargin() }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: scaleMargin() }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: scaleMargin() }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: scaleMargin() }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: scaleMargin() }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: scaleMargin() }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{ 'space-y': scaleUnambiguousSpacing() }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n\n // --------------\n // --- Sizing ---\n // --------------\n\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{ size: scaleSizing() }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [\n {\n 'min-w': [\n themeContainer,\n 'screen',\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none',\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n themeContainer,\n 'screen',\n 'none',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n { screen: [themeBreakpoint] },\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{ h: ['screen', ...scaleSizing()] }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{ 'min-h': ['screen', 'none', ...scaleSizing()] }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{ 'max-h': ['screen', ...scaleSizing()] }],\n\n // ------------------\n // --- Typography ---\n // ------------------\n\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [\n { text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{ font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber] }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [\n {\n 'font-stretch': [\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n isPercent,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{ font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [\n { 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber] },\n ],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [\n { list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: scaleColor() }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: scaleColor() }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n {\n decoration: [\n isNumber,\n 'from-font',\n 'auto',\n isArbitraryVariable,\n isArbitraryLength,\n ],\n },\n ],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: scaleColor() }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [\n { 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: scaleUnambiguousSpacing() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // -------------------\n // --- Backgrounds ---\n // -------------------\n\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [\n { bg: [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition] },\n ],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [\n { bg: ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize] },\n ],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n {\n linear: [\n { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n },\n isArbitraryVariableImage,\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: scaleColor() }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: scaleColor() }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: scaleColor() }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: scaleColor() }],\n\n // ---------------\n // --- Borders ---\n // ---------------\n\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: scaleRadius() }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': scaleRadius() }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': scaleRadius() }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': scaleRadius() }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': scaleRadius() }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': scaleRadius() }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': scaleRadius() }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': scaleRadius() }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': scaleRadius() }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': scaleRadius() }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: scaleBorderWidth() }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{ 'divide-x': scaleBorderWidth() }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{ 'divide-y': scaleBorderWidth() }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: scaleColor() }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': scaleColor() }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': scaleColor() }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': scaleColor() }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': scaleColor() }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': scaleColor() }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': scaleColor() }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': scaleColor() }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': scaleColor() }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: scaleColor() }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [\n { 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [\n { outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: [themeColor] }],\n\n // ---------------\n // --- Effects ---\n // ---------------\n\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [\n {\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{ shadow: scaleColor() }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [\n {\n 'inset-shadow': [\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n themeInsetShadow,\n ],\n },\n ],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{ 'inset-shadow': scaleColor() }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{ ring: scaleBorderWidth() }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{ ring: scaleColor() }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{ 'ring-offset': scaleColor() }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\n\n // ---------------\n // --- Filters ---\n // ---------------\n\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [\n {\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: scaleBlur() }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [\n {\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeDropShadow,\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [\n {\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [\n { 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [\n { 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [\n { 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [\n { 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [\n { 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [\n { 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [\n { 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [\n { 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n\n // --------------\n // --- Tables ---\n // --------------\n\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n '',\n 'all',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [\n { ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------\n // --- Transforms ---\n // ------------------\n\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{ backface: ['hidden', 'visible'] }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [\n { perspective: [themePerspective, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{ 'perspective-origin': scaleOrigin() }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: scaleRotate() }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{ 'rotate-x': scaleRotate() }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{ 'rotate-y': scaleRotate() }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{ 'rotate-z': scaleRotate() }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: scaleScale() }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': scaleScale() }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': scaleScale() }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{ 'scale-z': scaleScale() }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{ skew: scaleSkew() }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': scaleSkew() }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': scaleSkew() }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [\n { transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu'] },\n ],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{ origin: scaleOrigin() }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{ transform: ['3d', 'flat'] }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{ translate: scaleTranslate() }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': scaleTranslate() }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': scaleTranslate() }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{ 'translate-z': scaleTranslate() }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: scaleColor() }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: scaleColor() }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [\n { scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light'] },\n ],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', '', 'y', 'x'] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n {\n 'will-change': [\n 'auto',\n 'scroll',\n 'contents',\n 'transform',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n\n // -----------\n // --- SVG ---\n // -----------\n\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: ['none', ...scaleColor()] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [\n {\n stroke: [\n isNumber,\n isArbitraryVariableLength,\n isArbitraryLength,\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-s',\n 'border-w-e',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-s',\n 'border-color-e',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n orderSensitiveModifiers: [\n 'before',\n 'after',\n 'placeholder',\n 'file',\n 'marker',\n 'selection',\n 'first-line',\n 'first-letter',\n 'backdrop',\n '*',\n '**',\n ],\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Returns the object if it is in the browser, otherwise returns an empty object.\n * This is useful for ensuring that the object is only used in the browser.\n * @param obj - The object to check.\n * @returns The object if it is in the browser, otherwise an empty object.\n */\nexport function useClient<T>(obj: T): T {\n if (typeof globalThis.window === 'undefined') {\n return {} as T;\n }\n return obj;\n}\n \n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n \n \n \n/**\n * ### Get the src of an image\n * #### Note: This should not be needed but importing `Images` is not consistent between various bundlers.\n * This function is used to get the src of an imported asset. It is used in the `Image` component.\n * @param image - The image to get the src of\n * @returns The src of the image\n * @example\n * getImageSrc('https://example.com/image.jpg') // 'https://example.com/image.jpg'\n * getImageSrc({ src: 'https://example.com/image.jpg' }) // 'https://example.com/image.jpg'\n * getImageSrc({ src: 'https://example.com/image.jpg', alt: 'Example Image' }) // 'https://example.com/image.jpg'\n *\n */\nexport function getImageSrc(image: string | { src: string } | any) {\n if (typeof image === 'string') {\n return image;\n }\n return image.src;\n}\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({\n className,\n wrapperClassName,\n type,\n required,\n error,\n ...props\n}: React.ComponentProps<'input'> & { error?: boolean, wrapperClassName?: string }) {\n return (\n <div className={cn('uii:relative', wrapperClassName)}>\n <input\n aria-invalid={error}\n type={type}\n data-slot=\"input\"\n className={cn(\n 'uii:border-input uii:file:text-foreground uii:placeholder:text-muted-foreground uii:selection:bg-primary uii:selection:text-primary-foreground uii:flex uii:h-9 uii:w-full uii:min-w-0 uii:rounded-sm uii:border uii:bg-transparent uii:px-3 uii:py-1 uii:text-base uii:shadow-xs uii:transition-[color,box-shadow] uii:outline-none uii:file:inline-flex uii:file:h-7 uii:file:border-0 uii:file:bg-transparent uii:file:text-sm uii:file:font-medium uii:disabled:pointer-events-none uii:disabled:cursor-not-allowed uii:disabled:opacity-50 uii:md:text-sm',\n 'uii:focus-visible:border-ring uii:focus-visible:ring-ring/50 uii:focus-visible:ring-[3px]',\n 'uii:aria-invalid:ring-destructive/20 uii:dark:aria-invalid:ring-destructive/40 uii:aria-invalid:border-destructive',\n {\n 'uii:pr-30': error,\n },\n className,\n )}\n {...props}\n />\n {error && (\n <span className=\"uii:absolute uii:inset-y-0 uii:right-0 uii:flex uii:items-center uii:pr-2 uii:border-l-10 uii:border-l-background uii:my-[6px] uii:pointer-events-none \">\n <span className=\"uii:bg-destructive uii:text-white uii:px-1.5 uii:py-1.5 uii:rounded-xs uii:uppercase uii:tracking-wide uii:font-medium uii:text-xs uii:leading-none uii:font-sans\">\n {error && required ? 'required' : 'error'}\n </span>\n </span>\n )}\n </div>\n );\n}\n\nexport { Input };\n","import { create } from 'zustand';\nimport { ExpressionModeState } from '../hooks/useExpressionMode';\n\ninterface ExpressionModeStore {\n // Store state by field name\n states: Record<string, ExpressionModeState>;\n\n // Actions\n setState: (fieldName: string, state: ExpressionModeState) => void;\n getState: (fieldName: string) => ExpressionModeState;\n clear: (fieldName: string) => void;\n\n // Helper actions\n switchToValue: (fieldName: string) => void;\n switchToExpression: (fieldName: string) => void;\n switchToEditor: (fieldName: string) => void;\n setExpression: (fieldName: string, expression: string) => void;\n setEditing: (fieldName: string, isEditing: boolean) => void;\n setCurrentValue: (fieldName: string, value: any) => void;\n setFullScreen: (fieldName: string, isFullScreen: boolean) => void;\n}\n\nconst defaultState: ExpressionModeState = {\n expression: '',\n mode: 'value',\n isEditing: false,\n currentValue: undefined,\n isFullScreen: false\n};\n\nexport const useExpressionModeStore = create<ExpressionModeStore>((set, get) => ({\n states: {},\n\n setState: (fieldName: string, state: ExpressionModeState) => {\n set((store) => ({\n states: {\n ...store.states,\n [fieldName]: state\n }\n }));\n },\n\n getState: (fieldName: string) => {\n const store = get();\n return store.states[fieldName] || defaultState;\n },\n\n clear: (fieldName: string) => {\n set((store) => ({\n states: {\n ...store.states,\n [fieldName]: defaultState\n }\n }));\n },\n\n switchToValue: (fieldName: string) => {\n const currentState = get().getState(fieldName);\n get().setState(fieldName, {\n ...currentState,\n mode: 'value',\n isEditing: false\n });\n },\n\n switchToExpression: (fieldName: string) => {\n const currentState = get().getState(fieldName);\n get().setState(fieldName, {\n ...currentState,\n mode: 'expression',\n isEditing: false\n });\n },\n\n switchToEditor: (fieldName: string) => {\n const currentState = get().getState(fieldName);\n get().setState(fieldName, {\n ...currentState,\n mode: 'expression',\n isEditing: true\n });\n },\n\n setExpression: (fieldName: string, expression: string) => {\n const currentState = get().getState(fieldName);\n get().setState(fieldName, {\n ...currentState,\n expression\n });\n },\n\n setEditing: (fieldName: string, isEditing: boolean) => {\n const currentState = get().getState(fieldName);\n get().setState(fieldName, {\n ...currentState,\n isEditing\n });\n },\n setFullScreen: (fieldName: string, isFullScreen: boolean) => {\n const currentState = get().getState(fieldName);\n get().setState(fieldName, {\n ...currentState,\n isFullScreen\n });\n },\n setCurrentValue: (fieldName: string, value: any) => {\n const currentState = get().getState(fieldName);\n get().setState(fieldName, {\n ...currentState,\n currentValue: value\n });\n }\n}));\n","import { useCallback } from 'react';\nimport { useExpressionModeStore } from '../stores/expressionModeStore';\n\nexport interface ExpressionModeState {\n expression: string;\n mode: 'value' | 'expression';\n isEditing: boolean;\n isFullScreen: boolean;\n currentValue?: any;\n}\n\nexport interface ExpressionModeControls {\n current: 'value' | 'expression';\n switchToValue: () => void;\n switchToExpression: () => void;\n switchToEditor: () => void;\n clear: () => void;\n isExpressionMode: boolean;\n isEditorMode: boolean;\n expression: string;\n setExpression: (expr: string) => void;\n isEditing: boolean;\n setEditing: (editing: boolean) => void;\n currentValue?: any;\n isFullScreen: boolean;\n setFullScreen: (isFullScreen: boolean) => void;\n setCurrentValue: (value: any) => void;\n\n localInput: string,\n\n setLocalInput: (value: any) => void;\n}\n\n/**\n * Hook for managing expression mode state using Zustand store\n * @param fieldName - Unique identifier for the field\n * @returns Expression mode controls and state\n */\nexport function useExpressionMode(fieldName: string): Omit<ExpressionModeControls, \"localInput\" | \"setLocalInput\"> {\n const store = useExpressionModeStore();\n const state = store.getState(fieldName);\n\n const switchToValue = useCallback(() => {\n store.switchToValue(fieldName);\n }, [store, fieldName]);\n\n const switchToExpression = useCallback(() => {\n store.switchToExpression(fieldName);\n }, [store, fieldName]);\n\n const switchToEditor = useCallback(() => {\n store.switchToEditor(fieldName);\n }, [store, fieldName]);\n\n const clear = useCallback(() => {\n store.clear(fieldName);\n }, [store, fieldName]);\n\n const setExpression = useCallback((expr: string) => {\n store.setExpression(fieldName, expr);\n }, [store, fieldName]);\n\n const setEditing = useCallback((editing: boolean) => {\n store.setEditing(fieldName, editing);\n }, [store, fieldName]);\n\n const setCurrentValue = useCallback((value: any) => {\n store.setCurrentValue(fieldName, value);\n }, [store, fieldName]);\n\n const setFullScreen = useCallback((isFullScreen: boolean) => {\n store.setFullScreen(fieldName, isFullScreen);\n }, [store, fieldName]);\n\n return {\n current: state.mode,\n switchToValue,\n switchToExpression,\n switchToEditor,\n clear,\n isExpressionMode: state.mode === 'expression',\n isEditorMode: state.isEditing,\n expression: state.expression,\n setExpression,\n isEditing: state.isEditing,\n setEditing,\n currentValue: state.currentValue,\n setCurrentValue,\n isFullScreen: state.isFullScreen,\n setFullScreen,\n };\n}\n","import React, { useRef, useEffect, useCallback } from 'react';\nimport { Editor } from '@monaco-editor/react';\nimport { cn } from '@/lib/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSpinner } from '@fortawesome/pro-regular-svg-icons';\n\nexport interface ExpressionContext {\n [key: string]: any;\n}\n\nexport interface InlineExpressionEditorProps {\n value: string;\n onChange: (value: string) => void;\n onBlur?: (e: any) => void;\n onEnter?: () => void; // Called when Enter is pressed (to switch to full-screen)\n onTypeInferred?: (type: string) => void; // Callback when TypeScript infers the type\n onValidationChange?: (isValid: boolean, errors: any[]) => void;\n context?: ExpressionContext;\n className?: string;\n placeholder?: string;\n}\n\nexport interface FullPanelExpressionEditorProps {\n value: string;\n onChange: (value: string) => void;\n onClose: () => void;\n onBlur?: (e: any) => void;\n onTypeInferred?: (type: string) => void; // Callback when TypeScript infers the type\n context?: ExpressionContext;\n className?: string;\n placeholder?: string;\n}\n\n/**\n * Shared function to infer TypeScript type from an expression\n * Used by both inline and full-screen editors\n * Returns 'error' if there are Monaco validation errors\n */\nasync function inferTypeFromMonaco(\n editor: any,\n monaco: any,\n expression: string,\n logPrefix: string = '🔷'\n): Promise<string | null> {\n if (!expression.trim()) {\n console.log(`${logPrefix} Type inference skipped - no expression`);\n return null;\n }\n \n // Only infer type if THIS editor has focus\n if (!editor.hasTextFocus()) {\n console.log(`${logPrefix} Skipping type inference - editor does not have focus`);\n return null;\n }\n\n console.log(`${logPrefix} Running type inference, expression:`, expression);\n\n try {\n // Check for Monaco validation errors first\n const currentModel = editor.getModel();\n if (currentModel) {\n const markers = monaco.editor.getModelMarkers({ resource: currentModel.uri });\n const hasErrors = markers.some((marker: any) => marker.severity === monaco.MarkerSeverity.Error);\n \n if (hasErrors) {\n console.log(`${logPrefix} Type inference skipped - expression has validation errors`);\n return 'error';\n }\n }\n\n // Create a temporary model with the expression wrapped\n // This allows TypeScript to infer the type properly\n const wrappedCode = `const __expr__ = (${expression});`;\n const tempModel = monaco.editor.createModel(wrappedCode, 'typescript');\n \n // Get TypeScript worker\n const worker = await monaco.languages.typescript.getTypeScriptWorker();\n const client = await worker(tempModel.uri);\n\n // Find position of __expr__ variable\n const exprIndex = wrappedCode.indexOf('__expr__');\n const position = tempModel.getPositionAt(exprIndex);\n\n const quickInfo = await client.getQuickInfoAtPosition(\n tempModel.uri.toString(),\n tempModel.getOffsetAt(position)\n );\n\n console.log(`${logPrefix} QuickInfo response:`, quickInfo);\n\n let extractedType: string | null = null;\n\n if (quickInfo && quickInfo.displayParts) {\n // Extract type from displayParts\n let foundColon = false;\n const typeParts: any[] = [];\n \n for (const part of quickInfo.displayParts) {\n if (foundColon) typeParts.push(part);\n if (part.kind === 'punctuation' && part.text === ':' && !foundColon) {\n const prevPart = quickInfo.displayParts[quickInfo.displayParts.indexOf(part) - 1];\n if (prevPart && (prevPart.kind === 'localName' || prevPart.kind === 'parameterName')) {\n foundColon = true;\n }\n }\n }\n\n if (typeParts.length > 0) {\n const typeString = typeParts.map((p: any) => p.text).join('').trim();\n console.log(`${logPrefix} Extracted type:`, typeString);\n if (typeString && typeString !== 'any') {\n extractedType = typeString;\n }\n }\n }\n \n // Clean up temporary model\n tempModel.dispose();\n return extractedType;\n } catch (error) {\n console.warn(`${logPrefix} Type inference failed:`, error);\n return null;\n }\n}\n\n// Monaco options to match Input component styling\nconst InlineEditorOptions = {\n fontSize: '14px', // md:text-sm\n fontWeight: 'normal',\n wordWrap: 'off',\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n overviewRulerLanes: 0,\n overviewRulerBorder: false,\n hideCursorInOverviewRuler: true,\n lineDecorationsWidth: 0,\n glyphMargin: false,\n folding: false,\n scrollBeyondLastColumn: 0,\n scrollbar: {\n horizontal: 'hidden',\n vertical: 'hidden',\n alwaysConsumeMouseWheel: false,\n },\n find: {\n addExtraSpaceOnTop: false,\n autoFindInSelection: 'never',\n seedSearchStringFromSelection: false,\n },\n minimap: { enabled: false },\n wordBasedSuggestions: true, // Enable for better UX\n links: false,\n occurrencesHighlight: false,\n cursorStyle: 'line', // Match input cursor\n renderLineHighlight: 'none',\n contextmenu: false,\n roundedSelection: false,\n hover: {\n delay: 300,\n },\n acceptSuggestionOnEnter: 'on',\n automaticLayout: true,\n fixedOverflowWidgets: true,\n // Match Input component styling\n padding: { top: 4, bottom: 4 }, // py-1 equivalent\n fontFamily: 'inherit', // Use system font\n letterSpacing: 'normal',\n lineHeight: 'normal',\n} as any;\n\nconst FullPanelEditorOptions = {\n fontSize: '14px',\n fontWeight: 'normal',\n wordWrap: 'on',\n lineNumbers: 'on',\n lineNumbersMinChars: 3,\n overviewRulerLanes: 3,\n overviewRulerBorder: true,\n hideCursorInOverviewRuler: false,\n lineDecorationsWidth: 10,\n glyphMargin: true,\n folding: true,\n scrollBeyondLastColumn: 5,\n scrollbar: {\n horizontal: 'auto',\n vertical: 'auto',\n alwaysConsumeMouseWheel: false,\n },\n find: {\n addExtraSpaceOnTop: false,\n autoFindInSelection: 'never',\n seedSearchStringFromSelection: false,\n },\n minimap: { enabled: true },\n wordBasedSuggestions: true,\n links: true,\n occurrencesHighlight: true,\n cursorStyle: 'line',\n renderLineHighlight: 'line',\n contextmenu: true,\n roundedSelection: true,\n hover: {\n delay: 300,\n },\n // IMPORTANT: Don't accept suggestions on Enter - let Enter create new lines\n acceptSuggestionOnEnter: 'off',\n automaticLayout: true,\n fixedOverflowWidgets: true,\n readOnly: false, // Explicitly allow editing\n domReadOnly: false, // Allow DOM manipulation\n} as any;\n\n/**\n * Inline Monaco editor for expressions - based on your SingleLineEditor\n */\nexport function InlineExpressionEditor({\n value,\n onChange,\n onBlur,\n onEnter,\n onTypeInferred,\n onValidationChange,\n context = {},\n className,\n placeholder = 'Enter expression...',\n}: InlineExpressionEditorProps) {\n const editorRef = useRef<any>(null);\n const monacoRef = useRef<any>(null);\n const typeInferenceTimeoutRef = useRef<any>(null);\n\n const handleEditorWillMount = (monaco: any) => {\n monacoRef.current = monaco;\n\n // Add context variables to completion\n const contextKeys = Object.keys(context);\n if (contextKeys.length > 0) {\n monaco.languages.typescript.javascriptDefaults.addExtraLib(`\n declare const ${contextKeys.join(', ')}: any;\n `, 'context.d.ts');\n }\n };\n\n const handleEditorDidMount = (editor: any, monaco: any) => {\n editorRef.current = editor;\n\n // Apply your proven configuration\n editor.updateOptions(InlineEditorOptions);\n\n console.log('🔷 Inline editor mounted!');\n\n // Use CSS filter to invert colors for inline editor (light theme effect)\n const editorElement = editor.getDomNode();\n // if (editorElement) {\n // // editorElement.style = editorElement.style + \" background-color: #1e1e1e !important;\";\n // // editorElement.style.filter = 'invert(1) hue-rotate(180deg)';\n // }\n\n // Disable Find widget\n const findCommand = editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_F, () => { });\n\n // Handle Enter and Shift+Enter using onKeyDown\n const enterKeyDisposable = editor.onKeyDown((e: any) => {\n if (e.keyCode === monaco.KeyCode.Enter) {\n // Only handle if THIS editor has focus\n if (!editor.hasTextFocus()) {\n console.log('🔷 Enter keydown but inline editor does NOT have focus - allowing default');\n return;\n }\n \n // Check if Shift is pressed (Shift+Enter)\n if (e.shiftKey) {\n console.log('🔷 Shift+Enter in INLINE editor - switching to full-screen');\n e.preventDefault();\n e.stopPropagation();\n // Switch to full-screen for multi-line editing\n if (onEnter) {\n onEnter();\n }\n return;\n }\n \n // Regular Enter (no Shift)\n // Check if autocomplete is visible\n const suggestWidget = editor._contentWidgets?.['editor.widget.suggestWidget'];\n const isSuggestVisible = \n suggestWidget?.widget &&\n !suggestWidget.widget._hidden &&\n suggestWidget.widget.state !== undefined &&\n suggestWidget.widget.state !== 0;\n \n const contextKeyService = editor._contextKeyService;\n const suggestWidgetVisible = contextKeyService?.getContextKeyValue?.('suggestWidgetVisible');\n \n if (isSuggestVisible || suggestWidgetVisible) {\n console.log('🔷 Enter in INLINE editor - accepting autocomplete');\n e.preventDefault();\n e.stopPropagation();\n editor.trigger('', 'acceptSelectedSuggestion');\n } else {\n console.log('🔷 Enter in INLINE editor - blurring (finishing edit)');\n e.preventDefault();\n e.stopPropagation();\n // Blur to finish editing\n onBlur?.({});\n }\n }\n });\n\n // Handle paste - remove line breaks (like your implementation)\n editor.onDidPaste((e: any) => {\n if (e.endLineNumber <= 1) {\n return;\n }\n let newContent = '';\n const textModel = editor.getModel();\n const lineCount = textModel.getLineCount();\n for (let i = 0; i < lineCount; i += 1) {\n newContent += textModel.getLineContent(i + 1);\n }\n textModel.setValue(newContent);\n editor.setPosition({ column: newContent.length + 1, lineNumber: 1 });\n });\n\n // Handle blur - switch to expression mode when editor loses focus\n editor.onDidBlurEditorText((e: any) => {\n const currentValue = editor.getValue();\n onBlur?.({ ...e, currentValue });\n });\n\n // Track validation errors on content change\n editor.onDidChangeModelContent(() => {\n const model = editor.getModel();\n if (model) {\n // Validation\n if (onValidationChange) {\n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n const hasErrors = markers.some((marker: any) => marker.severity === monaco.MarkerSeverity.Error);\n onValidationChange(!hasErrors, markers);\n }\n \n // Debounce type inference - will be cancelled if errors appear via marker change listener\n if (onTypeInferred) {\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n }\n \n console.log('🔷 Content changed - debouncing type inference');\n typeInferenceTimeoutRef.current = setTimeout(async () => {\n const expressionToAnalyze = model.getValue();\n const inferredType = await inferTypeFromMonaco(editor, monaco, expressionToAnalyze, '🔷');\n if (inferredType) {\n onTypeInferred(inferredType);\n }\n }, 200); // Reduced from 500ms to 200ms for better responsiveness\n }\n }\n });\n \n // Listen to MONACO'S marker changes - fires when TypeScript detects errors\n const markerChangeDisposable = monaco.editor.onDidChangeMarkers((uris: any[]) => {\n const model = editor.getModel();\n if (!model || !onTypeInferred) return;\n \n // Check if this marker change is for our model\n const isOurModel = uris.some((uri: any) => uri.toString() === model.uri.toString());\n if (!isOurModel) return;\n \n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n const hasErrors = markers.some((marker: any) => marker.severity === monaco.MarkerSeverity.Error);\n \n console.log('🔷 Monaco markers changed - hasErrors:', hasErrors);\n \n if (hasErrors) {\n // Cancel any pending type inference and immediately set to error\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n typeInferenceTimeoutRef.current = null;\n }\n console.log('🔷 ERROR detected - immediately setting type to error');\n onTypeInferred('error');\n } else {\n // Errors cleared - trigger type inference\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n }\n console.log('🔷 Errors cleared - triggering type inference');\n typeInferenceTimeoutRef.current = setTimeout(async () => {\n const expressionToAnalyze = model.getValue();\n const inferredType = await inferTypeFromMonaco(editor, monaco, expressionToAnalyze, '🔷');\n if (inferredType) {\n onTypeInferred(inferredType);\n }\n }, 100); // Shorter delay when recovering from error\n }\n });\n\n // Disable F1 command palette\n editor.addCommand(monaco.KeyCode.F1, () => { });\n\n // Add immediate type inference on cursor movement (for better responsiveness)\n const cursorDisposable = editor.onDidChangeCursorPosition(async () => {\n if (onTypeInferred && editor.hasTextFocus()) {\n const model = editor.getModel();\n if (model && model.getValue().trim()) {\n // Clear any pending debounced inference\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n }\n \n // Immediate type inference on cursor movement\n const expressionToAnalyze = model.getValue();\n const inferredType = await inferTypeFromMonaco(editor, monaco, expressionToAnalyze, '🔷');\n if (inferredType) {\n onTypeInferred(inferredType);\n }\n }\n }\n });\n\n // Set cursor to end and focus\n editor.setPosition({\n lineNumber: 1,\n column: 999999,\n });\n\n window.requestAnimationFrame(() => {\n editor.focus();\n \n // Trigger initial type inference after editor settles\n setTimeout(async () => {\n const model = editor.getModel();\n if (onTypeInferred && model && model.getValue()) {\n console.log('🔷 Triggering initial type inference for inline editor');\n \n // Check for errors first\n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n const hasErrors = markers.some((marker: any) => marker.severity === monaco.MarkerSeverity.Error);\n \n if (hasErrors) {\n onTypeInferred('error');\n } else {\n const expressionToAnalyze = model.getValue();\n const inferredType = await inferTypeFromMonaco(editor, monaco, expressionToAnalyze, '🔷');\n if (inferredType) {\n onTypeInferred(inferredType);\n }\n }\n }\n }, 100);\n });\n\n // Store disposables for cleanup\n editorRef.current._inlineDisposables = {\n enterKeyDisposable,\n findCommand,\n markerChangeDisposable,\n cursorDisposable\n };\n };\n\n // Cleanup when unmounting\n useEffect(() => {\n return () => {\n if (editorRef.current) {\n console.log('🔷 Inline editor unmounting - cleaning up');\n // Clear type inference timeout\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n }\n // Dispose of event listeners\n if (editorRef.current._inlineDisposables) {\n const disposables = editorRef.current._inlineDisposables;\n disposables.enterKeyDisposable?.dispose?.();\n disposables.findCommand?.dispose?.();\n disposables.markerChangeDisposable?.dispose?.();\n disposables.cursorDisposable?.dispose?.();\n }\n editorRef.current = null;\n }\n };\n }, []);\n\n const handleEditorChange = (newValue: string | undefined) => {\n onChange(newValue || '');\n };\n\n return (\n <div className={cn(\"uii:relative uii:flex-1\", className)}>\n <Editor\n theme=\"vs-dark\"\n height=\"26px\"\n language=\"typescript\"\n value={value}\n onChange={handleEditorChange}\n onMount={handleEditorDidMount}\n beforeMount={handleEditorWillMount}\n width=\"100%\"\n loading={<><FontAwesomeIcon icon={faSpinner} className=\"uii:animate-spin\" /></>}\n options={InlineEditorOptions}\n className=\"uii:-ml-[4px] uii:-mt-[1px] inline-editor\"\n />\n {!value && (\n <div className=\"uii:absolute uii:inset-0 uii:flex uii:items-center uii:pointer-events-none uii:text-muted-foreground uii:text-sm\">\n {placeholder}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Full panel Monaco editor for expressions\n */\nexport function FullPanelExpressionEditor({\n value,\n onChange,\n onClose,\n onBlur,\n onTypeInferred,\n context = {},\n className,\n placeholder = 'Enter expression...',\n}: FullPanelExpressionEditorProps) {\n const editorRef = useRef<any>(null);\n const monacoRef = useRef<any>(null);\n const typeInferenceTimeoutRef = useRef<any>(null);\n\n const handleEditorWillMount = (monaco: any) => {\n monacoRef.current = monaco;\n\n // Add context variables to completion\n const contextKeys = Object.keys(context);\n if (contextKeys.length > 0) {\n monaco.languages.typescript.javascriptDefaults.addExtraLib(`\n declare const ${contextKeys.join(', ')}: any;\n `, 'context.d.ts');\n }\n };\n\n const handleFPEditorDidMount = (editor: any, monaco: any) => {\n editorRef.current = editor;\n\n // Apply full panel configuration\n editor.updateOptions(FullPanelEditorOptions);\n\n console.log('🟦 FULL-SCREEN panel editor mounted!');\n console.log('Full-screen editor is read-only?', editor.getOption(monaco.editor.EditorOption.readOnly));\n\n // Handle Escape and Enter with onKeyDown\n const escapeKeyDisposable = editor.onKeyDown((e: any) => {\n if (e.keyCode === monaco.KeyCode.Escape) {\n console.log('🟦 Escape pressed in FULL-SCREEN editor - closing');\n e.preventDefault();\n e.stopPropagation();\n onClose();\n }\n \n // Handle Enter key - check for autocomplete first\n if (e.keyCode === monaco.KeyCode.Enter) {\n // Check if suggestion widget is visible\n const suggestWidget = editor._contentWidgets?.['editor.widget.suggestWidget'];\n const isSuggestVisible = \n suggestWidget?.widget &&\n !suggestWidget.widget._hidden &&\n suggestWidget.widget.state !== undefined &&\n suggestWidget.widget.state !== 0;\n \n const contextKeyService = editor._contextKeyService;\n const suggestWidgetVisible = contextKeyService?.getContextKeyValue?.('suggestWidgetVisible');\n \n if (isSuggestVisible || suggestWidgetVisible) {\n console.log('🟦 Enter in FULL-SCREEN - accepting autocomplete');\n e.preventDefault();\n e.stopPropagation();\n editor.trigger('', 'acceptSelectedSuggestion');\n } else {\n console.log('🟦 Enter in FULL-SCREEN - allowing newline (default behavior)');\n // Don't prevent default - let Monaco insert newline\n }\n }\n });\n\n // Track content changes\n let changeCount = 0;\n const changeDisposable = editor.onDidChangeModelContent((e: any) => {\n changeCount++;\n const newValue = editor.getValue();\n console.log(`🟦 FULL-SCREEN content changed (${changeCount}):`, newValue);\n console.log(`🟦 Line count: ${editor.getModel()?.getLineCount()}`);\n \n // Debounce type inference - will be cancelled if errors appear via marker change listener\n if (onTypeInferred) {\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n }\n \n console.log('🟦 Content changed - debouncing type inference');\n typeInferenceTimeoutRef.current = setTimeout(async () => {\n const expressionToAnalyze = newValue;\n const inferredType = await inferTypeFromMonaco(editor, monaco, expressionToAnalyze, '🟦');\n if (inferredType) {\n onTypeInferred(inferredType);\n }\n }, 200); // Reduced from 500ms to 200ms for better responsiveness\n }\n });\n \n // Listen to MONACO'S marker changes - fires when TypeScript detects errors\n const markerChangeDisposable = monaco.editor.onDidChangeMarkers((uris: any[]) => {\n const model = editor.getModel();\n if (!model || !onTypeInferred) return;\n \n // Check if this marker change is for our model\n const isOurModel = uris.some((uri: any) => uri.toString() === model.uri.toString());\n if (!isOurModel) return;\n \n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n const hasErrors = markers.some((marker: any) => marker.severity === monaco.MarkerSeverity.Error);\n \n console.log('🟦 Monaco markers changed - hasErrors:', hasErrors);\n \n if (hasErrors) {\n // Cancel any pending type inference and immediately set to error\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n typeInferenceTimeoutRef.current = null;\n }\n console.log('🟦 ERROR detected - immediately setting type to error');\n onTypeInferred('error');\n } else {\n // Errors cleared - trigger type inference\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n }\n console.log('🟦 Errors cleared - triggering type inference');\n typeInferenceTimeoutRef.current = setTimeout(async () => {\n const expressionToAnalyze = model.getValue();\n const inferredType = await inferTypeFromMonaco(editor, monaco, expressionToAnalyze, '🟦');\n if (inferredType) {\n onTypeInferred(inferredType);\n }\n }, 100); // Shorter delay when recovering from error\n }\n });\n\n // Handle blur - switch to expression mode when editor loses focus\n editor.onDidBlurEditorText((e: any) => {\n const currentValue = editor.getValue();\n onBlur?.({ ...e, currentValue });\n });\n\n // Focus the editor and position cursor at the end\n const model = editor.getModel();\n if (model) {\n const lineCount = model.getLineCount();\n const lastLineLength = model.getLineLength(lineCount);\n editor.setPosition({ lineNumber: lineCount, column: lastLineLength + 1 });\n }\n editor.focus();\n\n // Trigger initial type inference after a short delay (let editor settle)\n setTimeout(async () => {\n if (onTypeInferred && model) {\n console.log('🟦 Triggering initial type inference for full-screen editor');\n \n // Check for errors first\n const markers = monaco.editor.getModelMarkers({ resource: model.uri });\n const hasErrors = markers.some((marker: any) => marker.severity === monaco.MarkerSeverity.Error);\n \n if (hasErrors) {\n console.log('🟦 Initial load has error - setting type to error');\n onTypeInferred('error');\n } else {\n const expressionToAnalyze = model.getValue();\n const inferredType = await inferTypeFromMonaco(editor, monaco, expressionToAnalyze, '🟦');\n if (inferredType) {\n onTypeInferred(inferredType);\n }\n }\n }\n }, 100);\n\n // Add immediate type inference on cursor movement (for better responsiveness)\n const cursorDisposable = editor.onDidChangeCursorPosition(async () => {\n if (onTypeInferred && editor.hasTextFocus()) {\n const model = editor.getModel();\n if (model && model.getValue().trim()) {\n // Clear any pending debounced inference\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n }\n \n // Immediate type inference on cursor movement\n const expressionToAnalyze = model.getValue();\n const inferredType = await inferTypeFromMonaco(editor, monaco, expressionToAnalyze, '🟦');\n if (inferredType) {\n onTypeInferred(inferredType);\n }\n }\n }\n });\n\n // Store disposables for cleanup\n editorRef.current._fullScreenDisposables = {\n escapeKeyDisposable,\n changeDisposable,\n markerChangeDisposable,\n cursorDisposable\n };\n };\n\n // Cleanup when unmounting\n useEffect(() => {\n return () => {\n if (editorRef.current) {\n console.log('🟦 Full-screen editor unmounting - cleaning up');\n // Clear type inference timeout\n if (typeInferenceTimeoutRef.current) {\n clearTimeout(typeInferenceTimeoutRef.current);\n }\n // Dispose of event listeners\n if (editorRef.current._fullScreenDisposables) {\n const disposables = editorRef.current._fullScreenDisposables;\n disposables.escapeKeyDisposable?.dispose?.();\n disposables.changeDisposable?.dispose?.();\n disposables.markerChangeDisposable?.dispose?.();\n disposables.cursorDisposable?.dispose?.();\n }\n editorRef.current = null;\n }\n };\n }, []);\n\n const handleEditorChange = (newValue: string | undefined) => {\n onChange(newValue || '');\n };\n\n return (\n <div\n className={cn(\n \"uii:relative uii:border uii:rounded-md uii:bg-background\",\n className\n )}\n >\n <div className=\"uii:flex uii:items-center uii:justify-between uii:p-2 uii:border-b uii:bg-muted/50\">\n <span className=\"uii:text-sm uii:font-medium\">Expression Editor</span>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"uii:text-muted-foreground hover:uii:text-foreground uii:p-1 uii:rounded uii:cursor-pointer uii:text-xs\"\n >\n ✕\n </button>\n </div>\n <Editor\n height=\"300px\"\n theme=\"vs-dark\"\n language=\"typescript\"\n value={value}\n onChange={handleEditorChange}\n onMount={handleFPEditorDidMount}\n beforeMount={handleEditorWillMount}\n options={FullPanelEditorOptions}\n />\n {!value && (\n <div className=\"uii:absolute uii:inset-0 uii:flex uii:items-center uii:justify-center uii:pointer-events-none uii:text-muted-foreground\">\n {placeholder}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useRef } from 'react';\n\ninterface ASTNode {\n type: string;\n value?: string;\n start: number;\n end: number;\n children: ASTNode[];\n name?: string;\n operator?: string;\n left?: ASTNode;\n right?: ASTNode;\n argument?: ASTNode;\n object?: ASTNode;\n property?: ASTNode;\n index?: ASTNode;\n elements?: ASTNode[];\n params?: ASTNode[];\n raw?: string;\n callee?: ASTNode;\n arguments?: ASTNode[];\n kind?: string;\n text?: string;\n}\n\ninterface ParseResult {\n ast: ASTNode | null;\n tokens: Array<{type: string, value: string, start: number, end: number}>;\n dependencies: string[];\n error?: string;\n}\n\ninterface UseASTParserResult {\n ast: ASTNode | null;\n tokens: Array<{type: string, value: string, start: number, end: number}>;\n dependencies: string[];\n isLoading: boolean;\n error: string | null;\n}\n\nexport function useASTParser(expression: string, controlKey?: string): UseASTParserResult {\n const [ast, setAST] = useState<ASTNode | null>(null);\n const [tokens, setTokens] = useState<Array<{type: string, value: string, start: number, end: number}>>([]);\n const [dependencies, setDependencies] = useState<string[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const requestIdRef = useRef<number>(0);\n const messageHandlerRef = useRef<((event: MessageEvent) => void) | null>(null);\n const controlKeyRef = useRef<string>(controlKey || 'default');\n \n // Update controlKey ref when prop changes\n useEffect(() => {\n controlKeyRef.current = controlKey || 'default';\n }, [controlKey]);\n\n // Initialize service worker message listener\n useEffect(() => {\n if (typeof window === 'undefined' || !navigator.serviceWorker) {\n setError('Service worker not available');\n return;\n }\n\n // Create message handler\n const handleMessage = (event: MessageEvent) => {\n if (event.data.type === 'AST_PARSE_RESULT') {\n const { id, controlKey, result } = event.data.payload;\n // Match by both request ID and control key to avoid cross-control contamination\n if (id === requestIdRef.current && controlKey === controlKeyRef.current) {\n console.log('Service worker AST response:', { id, controlKey, result });\n setAST(result.ast);\n setTokens(result.tokens);\n setDependencies(result.dependencies || []);\n setError(result.error || null);\n setIsLoading(false);\n } else {\n console.log('Ignoring AST response - wrong control:', { \n receivedId: id, \n expectedId: requestIdRef.current,\n receivedKey: controlKey,\n expectedKey: controlKeyRef.current\n });\n }\n }\n };\n\n messageHandlerRef.current = handleMessage;\n navigator.serviceWorker.addEventListener('message', handleMessage);\n\n return () => {\n if (messageHandlerRef.current) {\n navigator.serviceWorker.removeEventListener('message', messageHandlerRef.current);\n }\n };\n }, []);\n\n // Parse expression when it changes\n useEffect(() => {\n if (!expression.trim()) {\n setAST(null);\n setTokens([]);\n setDependencies([]);\n setError(null);\n setIsLoading(false);\n return;\n }\n\n if (!navigator.serviceWorker || !navigator.serviceWorker.controller) {\n setError('Service worker not ready');\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n requestIdRef.current++;\n \n console.log('Sending expression to service worker:', { \n expression: expression.trim(), \n controlKey: controlKeyRef.current,\n id: requestIdRef.current \n });\n \n // Send message to service worker with control key\n navigator.serviceWorker.controller.postMessage({\n type: 'PARSE_AST',\n payload: {\n expression: expression.trim(),\n id: requestIdRef.current,\n controlKey: controlKeyRef.current\n }\n });\n }, [expression]);\n\n return {\n ast,\n tokens,\n dependencies,\n isLoading,\n error\n };\n}","import React from 'react';\nimport { cn } from '@/lib/utils';\n\ninterface ASTNode {\n type: string;\n value?: string;\n start: number;\n end: number;\n children: ASTNode[];\n name?: string;\n operator?: string;\n left?: ASTNode;\n right?: ASTNode;\n argument?: ASTNode;\n object?: ASTNode;\n property?: ASTNode;\n index?: ASTNode;\n elements?: ASTNode[];\n params?: ASTNode[];\n}\n\ninterface ASTRendererProps {\n ast: ASTNode | null;\n key?: string;\n className?: string;\n variant?: 'inline' | 'tree' | 'compact';\n showTokens?: boolean;\n tokens?: Array<{ type: string, value: string, start: number, end: number }>;\n}\n\nexport function ASTRenderer({\n ast, key,\n className,\n variant = 'inline',\n showTokens = false,\n tokens = []\n}: ASTRendererProps) {\n\n const getNodeColor = (type: string): string => {\n switch (type) {\n case 'StringLiteral':\n return 'uii:text-green-600 uii:bg-green-100';\n case 'NumericLiteral':\n return 'uii:text-purple-600 uii:bg-purple-100';\n case 'Identifier':\n return 'uii:text-blue-600 uii:bg-blue-100';\n case 'Keyword':\n case 'Literal':\n return 'uii:text-orange-600 uii:bg-orange-100';\n case 'BinaryExpression':\n return 'uii:text-gray-700 uii:bg-gray-100';\n case 'CallExpression':\n return 'uii:text-indigo-600 uii:bg-indigo-100';\n case 'MemberExpression':\n return 'uii:text-cyan-600 uii:bg-cyan-100';\n case 'UnaryExpression':\n return 'uii:text-pink-600 uii:bg-pink-100';\n case 'ParenthesizedExpression':\n return 'uii:text-yellow-600 uii:bg-yellow-100';\n default:\n return 'uii:text-gray-600 uii:bg-gray-100';\n }\n };\n\n const renderInlineNode = (node: ASTNode, depth: number = 0): React.ReactNode => {\n if (depth > 2) return null; // Limit depth for inline display\n\n // For inline display, show a simplified view\n if (node.type === 'Identifier') {\n return (\n <span key={`${node.start}-${node.end}`} className=\"uii:inline-flex uii:items-center uii:mr-1\">\n <span className=\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:bg-blue-100 uii:text-blue-800 uii:font-mono\">\n {node.name || node.value}\n </span>\n </span>\n );\n }\n\n if (node.type === 'StringLiteral' || node.type === 'NumericLiteral') {\n return (\n <span key={`${node.start}-${node.end}`} className=\"uii:inline-flex uii:items-center uii:mr-1\">\n <span className=\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:bg-green-100 uii:text-green-800 uii:font-mono\">\n {node.value}\n </span>\n </span>\n );\n }\n\n if (node.type === 'BinaryExpression') {\n return (\n <span key={`${node.start}-${node.end}`} className=\"uii:inline-flex uii:items-center uii:mr-1\">\n {node.left && renderInlineNode(node.left, depth + 1)}\n <span className=\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:bg-purple-100 uii:text-purple-800 uii:font-mono uii:mx-1\">\n {node.operator}\n </span>\n {node.right && renderInlineNode(node.right, depth + 1)}\n </span>\n );\n }\n\n if (node.type === 'CallExpression') {\n return (\n <span key={`${node.start}-${node.end}`} className=\"uii:inline-flex uii:items-center uii:mr-1\">\n {(node as any).callee && renderInlineNode((node as any).callee, depth + 1)}\n <span className=\"text-xs text-gray-600\">()</span>\n </span>\n );\n }\n\n if (node.type === 'PropertyAccessExpression') {\n return (\n <span key={`${node.start}-${node.end}`} className=\"uii:inline-flex uii:items-center uii:mr-1\">\n {node.object && renderInlineNode(node.object, depth + 1)}\n <span className=\"text-xs text-gray-600\">.</span>\n {node.property && renderInlineNode(node.property, depth + 1)}\n </span>\n );\n }\n\n // For other types, show a simplified version\n return (\n <span key={`${node.start}-${node.end}`} className=\"uii:inline-flex uii:items-center uii:mr-1\">\n <span className=\"px-1 py-0.5 rounded text-xs bg-gray-100 text-gray-600 font-mono\">\n {node.type}\n </span>\n </span>\n );\n };\n\n const renderTreeNode = (node: ASTNode, depth: number = 0): React.ReactNode => {\n if (depth > 4) return null; // Limit depth to prevent excessive nesting\n\n const indent = ' '.repeat(depth);\n\n return (\n <div key={`${node.start}-${node.end}`} className=\"font-mono text-xs\">\n <div className=\"uii:flex uii:items-start uii:gap-2\">\n <span className=\"uii:text-gray-400\">{indent}</span>\n <span className={cn(\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:font-semibold\", getNodeColor(node.type))}>\n {node.type}\n </span>\n {node.value && (\n <span className=\"uii:text-green-600\">\"{node.value}\"</span>\n )}\n {node.operator && (\n <span className=\"uii:text-purple-600\">{node.operator}</span>\n )}\n {node.name && (\n <span className=\"uii:text-blue-600\">{node.name}</span>\n )}\n </div>\n\n {/* Render specific properties more concisely - only if they exist */}\n {/* Don't render children array if we have specific properties to avoid duplication */}\n {node.left && (\n <div className=\"uii:ml-2\">\n <span className=\"uii:text-gray-500 uii:text-xs\">left: </span>\n {renderTreeNode(node.left, depth + 1)}\n </div>\n )}\n {node.right && (\n <div className=\"uii:ml-2\">\n <span className=\"uii:text-gray-500 uii:text-xs\">right: </span>\n {renderTreeNode(node.right, depth + 1)}\n </div>\n )}\n {node.argument && (\n <div className=\"uii:ml-2\">\n <span className=\"uii:text-gray-500 uii:text-xs\">arg: </span>\n {renderTreeNode(node.argument, depth + 1)}\n </div>\n )}\n {node.object && (\n <div className=\"uii:ml-2\">\n <span className=\"uii:text-gray-500 uii:text-xs\">obj: </span>\n {renderTreeNode(node.object, depth + 1)}\n </div>\n )}\n {node.property && (\n <div className=\"uii:ml-2\">\n <span className=\"uii:text-gray-500 uii:text-xs\">prop: </span>\n {renderTreeNode(node.property, depth + 1)}\n </div>\n )}\n {node.index && (\n <div className=\"uii:ml-2\">\n <span className=\"uii:text-gray-500 uii:text-xs\">idx: </span>\n {renderTreeNode(node.index, depth + 1)}\n </div>\n )}\n\n {/* Only render children array if we don't have specific properties (to avoid duplication) */}\n {!node.left && !node.right && !node.argument && !node.object && !node.property && !node.index &&\n node.children && node.children.length > 0 && (\n <div className=\"uii:ml-2\">\n {node.children.slice(0, 3).map((child, index) => renderTreeNode(child, depth + 1))}\n {node.children.length > 3 && (\n <div className=\"uii:ml-2 uii:text-gray-500 uii:text-xs\">\n ... and {node.children.length - 3} more\n </div>\n )}\n </div>\n )}\n </div>\n );\n };\n\n const renderTokens = (): React.ReactNode => {\n if (tokens.length === 0) return null;\n\n // Show only the first 10 tokens to avoid overwhelming the UI\n const displayTokens = tokens.slice(0, 10);\n\n return (\n <div className=\"uii:space-y-2\">\n <div className=\"uii:text-sm uii:font-semibold uii:text-gray-700\">\n Tokens {tokens.length > 10 && `(${tokens.length} total)`}:\n </div>\n <div className=\"uii:flex uii:flex-wrap uii:gap-1\">\n {displayTokens.map((token, index) => (\n <span\n key={index}\n className={cn(\n \"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:font-mono\",\n token.type.includes('Keyword') && \"uii:bg-blue-100 uii:text-blue-800\",\n token.type.includes('Identifier') && \"uii:bg-green-100 uii:text-green-800\",\n token.type.includes('String') && \"uii:bg-yellow-100 uii:text-yellow-800\",\n token.type.includes('Numeric') && \"uii:bg-purple-100 uii:text-purple-800\",\n token.type.includes('Punctuation') && \"uii:bg-gray-100 uii:text-gray-800\",\n \"uii:bg-gray-100 uii:text-gray-600\"\n )}\n >\n {token.value}\n </span>\n ))}\n {tokens.length > 10 && (\n <span className=\"uii:px-1 uii:py-0.5 uii:rounded uii:text-xs uii:bg-gray-200 uii:text-gray-600\">\n +{tokens.length - 10} more\n </span>\n )}\n </div>\n </div>\n );\n };\n\n if (!ast) {\n return (\n <div className={cn(\"uii:text-gray-500 uii:text-sm uii:italic\", className)}>\n No AST available\n </div>\n );\n }\n\n if (variant === 'inline') {\n return (\n <div className={cn(\"uii:inline-flex uii:items-center uii:gap-2\", className)}>\n {renderInlineNode(ast)}\n </div>\n );\n }\n\n if (variant === 'compact') {\n return (\n <div className={cn(\"uii:space-y-2\", className)}>\n <div className=\"uii:flex uii:flex-wrap uii:gap-1\">\n {renderInlineNode(ast)}\n </div>\n {showTokens && renderTokens()}\n </div>\n );\n }\n\n // Tree variant\n return (\n <div className={cn(\"uii:space-y-3\", className)}>\n <div className=\"uii:space-y-2\">\n <div className=\"uii:text-sm uii:font-semibold uii:text-gray-700\">AST Tree:</div>\n <div className=\"uii:p-3 uii:border uii:rounded-md uii:bg-gray-50 uii:max-h-64 uii:overflow-auto\">\n {renderTreeNode(ast)}\n </div>\n </div>\n {showTokens && renderTokens()}\n </div>\n );\n}\n","import React, {\n useMemo,\n useCallback,\n useState,\n cloneElement,\n isValidElement,\n useRef,\n useEffect,\n} from 'react';\nimport { cn } from '@/lib/utils';\nimport {\n useExpressionMode,\n ExpressionModeControls,\n ExpressionModeState,\n} from '../../hooks/useExpressionMode';\nimport {\n InlineExpressionEditor,\n FullPanelExpressionEditor,\n} from './ExpressionEditor';\nimport { ExpressionASTRenderer } from './ExpressionASTRenderer';\nimport { useASTParser } from '../../hooks/useASTParser';\nimport { ASTRenderer } from './ASTRenderer';\nimport clsx from 'clsx';\nimport { useExpressionModeStore } from '../../stores/expressionModeStore';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faChevronLeft,\n faExpand,\n} from '@fortawesome/pro-regular-svg-icons';\n\n// Types that will come from your API via TRPC\nexport interface ExpressionContext {\n [key: string]: any;\n}\n\nexport interface ExpressionResult {\n value: any;\n ast: ExpressionAST;\n error?: string;\n isValid: boolean;\n validation: {\n syntax: boolean;\n expression: boolean;\n context: boolean;\n type?: boolean;\n security?: boolean;\n };\n}\n\nexport interface ExpressionAST {\n kind: number;\n color?: string;\n left?: ExpressionAST;\n right?: ExpressionAST;\n name?: ExpressionAST;\n argumentExpression?: ExpressionAST;\n arguments?: ExpressionAST[];\n expression?: ExpressionAST;\n escapedText?: string;\n text?: string;\n operator?: string;\n type?: string;\n}\n\nexport interface ExpressionMetadata {\n expression: string;\n mode: 'value' | 'expression';\n value: any;\n isEditing: boolean;\n isFullScreen: boolean;\n}\n\nexport interface ExpressionWrapperProps<T = any> {\n /** The label for the field */\n label: string;\n /** The type of the field */\n type: string;\n /** The actual value from the form field */\n value: T | { expression: string; type: 'expression'; value: T };\n /** Unique key for the field (used for debugging/logging) */\n key: string;\n /** Whether the values are loading */\n valuesLoading?: boolean;\n /** Callback when the value changes - second parameter contains expression metadata */\n onValueChange: (\n value: T | { expression: string; type: 'expression' },\n metadata?: ExpressionMetadata\n ) => void;\n /** Callback when dependencies change - called with array of dependency names */\n onDependenciesChange?: (dependencies: string[]) => void;\n /** Current expression metadata (for controlled mode) */\n metadata?: ExpressionMetadata;\n /** Render prop function that receives control props */\n children: (props: {\n\n value: T;\n\n onChange: (value: T) => void;\n\n localInput: T,\n\n setLocalInput: (value: T) => void;\n\n expressionMode: ExpressionModeControls;\n\n onExpressionClick: () => void; // Click handler to trigger expression mode\n\n inferredType?: string; // TypeScript inferred type of the expression\n\n hasTypeMismatch?: boolean; // Whether inferred type doesn't match expected type\n\n hasError?: boolean; // Whether expression has syntax/validation errors\n\n }) => React.ReactNode;\n /** Unique field name for the field (used for debugging/logging) */\n fieldName: string;\n /** Available nodes for the expression */\n availableNodes?: any;\n /** My interface for the expression */\n myInterface?: any;\n /** Context variables available in expressions */\n expressionContext?: ExpressionContext;\n /** TypeScript type definitions for context variables (for better type inference) */\n contextTypeDefinitions?: string;\n /** Whether to use inline editor (default: true = looks like text input) */\n inlineEditor?: boolean;\n /** Custom className for the wrapper container */\n className?: string;\n /** Custom className for the editor container (when in editor mode) */\n editorClassName?: string;\n /** Custom placeholder for expression editor */\n expressionPlaceholder?: string;\n /** Function to evaluate expressions - can be TRPC mutation, mock, or any other method */\n evaluateExpression?: (\n expression: string,\n context: ExpressionContext\n ) => Promise<ExpressionResult>;\n /** Result of expression evaluation (if parent manages evaluation) */\n expressionResult?: ExpressionResult | null;\n /** Whether expression is currently being evaluated (if parent manages evaluation) */\n isEvaluating?: boolean;\n /** Whether the current expression is valid (for validation states) */\n isExpressionValid?: boolean;\n /** Expected type for the property - used for type coercion validation */\n expectedType?: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'any';\n}\n\n/**\n * Safely evaluate JavaScript expressions with context\n * TODO: Add more security hardening, sandboxing, and error handling\n */\nfunction evaluateExpressionLocally(\n expression: string,\n context: ExpressionContext = {}\n): any {\n try {\n // Basic validation\n if (!expression || typeof expression !== 'string') {\n return null;\n }\n\n // TODO: Add expression validation/whitelist for security\n // TODO: Add timeout for long-running expressions\n // TODO: Add memory limits\n // TODO: Add more comprehensive sandboxing\n\n // Create a safe evaluation context\n const safeContext = {\n ...context,\n // Add common utility functions\n Math,\n Date,\n JSON,\n // Add safe array methods\n Array,\n // Add safe string methods\n String,\n // Add safe number methods\n Number,\n // Add safe boolean methods\n Boolean,\n // Add safe object methods\n Object,\n };\n\n // Create function with context\n const func = new Function(\n ...Object.keys(safeContext),\n `\"use strict\"; return (${expression});`\n );\n\n const result = func(...Object.values(safeContext));\n\n // TODO: Add result validation and sanitization\n return result;\n } catch (error) {\n console.warn('Expression evaluation failed:', error);\n // TODO: Add better error reporting and user feedback\n return null;\n }\n}\n\n// Validate expression locally for different validation classes\nfunction validateExpressionLocally(\n expression: string,\n context: ExpressionContext = {},\n expectedType: string = 'any'\n): {\n syntax: boolean;\n expression: boolean;\n context: boolean;\n type: boolean;\n security: boolean;\n} {\n const validation = {\n syntax: true,\n expression: true,\n context: true,\n type: true,\n security: true,\n };\n\n try {\n // Syntax validation - check if it's valid JavaScript\n new Function(expression);\n validation.syntax = true;\n } catch (error) {\n validation.syntax = false;\n return validation; // If syntax is invalid, other validations don't matter\n }\n\n try {\n // Expression validation - check if it's an expression (not a statement)\n // This is a simple heuristic - expressions typically don't start with keywords\n const trimmed = expression.trim();\n const statementKeywords = [\n 'var',\n 'let',\n 'const',\n 'function',\n 'class',\n 'if',\n 'for',\n 'while',\n 'return',\n 'throw',\n ];\n validation.expression = !statementKeywords.some((keyword) =>\n trimmed.startsWith(keyword)\n );\n } catch (error) {\n validation.expression = false;\n }\n\n try {\n // Context validation - check if referenced variables exist in context\n const contextKeys = Object.keys(context);\n const variableRegex = /\\b[a-zA-Z_$][a-zA-Z0-9_$]*\\b/g;\n const matches = expression.match(variableRegex) || [];\n const referencedVars = Array.from(new Set(matches));\n\n // Filter out JavaScript built-ins and keywords\n const jsBuiltins = [\n 'true',\n 'false',\n 'null',\n 'undefined',\n 'this',\n 'new',\n 'typeof',\n 'instanceof',\n ];\n const userVars = referencedVars.filter((v) => !jsBuiltins.includes(v));\n\n validation.context = userVars.every((v) => contextKeys.includes(v));\n } catch (error) {\n validation.context = false;\n }\n\n // Type validation - check if expression result can be coerced to expected type\n try {\n const evaluated = evaluateExpressionLocally(expression, context);\n validation.type =\n evaluated !== null\n ? validateTypeCoercion(evaluated, expectedType)\n : false;\n } catch (error) {\n validation.type = false;\n }\n\n // Security validation - check for dangerous operations\n const dangerousPatterns = [\n /eval\\s*\\(/,\n /Function\\s*\\(/,\n /setTimeout\\s*\\(/,\n /setInterval\\s*\\(/,\n /import\\s*\\(/,\n /require\\s*\\(/,\n ];\n validation.security = !dangerousPatterns.some((pattern) =>\n pattern.test(expression)\n );\n\n return validation;\n}\n\n// Validate if a value can be coerced to the expected type\nfunction validateTypeCoercion(value: any, expectedType: string): boolean {\n if (expectedType === 'any') return true;\n\n try {\n switch (expectedType) {\n case 'string':\n // Most values can be coerced to string\n return value !== null && value !== undefined;\n\n case 'number':\n // Check if value can be converted to a valid number\n if (typeof value === 'number') return !isNaN(value);\n if (typeof value === 'string') {\n const num = Number(value);\n return !isNaN(num) && isFinite(num);\n }\n if (typeof value === 'boolean') return true; // true -> 1, false -> 0\n return false;\n\n case 'boolean':\n // Most values can be coerced to boolean\n return true; // JavaScript's truthy/falsy conversion\n\n case 'array':\n // Check if value is already an array or can be converted\n if (Array.isArray(value)) return true;\n if (typeof value === 'string') return true; // String can be split into array\n if (typeof value === 'object' && value !== null) return true; // Object can be Object.entries()\n return false;\n\n case 'object':\n // Check if value is an object or can be converted\n if (typeof value === 'object' && value !== null) return true;\n if (typeof value === 'string') return true; // String can be parsed as JSON\n if (typeof value === 'number' || typeof value === 'boolean')\n return true; // Can be wrapped in object\n return false;\n\n default:\n return true;\n }\n } catch (error) {\n return false;\n }\n}\n\n/**\n * ExpressionWrapper - Wraps any control with expression capabilities\n *\n * This component provides three modes:\n * 1. Value mode: Shows the wrapped control normally\n * 2. Expression mode: Shows the evaluated expression result\n * 3. Editor mode: Shows the Monaco editor for editing expressions\n */\nexport function ExpressionWrapper<T = any>({\n label,\n value,\n type,\n valuesLoading = false,\n key,\n onValueChange,\n onDependenciesChange,\n metadata,\n children,\n fieldName,\n expressionContext = {},\n availableNodes,\n myInterface,\n contextTypeDefinitions,\n inlineEditor = true,\n className,\n editorClassName,\n expressionPlaceholder = 'Enter expression...',\n evaluateExpression,\n expressionResult,\n isEvaluating = false,\n isExpressionValid = true,\n expectedType = 'any',\n}: ExpressionWrapperProps<T>) {\n // Internal state to track expression metadata (preserves expression when switching modes)\n const [expressionMetadata, setExpressionMetadata] =\n useState<ExpressionMetadata>(\n () => {\n // On initial load, always start in value mode (not editing)\n // Even if metadata says isEditing: true, that's stale state from previous session\n const initialMetadata = metadata || {\n expression: '',\n mode: 'value',\n isEditing: false,\n isFullScreen: false,\n value: undefined,\n };\n\n // Force isEditing and isFullScreen to false on initial load\n return {\n ...initialMetadata,\n isEditing: false,\n isFullScreen: false,\n mode: 'value', // Always start in value mode\n };\n }\n );\n\n // Track the original value before any expression was set\n const [originalValue, setOriginalValue] = useState<T>(\n value &&\n typeof value === 'object' &&\n 'expression' in value &&\n 'type' in value &&\n value.type === 'expression'\n ? value.value\n : (value as T)\n );\n const [currentValue, setCurrentValue] = useState<T>(\n value &&\n typeof value === 'object' &&\n 'expression' in value &&\n 'type' in value &&\n value.type === 'expression'\n ? value.value\n : (value as T)\n );\n\n const formatValue = useCallback((value: T | unknown) => {\n\n switch (type) {\n case \"float\":\n {\n return (typeof value === \"string\") && !isNaN(parseFloat(value as string)) ? parseFloat(value as string) : value\n }\n case \"integer\":\n case \"number\":\n {\n return (typeof value === \"string\") && !isNaN(parseInt(value as string)) ? parseInt(value as string) : value\n break\n }\n case \"string[]\":\n {\n return (typeof value === \"string\") ? (value as string).split(',') : value as T\n break\n }\n case \"string\":\n default:\n {\n return value as T\n }\n }\n }, [type])\n\n const [currentEditorValue, setCurrentEditorValue] = useState<string>();\n\n const currentExpressionValueExt = useExpressionModeStore\n .getState()\n .getState(fieldName).expression;\n\n // Update internal metadata when external metadata changes\n useEffect(() => {\n if (metadata) {\n // When receiving external metadata updates, preserve editing state but\n // don't automatically enter editing mode on initial load\n setExpressionMetadata({\n ...metadata,\n // Don't restore editing/fullscreen state from metadata\n // User needs to explicitly click to edit\n isEditing: false,\n isFullScreen: false,\n });\n }\n }, [metadata]);\n\n // Detect if incoming value is an expression object\n const isExpressionValue = useMemo(() => {\n return (\n value &&\n typeof value === 'object' &&\n 'expression' in value &&\n 'type' in value &&\n value.type === 'expression'\n );\n }, [value]);\n\n // Track if this is the initial mount\n const isInitialMount = useRef(true);\n\n useEffect(() => {\n\n\n if (\n value &&\n typeof value === 'object' &&\n 'expression' in value &&\n 'type' in value &&\n value.type === 'expression'\n ) {\n // Expression object detected\n const exprValue = (value as any).value;\n const exprString = (value as any).expression;\n\n // Set the current value (the evaluated result to display)\n if (exprValue !== undefined) {\n setCurrentValue(formatValue(exprValue) as T);\n setOriginalValue(formatValue(exprValue) as T);\n }\n\n // Set the expression in the store AND switch to expression mode (non-editing)\n // This ensures the expression display is shown\n if (exprString && expressionMode.expression !== exprString) {\n expressionMode.setExpression(exprString);\n // Only switch to expression mode on initial load, not during editing\n if (isInitialMount.current && !expressionMode.isEditing) {\n expressionMode.switchToExpression();\n }\n }\n\n // On initial load, sync metadata to match the expression in the value\n // Check if metadata is out of sync\n const isMetadataOutOfSync =\n !metadata ||\n metadata.expression !== exprString ||\n metadata.mode === 'value' || // If value has expression but mode is 'value', it's out of sync\n metadata.isEditing === true || // Should never start editing on load\n metadata.isFullScreen === true; // Should never start full-screen on load\n\n if (isInitialMount.current && isMetadataOutOfSync) {\n const syncedMetadata: ExpressionMetadata = {\n expression: exprString || '',\n value: formatValue(exprValue),\n mode: 'expression', // Show expression display (not editing)\n isEditing: false,\n isFullScreen: false,\n };\n\n // Use setTimeout to avoid calling onValueChange during render\n setTimeout(() => {\n onValueChange(value, { ...syncedMetadata, value: formatValue(value) });\n }, 0);\n }\n } else {\n // Regular value (not an expression object)\n if (!valuesLoading) {\n setCurrentValue(formatValue(value) as T);\n setOriginalValue(formatValue(value) as T);\n\n // Sync metadata - clear any expression metadata since we have a plain value\n if (isInitialMount.current && (metadata?.expression || metadata?.mode === 'expression')) {\n const syncedMetadata: ExpressionMetadata = {\n expression: '',\n value: formatValue(value),\n mode: 'value',\n isEditing: false,\n isFullScreen: false,\n };\n\n // Use setTimeout to avoid calling onValueChange during render\n setTimeout(() => {\n onValueChange(formatValue(value) as T, { ...syncedMetadata, value: formatValue(value) });\n }, 0);\n }\n }\n }\n\n // Mark that initial mount is complete after a short delay\n if (isInitialMount.current) {\n setTimeout(() => {\n isInitialMount.current = false;\n }, 100);\n }\n }, [value, valuesLoading]);\n\n // Update metadata when value changes to/from expression\n // useEffect(() => {\n // if (isExpressionValue) {\n // // Value is an expression object, switch to expression mode\n // const newMetadata: ExpressionMetadata = {\n // expression: (value as any).expression,\n // mode: 'expression',\n // isEditing: false\n // };\n // setExpressionMetadata(newMetadata);\n // } else if (expressionMetadata.mode === 'value') {\n // // This is a regular value and we're in value mode, update original value\n // setOriginalValue(value);\n // }\n // }, [value, isExpressionValue, expressionMetadata.mode]);\n\n // Convert internal metadata to ExpressionModeState format\n // const externalState: ExpressionModeState = {\n // expression: expressionMetadata.expression,\n // mode: expressionMetadata.mode,\n // isEditing: expressionMetadata.isEditing,\n // isFullScreen: expressionMetadata.isFullScreen,\n // currentValue: value\n // };\n\n // // Handle state changes by updating internal metadata and parent\n // const handleStateChange = useCallback((newState: ExpressionModeState) => {\n\n // // const newMetadata: ExpressionMetadata = {\n // // expression: newState.expression,\n // // mode: newState.mode,\n // // isEditing: newState.isEditing\n // // };\n\n // // // Update internal state\n // // setExpressionMetadata(newMetadata);\n\n // // // Notify parent\n // // onValueChange(value, newMetadata);\n\n // console.log(\"handleStateChange called with:\", newState);\n\n // }, [onValueChange, value]);\n\n const expressionMode = useExpressionMode(fieldName);\n\n // Parse expression and extract AST + dependencies\n const {\n ast,\n tokens,\n dependencies,\n isLoading: isParsing,\n error: parseError,\n } = useASTParser(expressionMode.expression, fieldName);\n\n // Memoized dependency list with additional metadata\n const dependencyList = useMemo(() => {\n if (!ast || dependencies.length === 0) {\n return [];\n }\n\n // Create a structured list of dependencies with metadata\n // The service worker now filters out built-in methods properly\n return dependencies.map((dep) => ({\n name: dep,\n exists: expressionContext ? dep in expressionContext : false,\n value: expressionContext ? expressionContext[dep] : undefined,\n }));\n }, [dependencies, expressionContext, ast]);\n\n // Store TypeScript type information from Monaco editor\n const [typeScriptInferredType, setTypeScriptInferredType] = useState<string | null>(null);\n\n // Callback to receive type information from the editor\n const handleTypeInferred = useCallback((type: string) => {\n setTypeScriptInferredType(type);\n }, []);\n\n // Type inference is now handled directly by the editors (inline and full-screen)\n // No need for the legacy async approach - editors call handleTypeInferred callback\n\n // Check if expression contains newlines - if so, we should use full-screen editor\n const expressionHasNewlines = useMemo(() => {\n return expressionMode.expression.includes('\\n') || expressionMode.expression.includes('\\r');\n }, [expressionMode.expression]);\n\n // Use TypeScript-based type inference from Monaco (always available)\n const inferredReturnType = useMemo(() => {\n // Monaco's TypeScript language service provides accurate type inference\n return typeScriptInferredType || 'unknown';\n }, [typeScriptInferredType]);\n\n // Check if inferred type matches the expected type prop\n const hasTypeMismatch = useMemo(() => {\n // Don't show type mismatch if there's an error or unknown type\n if (!inferredReturnType || inferredReturnType === 'unknown' || inferredReturnType === 'any' || inferredReturnType === 'error') {\n return false;\n }\n\n // Normalize types for comparison\n const normalizedInferred = inferredReturnType.toLowerCase().trim();\n const normalizedExpected = (type || expectedType || 'any').toLowerCase().trim();\n\n // Handle array types: 'string[]' should match 'array'\n if (normalizedExpected === 'array' && normalizedInferred.endsWith('[]')) {\n return false; // Not a mismatch\n }\n\n // Handle exact matches\n if (normalizedInferred === normalizedExpected) {\n return false; // Not a mismatch\n }\n\n // If expected type is 'any', never a mismatch\n if (normalizedExpected === 'any') {\n return false;\n }\n\n // Handle TypeScript literal types - they're compatible with their base type\n // String literals: \"adam\" is compatible with string\n if (normalizedExpected === 'string' &&\n (normalizedInferred.startsWith('\"') || normalizedInferred.startsWith(\"'\"))) {\n return false; // String literal is compatible with string\n }\n\n // Number literals: 123, 123.45, 10e3, etc. are compatible with number\n if (normalizedExpected === 'number' && /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(normalizedInferred)) {\n return false; // Number literal is compatible with number\n }\n\n // Integer literals: 123, 10e3, etc. are compatible with integer\n if (normalizedExpected === 'integer' && /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(normalizedInferred)) {\n return false; // Number literal is compatible with integer\n }\n\n // Number type is compatible with integer (Monaco might infer \"number\" for integers)\n if (normalizedExpected === 'integer' && normalizedInferred === 'number') {\n return false; // Number is compatible with integer\n }\n\n // Float literals: 123.45, 10e3, etc. are compatible with float\n if (normalizedExpected === 'float' && /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(normalizedInferred)) {\n return false; // Number literal is compatible with float\n }\n\n // Number type is compatible with float\n if (normalizedExpected === 'float' && normalizedInferred === 'number') {\n return false; // Number is compatible with float\n }\n\n // Boolean literals: true/false is compatible with boolean\n if (normalizedExpected === 'boolean' &&\n (normalizedInferred === 'true' || normalizedInferred === 'false')) {\n return false; // Boolean literal is compatible with boolean\n }\n\n // Otherwise, there's a mismatch\n return true;\n }, [inferredReturnType, type, expectedType]);\n\n // Internal state for expression evaluation (when wrapper handles it)\n const [internalExpressionResult, setInternalExpressionResult] =\n useState<ExpressionResult | null>(null);\n const [internalIsEvaluating, setInternalIsEvaluating] = useState(false);\n\n // Hover state for expression preview\n const [isHovering, setIsHovering] = useState(false);\n\n // Internal Monaco validation state\n const [internalIsExpressionValid, setInternalIsExpressionValid] =\n useState(true);\n\n // Detailed validation state for different validation classes\n const [validationState, setValidationState] = useState({\n syntax: true,\n expression: true,\n context: true,\n type: true,\n security: true,\n });\n\n // Check if expression has any errors\n const hasExpressionError = useMemo(() => {\n // No expression = no error\n if (!expressionMode.expression || !expressionMode.expression.trim()) {\n return false;\n }\n\n // Check Monaco validation errors\n if (!internalIsExpressionValid || !isExpressionValid) {\n return true;\n }\n\n // Check AST parsing errors\n if (parseError) {\n return true;\n }\n\n // Check validation state\n if (!validationState.syntax || !validationState.expression) {\n return true;\n }\n\n // Check if there's an evaluation error\n if (expressionResult?.error || internalExpressionResult?.error) {\n return true;\n }\n\n return false;\n }, [\n expressionMode.expression,\n internalIsExpressionValid,\n isExpressionValid,\n parseError,\n validationState,\n expressionResult,\n internalExpressionResult\n ]);\n\n // Track if we should use full editor (when expression becomes multi-line)\n // const [shouldUseFullEditor, setShouldUseFullEditor] = useState(false);\n\n // Track if we're programmatically clearing to prevent blur handler from firing\n const isProgrammaticallyClearing = useRef(false);\n\n // Track if we're switching to full-screen to prevent blur handler from firing\n const isSwitchingToFullScreen = useRef(false);\n\n // Track if we're programmatically clearing to prevent blur handler from firing\n const isBlur = useRef(false);\n\n // Handle Monaco validation changes\n const handleValidationChange = useCallback(\n (isValid: boolean, errors: any[]) => {\n setInternalIsExpressionValid(isValid);\n\n // Update syntax validation (Monaco's built-in validation)\n setValidationState((prev) => ({\n ...prev,\n syntax: isValid,\n }));\n },\n []\n );\n\n // Check if expression content requires full editor\n const checkForMultiLine = useCallback(\n (expression: string) => {\n const hasNewlines = expression.includes('\\n');\n const isLong = expression.length > 80; // Arbitrary threshold for \"long\" expressions\n if (!expressionMode.isFullScreen) {\n expressionMode.setFullScreen(hasNewlines || isLong);\n }\n },\n [expressionMode.isFullScreen]\n );\n\n // Internal evaluation function\n const internalEvaluateExpression = useCallback(\n async (expression: string, context: ExpressionContext) => {\n if (!evaluateExpression || !expression.trim()) return;\n\n setInternalIsEvaluating(true);\n try {\n const result = await evaluateExpression(expression, context);\n setInternalExpressionResult(result);\n } catch (error) {\n // console.error('Expression evaluation failed:', error);\n setInternalExpressionResult({\n value: null,\n ast: { kind: 0, text: '', color: '#ff0000' },\n error: error instanceof Error ? error.message : 'Unknown error',\n isValid: false,\n validation: {\n syntax: false,\n expression: false,\n context: false,\n type: false,\n security: false,\n },\n });\n } finally {\n setInternalIsEvaluating(false);\n }\n },\n [evaluateExpression]\n );\n\n // TODO: Add error boundary for expression evaluation\n // TODO: Add loading states for complex expressions\n // TODO: Add validation for fieldName uniqueness\n\n // Evaluate expression and determine current value\n // const currentValue = useMemo(() => {\n\n // if (expressionMode.isExpressionMode && expressionMode.expression) {\n // // If we have an expression result (from parent or internal), use it\n // // const result = expressionResult || internalExpressionResult;\n // // if (result?.isValid) {\n // // return result.value;\n // // }\n\n // // // Use stored currentValue from metadata if available\n // // if (expressionMode.currentValue !== undefined) {\n // // return expressionMode.currentValue;\n // // }\n\n // // Fallback to local evaluation\n // // try {\n // // const evaluated = evaluateExpressionLocally(expressionMode.expression, expressionContext);\n // // return evaluated !== null ? evaluated : value;\n // // } catch (error) {\n // // console.warn('Expression evaluation failed:', error);\n // // return value;\n // // }\n // return currentExpressionValueExt;\n\n // }\n\n // return originalValue || value;\n\n // }, [expressionMode.isExpressionMode, expressionMode.expression, expressionMode.currentValue, expressionContext, value, expressionResult, internalExpressionResult]);\n\n const currentMetadata = useMemo(() => {\n return {\n expression: expressionMode.expression,\n value: currentValue,\n mode: expressionMode.current,\n isEditing: expressionMode.isEditing,\n isFullScreen: expressionMode.isFullScreen,\n };\n }, [\n expressionMode.expression,\n expressionMode.current,\n expressionMode.isFullScreen,\n expressionMode.isEditing,\n currentValue,\n ]);\n\n const currentExpressionValue = useMemo(() => {\n return { expression: expressionMode.expression, type: 'expression' };\n }, [expressionMode.currentValue || expressionMode.expression]);\n\n // Handle value changes from wrapped control\n const handleValueChange = useCallback(\n (newValue: T) => {\n // Only pass metadata if we're in expression mode OR if the new value is an expression\n\n // const currentMetadata: ExpressionMetadata | undefined =\n\n // (expressionMode.current === 'value' && !isExpressionValue) ? undefined : {\n // expression: expressionMode.expression,\n // mode: expressionMode.current,\n // isEditing: expressionMode.isEditing\n // };\n\n // console.log(\"handleValueChange called with:\", { newValue: newValue, currentMetadata: currentMetadata });\n onValueChange(formatValue(newValue) as T, { ...currentMetadata, value: formatValue(newValue) });\n },\n [onValueChange, expressionMode, isExpressionValue, currentValue]\n );\n\n // // Handle onChange events (for controls that pass events)\n // const handleChange = useCallback((event: any) => {\n // // const currentMetadata: ExpressionMetadata = {\n // // expression: expressionMode.expression,\n // // mode: expressionMode.current,\n // // isEditing: expressionMode.isEditing\n // // };\n\n // if (event && event.target && typeof event.target.value !== 'undefined') {\n // // Handle input change events\n // onValueChange(event.target.value as T, currentMetadata);\n // } else if (typeof event === 'boolean') {\n // // Handle switch/checkbox events\n // onValueChange(event as T, currentMetadata);\n // } else {\n // // Handle direct value changes\n // onValueChange(event as T, currentMetadata);\n // }\n // }, [onValueChange, expressionMode]);\n\n // Handle expression changes\n const handleExpressionChange = useCallback(\n (newExpression: string) => {\n // console.log(\"handleExpressionChange\", newExpression);\n // console.log(\"Current expressionMode.expression before set:\", expressionMode.expression);\n\n // Reset the clearing flag when expression changes (user is typing)\n isProgrammaticallyClearing.current = false;\n\n expressionMode.setExpression(newExpression);\n setCurrentEditorValue(newExpression);\n // console.log(\"Current expressionMode.expression after set:\", expressionMode.expression);\n\n // Check if content requires full editor\n checkForMultiLine(newExpression);\n\n // Update validation state for local validation\n // const localValidation = validateExpressionLocally(newExpression, expressionContext, expectedType);\n // setValidationState(localValidation);\n\n // // If wrapper handles evaluation internally, trigger it\n // if (evaluateExpression) {\n // internalEvaluateExpression(newExpression, expressionContext);\n // }\n\n // console.log(\"handleExpressionChange calling onValueChange with:\", { expression: newExpression, type: 'expression' });\n\n onValueChange({ expression: newExpression, type: 'expression' } as T, {\n ...currentMetadata,\n expression: newExpression,\n });\n\n // If in expression mode, update the actual value (fallback to local evaluation)\n // if (expressionMode.isExpressionMode && !evaluateExpression) {\n // try {\n // const evaluated = evaluateExpressionLocally(newExpression, expressionContext);\n // if (evaluated !== null) {\n // // Store the evaluated value in metadata state\n // expressionMode.setCurrentValue(evaluated);\n\n // const currentMetadata: ExpressionMetadata = {\n // expression: newExpression,\n // mode: expressionMode.current,\n // isEditing: expressionMode.isEditing\n // };\n // onValueChange(evaluated, currentMetadata);\n // }\n // } catch (error) {\n // // Keep current value\n // }\n // }\n },\n [\n expressionMode,\n expressionContext,\n onValueChange,\n evaluateExpression,\n internalEvaluateExpression,\n checkForMultiLine,\n ]\n );\n\n // Handle expression editor blur - switch to expression mode and update value if needed\n const handleExpressionBlur = useCallback(\n async (e?: any, forceBlur = false) => {\n\n // If we're programmatically clearing, don't execute blur logic\n if (isProgrammaticallyClearing.current) {\n isProgrammaticallyClearing.current = false;\n return;\n }\n\n // If we're switching to full-screen, don't execute blur logic\n if (isSwitchingToFullScreen.current) {\n isSwitchingToFullScreen.current = false;\n return;\n }\n\n // Don't process blur if in full-screen mode (multi-line editing)\n // UNLESS this is a forced blur (like clicking the X button)\n if (expressionMode.isFullScreen && !forceBlur) {\n return;\n }\n\n // Don't process blur if expression has newlines (should be in full-screen)\n // UNLESS this is a forced blur\n if (expressionHasNewlines && !forceBlur) {\n return;\n }\n\n isBlur.current = true;\n\n expressionMode.setEditing(false);\n expressionMode.setFullScreen(false);\n\n // console.log(\"handleExpressionBlur called\", { currentExpressionValue: currentExpressionValue, currentEditorValue: currentEditorValue, currentExpressionValueExt: currentExpressionValueExt });\n\n // Reset full editor flag since we're leaving editor mode\n },\n [\n expressionMode,\n expressionResult,\n internalExpressionResult,\n expressionContext,\n onValueChange,\n currentValue,\n isEvaluating,\n internalIsEvaluating,\n currentExpressionValue,\n expressionHasNewlines,\n ]\n );\n\n useEffect(() => {\n onValueChange(currentValue as T, {\n ...currentMetadata,\n isFullScreen: expressionMode.isFullScreen,\n });\n }, [expressionMode.isFullScreen]);\n\n // Auto-switch to full-screen mode if newlines are detected while editing\n useEffect(() => {\n if (expressionMode.isEditing && expressionHasNewlines && !expressionMode.isFullScreen) {\n expressionMode.setFullScreen(true);\n }\n }, [expressionHasNewlines, expressionMode.isEditing, expressionMode.isFullScreen]);\n\n // // Auto-switch to value mode if expression becomes empty after blur\n // useEffect(() => {\n // // Only check when blur just happened\n // if (isBlur.current) {\n // isBlur.current = false; // Reset the flag\n\n // // If expression is empty or only whitespace, switch to value mode\n // if (!expressionMode.expression || !expressionMode.expression.trim()) {\n // console.log('Expression is empty after blur - switching to value mode');\n // expressionMode.switchToValue();\n // }\n // }\n // }, [expressionMode.isEditing]); // Trigger when isEditing changes (blur sets it to false)\n\n const handleModeChange = useCallback(\n (newMode: 'value' | 'expression' | 'editor') => {\n switch (newMode) {\n case 'value':\n // When switching to value mode, update the original value to current value\n // setOriginalValue(currentValue);\n\n expressionMode.switchToValue();\n\n expressionMode.setFullScreen(false); // Reset full editor flag\n\n // Update form state with the actual value (not expression object)\n onValueChange(originalValue || value, undefined);\n break;\n case 'editor':\n // setOriginalValue(currentValue);\n expressionMode.switchToEditor();\n\n // If expression has newlines, automatically go to full-screen\n const shouldBeFullScreen = expressionHasNewlines;\n if (shouldBeFullScreen) {\n expressionMode.setFullScreen(true);\n }\n\n // Update metadata to reflect editing state\n const editorMetadata: ExpressionMetadata = {\n expression: expressionMode.expression,\n value: currentValue,\n mode: 'expression',\n isEditing: true,\n isFullScreen: shouldBeFullScreen,\n };\n\n // Notify parent that editing started\n onValueChange(\n expressionMode.expression\n ? { expression: expressionMode.expression, type: 'expression' } as T\n : currentValue as T,\n editorMetadata\n );\n break;\n case 'expression':\n // Store the current value before switching to expression mode\n setOriginalValue(currentValue);\n\n expressionMode.switchToExpression();\n\n // If expression has newlines, automatically go to full-screen when editing\n if (expressionHasNewlines) {\n expressionMode.setFullScreen(true);\n }\n\n // break;\n // expressionMode.switchToEditor();\n\n break;\n }\n },\n [expressionMode, currentValue, onValueChange, expressionHasNewlines, originalValue, value]\n );\n\n useEffect(() => {\n // This is for blur detection ... it seems to work quite a bit better than the onBlur event as long\n // as we use the onBlur event to trigger out of editing mode we can watch for that and update values\n // accordinly\n // if (\n // !expressionMode.isEditing &&\n // !(expressionMode.expression && expressionMode.expression.trim())\n // ) {\n // expressionMode.switchToValue();\n // }\n if (isBlur.current) {\n if (!(expressionMode.expression && expressionMode.expression.trim())) {\n expressionMode.switchToValue();\n onValueChange(currentMetadata.value ?? '' as T, {\n ...currentMetadata,\n mode: 'value',\n expression: '',\n isEditing: false,\n isFullScreen: false,\n });\n } else {\n onValueChange(\n currentMetadata.mode === 'value'\n ? (currentMetadata.value ?? '' as T)\n : ({\n expression: currentMetadata.expression.trim(),\n type: 'expression',\n } as T),\n { ...currentMetadata, isEditing: false, isFullScreen: false }\n );\n }\n isBlur.current = false;\n }\n }, [expressionMode.isEditing, expressionMode.isFullScreen, isBlur.current]);\n\n // Notify parent when dependencies change\n useEffect(() => {\n if (onDependenciesChange) {\n onDependenciesChange(dependencies);\n }\n }, [dependencies, onDependenciesChange]);\n\n // Handle clear\n const handleClear = useCallback(() => {\n // Set flag to prevent blur handler from executing\n isProgrammaticallyClearing.current = true;\n\n // const currentMetadata: ExpressionMetadata = {\n // expression: '',\n // mode: 'value',\n // isEditing: false\n // };\n\n // Return to the original value when clearing the expression\n onValueChange(currentValue as T, currentMetadata);\n handleModeChange('value');\n // expressionMode.clear();\n expressionMode.setFullScreen(false); // Reset full editor flag\n }, [onValueChange, expressionMode, originalValue]);\n\n\n const [localInput, setLocalInput] = useState(currentValue);\n\n useEffect(() => {\n\n setLocalInput(currentValue)\n\n }, [currentValue])\n\n // Create control props for render prop pattern\n const controlProps = useMemo(\n () => ({\n value: currentValue as T,\n onChange: handleValueChange,\n onExpressionClick: () => handleModeChange('editor'), // Click handler to trigger expression mode\n inferredType: inferredReturnType, // Inferred TypeScript type\n hasTypeMismatch: hasTypeMismatch, // Whether inferred type matches expected\n hasError: hasExpressionError, // Whether expression has syntax/validation errors\n localInput,\n setLocalInput,\n expressionMode: {\n current: expressionMode.current,\n switchToValue: () => handleModeChange('value'),\n switchToExpression: () => handleModeChange('expression'),\n switchToEditor: () => handleModeChange('editor'),\n clear: handleClear,\n isExpressionMode: expressionMode.isExpressionMode,\n isEditorMode: expressionMode.isEditorMode,\n expression: expressionMode.expression,\n setExpression: handleExpressionChange,\n isEditing: expressionMode.isEditing,\n setEditing: expressionMode.setEditing,\n isFullScreen: expressionMode.isFullScreen,\n setFullScreen: expressionMode.setFullScreen,\n } as ExpressionModeControls,\n }),\n [\n currentValue,\n handleValueChange,\n expressionMode,\n handleModeChange,\n handleClear,\n handleExpressionChange,\n inferredReturnType,\n hasTypeMismatch,\n hasExpressionError,\n ]\n );\n\n // Render based on current mode\n const renderContent = () => {\n switch (expressionMode.current) {\n // case 'value':\n // return children(controlProps);\n\n case 'expression':\n // Determine what to show based on state\n const hasExpression =\n expressionMode.expression && expressionMode.expression.trim();\n const hasValidAST = (expressionResult || internalExpressionResult)\n ?.isValid;\n const isValidExpression =\n isExpressionValid && internalIsExpressionValid;\n\n // If no expression is set, automatically switch back to value mode\n // if (!hasExpression) {\n // console.log('Expression mode render: no expression, switching to value mode', {\n // expression: expressionMode.expression,\n // hasExpression,\n // currentMode: expressionMode.current\n // });\n // // Use setTimeout to avoid state update during render\n // setTimeout(() => {\n // expressionMode.switchToValue();\n // // Clear the expression from metadata when switching to value mode due to empty expression\n // const clearedMetadata: ExpressionMetadata = {\n // expression: '',\n // mode: 'value',\n // isEditing: false\n // };\n // onValueChange(value, clearedMetadata);\n // }, 0);\n // // Return value mode content while switching\n // return children(controlProps);\n // }\n\n return controlProps.expressionMode.isEditing ? (\n <div key={`${key}-expression`} className={cn('relative', className)}>\n {inlineEditor && !expressionMode.isFullScreen && !expressionHasNewlines ? (\n <div\n className={cn(\n `uii:flex uii:h-9 uii:w-full \n uii:min-w-0 uii:rounded-sm \n uii:border uii:border-ring \n uii:bg-background uii:px-3 uii:py-1 uii:text-base uii:shadow-xs \n uii:ring-ring/50 uii:ring-[3px] uii:transition-[color,box-shadow] \n uii:outline-none uii:md:text-sm uii:cursor-pointer\n uii:mt-0.5 `,\n editorClassName\n )}\n >\n <InlineExpressionEditor\n value={expressionMode.expression}\n onChange={(newValue) => {\n // console.log(\"InlineExpressionEditor onChange called with:\", newValue);\n handleExpressionChange(newValue);\n }}\n onEnter={() => {\n // Switch to full-screen mode instead of blurring\n // Set flag to prevent blur handler from closing the editor\n isSwitchingToFullScreen.current = true;\n expressionMode.setFullScreen(true);\n\n // Reset flag after a short delay in case blur doesn't fire\n setTimeout(() => {\n isSwitchingToFullScreen.current = false;\n }, 100);\n }}\n onBlur={handleExpressionBlur}\n onTypeInferred={handleTypeInferred}\n onValidationChange={handleValidationChange}\n context={expressionContext}\n placeholder={expressionPlaceholder}\n />\n <div className=\"uii:flex uii:items-center uii:gap-2 uii:mt-0.5\">\n <span\n className=\"uii:text-xs uii:font-mono uii:cursor-pointer uii:text-muted-foreground\"\n onMouseDown={(e) => {\n e.preventDefault(); // Prevent blur from firing\n e.stopPropagation();\n isSwitchingToFullScreen.current = true;\n expressionMode.setFullScreen(true);\n\n // Reset flag after a short delay in case blur doesn't fire\n setTimeout(() => {\n isSwitchingToFullScreen.current = false;\n }, 100);\n }}\n >\n <FontAwesomeIcon icon={faExpand} />\n </span>\n <span\n className=\"uii:text-xs uii:font-mono uii:cursor-pointer uii:text-muted-foreground\"\n onMouseDown={(e) => {\n e.preventDefault(); // Prevent blur from firing\n handleClear();\n }}\n >\n Clear\n </span>\n </div>\n </div>\n ) : (\n <div className=\"uii:space-y-4\">\n <FullPanelExpressionEditor\n value={expressionMode.expression}\n onChange={(newValue) => {\n // console.log(\"FullPanelExpressionEditor onChange called with:\", newValue);\n handleExpressionChange(newValue);\n }}\n onClose={() => {\n // Treat close like a blur - save the expression\n // Force blur to bypass full-screen checks\n handleExpressionBlur(undefined, true);\n expressionMode.setFullScreen(false);\n }}\n onBlur={handleExpressionBlur}\n onTypeInferred={handleTypeInferred}\n context={expressionContext}\n placeholder={expressionPlaceholder}\n />\n\n {/* AST and Dependencies Display */}\n {(ast || dependencies.length > 0) && (\n <div className=\"uii:space-y-3\">\n {/* Return Type */}\n {inferredReturnType && inferredReturnType !== 'unknown' && (\n <div className=\"uii:space-y-2\">\n <div className=\"uii:flex uii:items-center uii:gap-2\">\n <div className=\"uii:text-sm uii:font-semibold uii:text-gray-700\">\n Inferred Return Type:\n </div>\n {typeScriptInferredType && inferredReturnType !== 'error' && (\n <span className=\"uii:px-1.5 uii:py-0.5 uii:text-xs uii:rounded uii:bg-blue-100 uii:text-blue-700 uii:border uii:border-blue-200\">\n TypeScript\n </span>\n )}\n </div>\n <div className=\"uii:flex uii:items-center uii:gap-2\">\n {inferredReturnType === 'error' ? (\n <span className=\"uii:px-3 uii:py-1.5 uii:text-sm uii:font-mono uii:rounded uii:border uii:bg-red-50 uii:text-red-800 uii:border-red-200\">\n ❌ Syntax Error\n </span>\n ) : (\n <>\n <span className=\"uii:px-3 uii:py-1.5 uii:text-sm uii:font-mono uii:rounded uii:border uii:bg-purple-50 uii:text-purple-800 uii:border-purple-200\">\n {inferredReturnType}\n </span>\n {hasTypeMismatch && (\n <span className=\"uii:text-xs uii:text-orange-600 uii:font-semibold\">\n ⚠️ Expected: {type || expectedType}\n </span>\n )}\n </>\n )}\n </div>\n </div>\n )}\n\n {/* Dependencies */}\n {dependencyList.length > 0 && (\n <div className=\"uii:space-y-2\">\n <div className=\"uii:text-sm uii:font-semibold uii:text-gray-700\">\n Dependencies ({dependencyList.length}):\n </div>\n <div className=\"uii:flex uii:flex-wrap uii:gap-2\">\n {dependencyList.map((dep, index) => (\n <span\n key={index}\n className={cn(\n \"uii:px-2 uii:py-1 uii:text-sm uii:rounded uii:border\",\n dep.exists\n ? \"uii:bg-blue-100 uii:text-blue-800 uii:border-blue-200\"\n : \"uii:bg-red-100 uii:text-red-800 uii:border-red-200\"\n )}\n title={dep.exists ? `Value: ${JSON.stringify(dep.value)}` : 'Not found in context'}\n >\n {dep.name}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* AST Tree */}\n {ast && (\n <ASTRenderer\n ast={ast}\n tokens={tokens}\n variant=\"tree\"\n showTokens={true}\n className=\"uii:w-full\"\n />\n )}\n\n {/* Parse Status */}\n {isParsing && (\n <div className=\"uii:text-sm uii:text-gray-500 uii:italic\">\n Parsing expression...\n </div>\n )}\n {parseError && (\n <div className=\"uii:text-sm uii:text-red-600\">\n Parse Error: {parseError}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n ) : (\n <div\n className={cn('uii:relative', className)}\n key={`${key}-expression-display`}\n >\n <div\n className={clsx(\n 'uii:flex uii:h-9 uii:w-full uii:min-w-0 uii:rounded-sm uii:border uii:border-input uii:bg-transparent uii:px-3 uii:py-1 uii:text-base uii:shadow-xs uii:transition-[color,box-shadow] uii:outline-none uii:focus-visible:border-ring uii:focus-visible:ring-ring/50 uii:focus-visible:ring-[3px] uii:md:text-sm uii:cursor-pointer uii:hover:bg-muted/50',\n 'uii:mt-0.5 uii:bg-white uii:rounded-md uii:items-center'\n )}\n onClick={() => handleModeChange('editor')}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n >\n <span className=\"uii:flex-1 uii:truncate uii:text-foreground uii:items-center\">\n {isHovering ? (\n // Hover state: show AST preview with dependencies\n <div className=\"uii:flex uii:items-center uii:gap-2\">\n {ast ? (\n <ASTRenderer\n key={`${key}-ast`}\n ast={ast}\n tokens={tokens}\n variant=\"inline\"\n showTokens={false}\n className=\"uii:text-xs\"\n />\n ) : (\n <div className=\"uii:text-xs uii:text-gray-500\">\n {isParsing\n ? 'Parsing...'\n : parseError\n ? `Error: ${parseError}`\n : 'No AST available'}\n </div>\n )}\n {dependencies.length > 0 && (\n <div className=\"uii:flex uii:gap-1\">\n {dependencies.map((dep, index) => (\n <span\n key={index}\n className=\"uii:px-1 uii:py-0.5 uii:bg-blue-100 uii:text-blue-800 uii:text-xs uii:rounded\"\n >\n {dep}\n </span>\n ))}\n </div>\n )}\n </div>\n ) : (\n // At rest: show the expression text\n <span className=\"uii:font-mono uii:text-sm\">\n {currentExpressionValueExt || 'No expression'}\n </span>\n )}\n </span>\n </div>\n </div>\n );\n\n default:\n return children(controlProps);\n }\n };\n\n return (\n <><div className=\"uii:flex uii:items-center uii:gap-2 uii:mt-2\"><label className=\"uii:text-xs uii:text-muted-foreground uii:font-bold\" htmlFor={key}>{label}:</label>\n <span className=\"uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-gray-200 uii:rounded-sm uii:text-[10px] uii:font-mono uii:text-muted-foreground uii:font-light\">{type}</span>\n {hasTypeMismatch || inferredReturnType === 'error' ? (\n <>\n {expressionMode.current === 'expression' ? <><span className=\"uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-gray-200 uii:rounded-sm uii:text-[10px] uii:font-mono uii:text-muted-foreground uii:font-light\">{expressionMode.expression.trim() !== '' ? inferredReturnType : 'empty'}</span>\n <span className=\"uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-gray-200 uii:rounded-sm uii:text-[10px] uii:font-mono uii:font-light uii:text-orange-600 \">\n ⚠️ Expected: {type || expectedType}\n </span></> : <></>}</>) : <></>}\n </div>\n {renderContent()}\n\n {/* {<>availableNodes:{JSON.stringify(availableNodes)}</>}<br />\n {<>myInterface:{JSON.stringify(myInterface)}</>}<br /> */}\n {/* {<>cv:{JSON.stringify(currentValue)}</>}<br />\n {<>ov:{JSON.stringify(originalValue)}</>}<br />\n {<>cevExt:{JSON.stringify(currentExpressionValueExt)}</>}<br />\n {<>cev:{JSON.stringify(currentExpressionValue)}</>}<br />\n {<>exp:{JSON.stringify(expressionMode.expression)}</>}<br />\n {<>ie:{JSON.stringify(expressionMode.isEditing)}</>}<br />\n {<>fs:{JSON.stringify(expressionMode.isFullScreen)}</>}<br />\n {<>expm:{JSON.stringify(expressionMode.isExpressionMode)}</>}<br />\n {<>em:{JSON.stringify(expressionMode.isEditorMode)}</>}<br /> */}\n </>\n );\n}\n\nexport default ExpressionWrapper;\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport { Button } from '@/components/ui/button'\nimport { Input as InputComponent } from '@/components/ui/input'\nimport { ExpressionAST, ExpressionContext, ExpressionWrapper } from \"@/components/expression/ExpressionWrapper\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useState } from \"react\";\n// import { faCode } from \"@fortawesome/pro-regular-svg-icons\";\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> { }\n\nexport interface ExpressionResult {\n value: any;\n ast: ExpressionAST;\n error?: string;\n isValid: boolean;\n validation: {\n syntax: boolean;\n expression: boolean;\n context: boolean;\n type?: boolean;\n security?: boolean;\n };\n}\n\nexport function Input({ className, expectedType, ...props }: React.ComponentProps<'input'> & {\n error?: boolean, label?: string,\n rapperClassName?: string,\n expressionContext?: ExpressionContext,\n expressionResult?: ExpressionResult,\n isEvaluating?: boolean,\n isExpressionValid?: boolean,\n expectedType?: string\n}) {\n\n const [localValue, setLocalValue] = useState(props.value as any);\n const [localMetadata, setLocalMetadata] = useState({} as any);\n\n\n return (<ExpressionWrapper\n label={props.label as string ?? \"Test Entry\"}\n key={props.name as string}\n type={expectedType ?? \"string\"}\n valuesLoading={false}\n value={props.value}\n onValueChange={(val, metadata) => {\n setLocalValue(val);\n if (metadata) {\n setLocalMetadata(metadata);\n }\n }}\n expectedType={expectedType as \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\" | \"any\"}\n fieldName={props.name as string}\n // availableNodes={availableNodes}\n // myInterface={myInterface}\n children={({ onExpressionClick, onChange: onChangeExpression, value: expressionValue, localInput, setLocalInput }) => (\n <div className=\"uii:relative uii:text-xs uii:mt-0.5\"><InputComponent\n type=\"text\"\n value={localInput}\n onChange={(e) => {\n setLocalInput(e.target.value)\n onChangeExpression(e.target.value)\n }}\n // disabled={!props.disabled}\n placeholder={props.placeholder as string ?? \"Enter value...\"}\n />\n <div className=\"uii:flex uii:bg-white uii:border-white/40 uii:border-l-8 uii:items-center uii:gap-1 uii:absolute uii:right-1.5 uii:top-2.5 uii:cursor-pointer uii:truncate\" onClick={() => onExpressionClick()}>\n {/* <FontAwesomeIcon icon={[\"fas\", \"code\"]} className=\"text-blue-500\" /> */}\n <span className=\"uii:border-l uii:border-gray-200 uii:px-2\">Custom Expression</span>\n </div>\n </div>\n )}\n // <Button onClick={() => onExpressionClick()}>\n // <FontAwesomeIcon icon={[\"fas\", \"code\"]} className=\"text-blue-500\" />\n // <span className=\"border-l border-gray-200 px-2\">Custom Expression</span>\n // </Button> \n\n // <div className=\"relative overflow-clip\">\n // <Input type=\"text\"\n // spellCheck={false}\n // autoComplete=\"off\"\n // onKeyDown={(e) => {\n // if (e.key === 'Enter') {\n // e.preventDefault();\n // }\n // }}\n // autoFocus={false}\n // id={props.name as string} key={props.name as string}\n // onBlur={() => {\n // // onBlur && onBlur(value);\n // }}\n // name={props.name as string}\n // readOnly={false}\n // className={cn(!false ? 'cursor-not-allowed' : '', '!bg-white !text-sm ')}\n // defaultValue={\"\"}\n // value={localInput}\n // onChange={(e) => {\n // setLocalInput(e.target.value);\n // onChangeExpression && onChangeExpression(e.target.value);\n // }}\n // />\n // <div className=\"flex bg-white border-white/40 border-l-8 items-center gap-1 absolute right-1.5 top-2.5 cursor-pointer truncate\" onClick={() => onExpressionClick()}>\n // <FontAwesomeIcon icon={[\"fas\", \"code\"]} className=\"text-blue-500\" />\n // <span className=\"border-l border-gray-200 px-2\">Custom Expression</span>\n // </div>\n // </div>\n\n\n />)\n}","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"ui:inline-flex ui:items-center ui:justify-center ui:gap-2 ui:whitespace-nowrap ui:rounded-sm ui:text-sm ui:font-medium ui:transition-[color,box-shadow] ui:disabled:pointer-events-none ui:disabled:opacity-50 ui:[&_svg]:pointer-events-none ui:[&_svg:not([class*=size-])]:size-4 ui:shrink-0 ui:[&_svg]:shrink-0 ui:outline-none ui:focus-visible:border-ring ui:focus-visible:ring-ring/50 ui:focus-visible:ring-[3px] ui:aria-invalid:ring-destructive/20 ui:dark:aria-invalid:ring-destructive/40 ui:aria-invalid:border-destructive ui:cursor-pointer\",\n {\n variants: {\n variant: {\n default:\n \"ui:bg-primary ui:text-primary-foreground ui:shadow-xs ui:hover:bg-primary/90 ui:select-none\",\n destructive:\n \"ui:bg-destructive ui:text-white ui:shadow-xs ui:hover:bg-destructive/90 ui:focus-visible:ring-destructive/20 ui:dark:focus-visible:ring-destructive/40\",\n outline:\n \"ui:border ui:border-input ui:bg-background ui:shadow-xs ui:hover:bg-accent ui:hover:text-accent-foreground\",\n secondary:\n \"ui:bg-secondary ui:text-secondary-foreground ui:shadow-xs ui:hover:bg-secondary/80\",\n ghost: \"ui:hover:bg-accent ui:hover:text-accent-foreground\",\n link: \"ui:text-primary ui:underline-offset-4 ui:hover:underline\",\n },\n size: {\n default: \"ui:h-9 ui:px-4 ui:py-2 ui:has-[>svg]:px-3\",\n sm: \"ui:h-8 ui:rounded-sm ui:gap-1.5 ui:px-3 ui:has-[>svg]:px-2.5\",\n lg: \"ui:h-10 ui:rounded-sm ui:px-6 ui:has-[>svg]:px-4\",\n icon: \"ui:size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp \n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n"]}