@archduck/gst-core 0.1.0

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,"file":"core-ovxYfJ25.js","sources":["../../../../node_modules/@vue/shared/dist/shared.esm-bundler.js","../../../../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../../src/utils/functionContext.js","../../src/utils/normalizeKeys.js","../../src/utils/resolution.js","../../src/utils/dotPath.js","../../src/utils/buildContext.js","../../src/renderer/FormElement.js","../../src/utils/styleProcessor.js","../../src/renderer/mount.js"],"sourcesContent":["/**\n* @vue/shared v3.5.32\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \"&quot;\";\n break;\n case 38:\n escaped = \"&amp;\";\n break;\n case 39:\n escaped = \"&#39;\";\n break;\n case 60:\n escaped = \"&lt;\";\n break;\n case 62:\n escaped = \"&gt;\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/reactivity v3.5.32\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { extend, hasChanged, isArray, isIntegerKey, isSymbol, isMap, hasOwn, isObject, makeMap, capitalize, toRawType, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, remove, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal track `on` calls, allow `on` call multiple times\n */\n this._on = 0;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this.__v_skip = true;\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].resume();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n if (++this._on === 1) {\n this.prevScope = activeEffectScope;\n activeEffectScope = this;\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n if (this._on > 0 && --this._on === 0) {\n activeEffectScope = this.prevScope;\n this.prevScope = void 0;\n }\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\",\n \"EVALUATED\": 128,\n \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope && activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= -65;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= -3;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= -2;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= -17;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n return;\n }\n computed.flags |= 2;\n const dep = computed.dep;\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed.flags |= 128;\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= -3;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= -5;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n /**\n * @internal\n */\n this.__v_skip = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nfunction toWrapped(target, item) {\n if (isReadonly(target)) {\n return isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item);\n }\n return toReactive(item);\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toWrapped(this, value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(\n this,\n \"filter\",\n fn,\n thisArg,\n (v) => v.map((item) => toWrapped(this, item)),\n arguments\n );\n },\n find(fn, thisArg) {\n return apply(\n this,\n \"find\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(\n this,\n \"findLast\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimization required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", (item) => toWrapped(this, item));\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (!result.done) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n let wrappedFn = fn;\n let wrapInitialAccumulator = false;\n if (arr !== self) {\n if (needsWrap) {\n wrapInitialAccumulator = args.length === 0;\n wrappedFn = function(acc, item, index) {\n if (wrapInitialAccumulator) {\n wrapInitialAccumulator = false;\n acc = toWrapped(self, acc);\n }\n return fn.call(this, acc, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n const result = arr[method](wrappedFn, ...args);\n return wrapInitialAccumulator ? toWrapped(self, result) : result;\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n return isReadonly2 && isObject(value) ? readonly(value) : value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key);\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArrayWithIntegerKey && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target[key]\n );\n }\n return true;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return extend(\n // inheriting all iterator properties\n Object.create(innerIterator),\n {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n }\n }\n );\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return target.size;\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n const target = toRaw(this);\n const proto = getProto(target);\n const rawValue = toRaw(value);\n const valueToAdd = !shallow && !isShallow(value) && !isReadonly(value) ? rawValue : value;\n const hadKey = proto.has.call(target, valueToAdd) || hasChanged(value, valueToAdd) && proto.has.call(target, value) || hasChanged(rawValue, valueToAdd) && proto.has.call(target, rawValue);\n if (!hadKey) {\n target.add(valueToAdd);\n trigger(target, \"add\", valueToAdd, valueToAdd);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\n// @__NO_SIDE_EFFECTS__\nfunction reactive(target) {\n if (/* @__PURE__ */ isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReactive(value) {\n if (/* @__PURE__ */ isReadonly(value)) {\n return /* @__PURE__ */ isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? /* @__PURE__ */ toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value;\n\n// @__NO_SIDE_EFFECTS__\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ref(value) {\n return createRef(value, false);\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (/* @__PURE__ */ isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, key, _defaultValue) {\n this._object = _object;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n this._key = isSymbol(key) ? key : String(key);\n this._raw = toRaw(_object);\n let shallow = true;\n let obj = _object;\n if (!isArray(_object) || isSymbol(this._key) || !isIntegerKey(this._key)) {\n do {\n shallow = !isProxy(obj) || isShallow(obj);\n } while (shallow && (obj = obj[\"__v_raw\"]));\n }\n this._shallow = shallow;\n }\n get value() {\n let val = this._object[this._key];\n if (this._shallow) {\n val = unref(val);\n }\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n if (this._shallow && /* @__PURE__ */ isRef(this._raw[this._key])) {\n const nestedRef = this._object[this._key];\n if (/* @__PURE__ */ isRef(nestedRef)) {\n nestedRef.value = newVal;\n return;\n }\n }\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(this._raw, this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRef(source, key, defaultValue) {\n if (/* @__PURE__ */ isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return /* @__PURE__ */ ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n return new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n watchHandle();\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n oldValue = newValue;\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Map();\n if ((seen.get(value) || 0) >= depth) {\n return value;\n }\n seen.set(value, depth);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n * @module functionContext\n * @description The Stage: where GST functions perform their actions\n *\n * In GST, user-defined functions receive two things:\n * 1. **context** - The form's current state (record, meta, registries, etc.)\n * 2. **this** (stage) - The element's powers and state\n *\n * This module creates the \"stage\" - the `this` binding for function calls.\n * The stage provides element-specific APIs that let functions interact with\n * their field or button without needing to know implementation details.\n *\n * ## The Stage Metaphor\n *\n * Think of it like a theater:\n * - **Context** = The script (data, configuration, what's happening)\n * - **Stage** = The props and tools available to the actor (getValue, setValue, etc.)\n * - **Function** = The actor performing on stage with those tools\n *\n * ## Usage Pattern\n *\n * ```javascript\n * // User-defined function in functions.js\n * export function validateEmail(context, event) {\n * // 'this' is the stage - it knows about this specific field\n * const value = this.value // Current field value\n * const initial = this.initialValue // Value when form loaded\n *\n * if (!value.includes('@')) {\n * this.setError('Invalid email') // Set error on THIS field\n * return false\n * }\n *\n * this.clearErrors()\n * return true\n * }\n * ```\n *\n * ## Stage Types\n *\n * - **Field stage**: Has value, setValue, setError, clearErrors, focus, blur\n * - **Button stage**: Has isLoading, executeAction\n *\n * ## Render Phase Protection\n *\n * The module tracks \"render phase\" to prevent infinite loops. During render\n * (formatters, computed properties), calling setValue() or setError() would\n * trigger re-renders. These calls are blocked with helpful error messages.\n *\n * @see {@link createStage} for creating stage instances\n */\n\nimport { logger } from './logger'\n\n// Track render phase to prevent setValue during render\nlet isInRenderPhase = false\nlet renderPhaseWarned = new Set()\n\n/**\n * Mark that we're entering render phase (formatters, computed values)\n * Call exitRenderPhase when done\n */\nexport function enterRenderPhase() {\n isInRenderPhase = true\n}\n\n/**\n * Mark that we've exited render phase\n */\nexport function exitRenderPhase() {\n isInRenderPhase = false\n renderPhaseWarned.clear()\n}\n\n/**\n * Check if we're currently in render phase\n */\nexport function inRenderPhase() {\n return isInRenderPhase\n}\n\n/**\n * Create the stage where functions perform - the `this` binding\n *\n * The stage provides element-specific APIs that let user functions interact\n * with their field or button. It's created fresh for each function call,\n * with getters that access current state.\n *\n * @param {Object} def - Element definition (must have name or type)\n * @param {Function|Object} contextGetter - Function returning context, or context object\n * @param {string} [path] - Element path (fallback for name)\n * @param {HTMLElement} [domRef] - Optional DOM element reference\n * @param {Object} [options] - Additional options\n * @param {boolean} [options.readOnly] - If true, setValue/setError are no-ops (for formatters)\n *\n * @returns {Object} Frozen stage object with element-specific APIs:\n *\n * **Common properties (all elements):**\n * - `def` - The element definition object\n * - `path` - Element path/name\n * - `name` - Element name\n * - `element` - DOM element reference (if available)\n *\n * **Field stage (components, inputs):**\n * - `value` - Current field value\n * - `currentValue` - Live DOM value (for validation timing)\n * - `initialValue` - Value when form loaded\n * - `isDirty` - Whether value differs from initial\n * - `errors` - Array of error messages\n * - `isValid` - Whether field has no errors\n * - `isRequired` - Whether field is required\n * - `isReadonly` - Whether field is readonly\n * - `isSystemField` - Whether field is a system field\n * - `setValue(val)` - Set field value (blocked during render)\n * - `setError(err)` - Set field error (blocked during render)\n * - `clearErrors()` - Clear field errors\n * - `focus()` - Focus the DOM element\n * - `blur()` - Blur the DOM element\n * - `select()` - Select text (if applicable)\n *\n * **Button stage:**\n * - `isLoading` - Whether button action is in progress\n * - `executeAction(data)` - Execute the button's action\n *\n * @example\n * // Creating a stage for a field\n * const stage = createStage(fieldDef, getContext, 'email')\n * console.log(stage.value) // Current email value\n * stage.setValue('new@example.com') // Update the value\n *\n * @example\n * // In a user-defined function (stage is bound to 'this')\n * export function validatePhone(context, event) {\n * if (!this.value.match(/^\\d{10}$/)) {\n * this.setError('Phone must be 10 digits')\n * return false\n * }\n * this.clearErrors()\n * return true\n * }\n */\nexport function createStage(\n def,\n contextGetter,\n path,\n domRef = null,\n options = {}\n) {\n // Null safety: validate inputs\n if (!def) {\n logger.warn('createStage called with null/undefined def')\n return Object.freeze({})\n }\n\n const name = def.name || path\n const getContext = typeof contextGetter === \"function\"\n ? contextGetter\n : () => contextGetter\n\n // Safely get initial context for validation\n const initialContext = getContext()\n if (!initialContext) {\n logger.warn(`createStage: context is null for element \"${name || path}\"`)\n }\n\n // Guard: Don't access context.form if context is null\n const capturedInitialValue = name && initialContext?.form?.getInitialValue\n ? initialContext.form.getInitialValue(name)\n : undefined\n\n const baseContext = {\n get def() {\n return def\n },\n get path() {\n return path || name\n },\n get name() {\n return name\n },\n get element() {\n return (\n domRef || (name ? document.querySelector(`[name=\"${name}\"]`) : null)\n )\n },\n }\n\n // Field-specific helpers\n if (def.component || def.type !== \"button\") {\n return Object.freeze({\n ...baseContext,\n get value() {\n return getContext()?.form?.getValue(name)\n },\n get currentValue() {\n const element = this.element\n if (element) {\n if (element.type === \"checkbox\") return element.checked\n return element.value\n }\n return getContext()?.form?.getValue(name)\n },\n get initialValue() {\n return capturedInitialValue\n },\n get isDirty() {\n return this.currentValue !== capturedInitialValue\n },\n get errors() {\n return getContext()?.form?.getFieldErrors(name) || []\n },\n get isValid() {\n return (getContext()?.form?.getFieldErrors(name) || []).length === 0\n },\n get isRequired() {\n return getContext()?.form?.isRequired(name) || false\n },\n get isReadonly() {\n return getContext()?.form?.isReadonly(name) || false\n },\n get isSystemField() {\n return getContext()?.form?.isSystemField(name) || false\n },\n setValue(val) {\n if (!name) return\n\n // Prevent setValue during render phase (formatters, computed props)\n if (isInRenderPhase || options.readOnly) {\n if (!renderPhaseWarned.has(name)) {\n renderPhaseWarned.add(name)\n logger.error(\n `[INFINITE LOOP PREVENTED] setValue(\"${name}\") called during render phase. ` +\n `Formatters must RETURN the formatted value, not call setValue(). ` +\n `Check your formatter function for field \"${name}\".`\n )\n }\n return\n }\n\n const ctx = getContext()\n if (!ctx?.form?.setValue) {\n logger.warn(`setValue: form context not available for \"${name}\"`)\n return\n }\n ctx.form.setValue(name, val)\n },\n setError(err) {\n if (!name) return\n\n // Prevent setError during render phase\n if (isInRenderPhase || options.readOnly) {\n if (!renderPhaseWarned.has(`${name}:error`)) {\n renderPhaseWarned.add(`${name}:error`)\n logger.error(\n `[INFINITE LOOP PREVENTED] setError(\"${name}\") called during render phase. ` +\n `Validators should be used with onBlur/onChange, not during render. ` +\n `Check your validator function for field \"${name}\".`\n )\n }\n return\n }\n\n const ctx = getContext()\n if (!ctx?.form?.setFieldErrors) {\n logger.warn(`setError: form context not available for \"${name}\"`)\n return\n }\n const errors = Array.isArray(err) ? err : [err]\n ctx.form.setFieldErrors(name, errors)\n },\n clearErrors() {\n if (!name) return\n\n // Prevent clearErrors during render phase\n if (isInRenderPhase || options.readOnly) {\n return // Silent - clearErrors is less critical\n }\n\n const ctx = getContext()\n if (!ctx?.form?.setFieldErrors) {\n logger.warn(`clearErrors: form context not available for \"${name}\"`)\n return\n }\n ctx.form.setFieldErrors(name, [])\n },\n focus() {\n this.element?.focus()\n },\n blur() {\n this.element?.blur()\n },\n select() {\n this.element?.select?.()\n },\n })\n }\n\n // Button-specific helpers\n return Object.freeze({\n ...baseContext,\n get isLoading() {\n return getContext()?.form?.isLoading?.(name) || false\n },\n executeAction(data) {\n const ctx = getContext()\n if (!ctx?.form?.executeAction) {\n logger.warn(`executeAction: form context not available for button \"${name}\"`)\n return Promise.reject(new Error('Form context not available'))\n }\n return ctx.form.executeAction(name, data)\n },\n })\n}\n\n","/**\n * Case-insensitive config key normalization\n *\n * Config authors can write property keys in any case:\n * \"REQUIRED\", \"Required\", \"required\" -> all become \"required\"\n *\n * Hyphens become camelCase boundaries (like CSS -> JS):\n * \"class-name\" -> \"className\"\n * \"html-for\" -> \"htmlFor\"\n * \"on-change\" -> \"onChange\"\n *\n * Exceptions:\n * data-* and aria-* keep hyphens (HTML attribute namespaces)\n * accept-charset, http-equiv keep hyphens (native HTML attributes)\n * _prefixed keys pass through (internal properties)\n * \"...\" passes through (spread syntax)\n */\n\n/**\n * Normalize a single config key.\n *\n * 1. Lowercase everything\n * 2. Convert hyphens to camelCase (except data-*, aria-*, and\n * the two natively-hyphenated HTML attributes)\n *\n * @param {string} key\n * @returns {string} normalized key\n */\nexport function normalizeKey(key) {\n if (key.startsWith('_') || key === '...') return key\n const lower = key.toLowerCase()\n if (lower.startsWith('data-') || lower.startsWith('aria-')) return lower\n if (lower === 'accept-charset' || lower === 'http-equiv') return lower\n return lower.replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n}\n\n/**\n * Normalize all keys of a definition object (shallow).\n * Values are untouched. Returns a new object.\n *\n * @param {Object} def - definition object from config\n * @returns {Object} new object with normalized keys\n */\nexport function normalizeDef(def) {\n if (!def || typeof def !== 'object' || Array.isArray(def)) return def\n const out = {}\n for (const key of Object.keys(def)) {\n out[normalizeKey(key)] = def[key]\n }\n return out\n}\n\n// Native HTML event attributes (without the \"on\" prefix).\n// Covers standard DOM events so that lowercase \"onclick\", \"onchange\" etc.\n// are always recognized as event handlers after normalization.\nconst HTML_EVENTS = new Set([\n 'abort', 'auxclick', 'beforeinput', 'blur', 'cancel', 'change', 'click',\n 'close', 'compositionend', 'compositionstart', 'compositionupdate',\n 'contextmenu', 'copy', 'cut', 'dblclick', 'drag', 'dragend', 'dragenter',\n 'dragleave', 'dragover', 'dragstart', 'drop', 'error', 'focus', 'focusin',\n 'focusout', 'input', 'invalid', 'keydown', 'keypress', 'keyup', 'load',\n 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'mouseout',\n 'mouseover', 'mouseup', 'paste', 'pointercancel', 'pointerdown',\n 'pointerenter', 'pointerleave', 'pointermove', 'pointerout', 'pointerover',\n 'pointerup', 'reset', 'resize', 'scroll', 'scrollend', 'select', 'submit',\n 'touchcancel', 'touchend', 'touchmove', 'touchstart', 'transitionend',\n 'wheel',\n])\n\n/**\n * Check whether a normalized key is an event handler.\n *\n * Two ways to qualify:\n * 1. Uppercase third char (camelCase): \"onClick\", \"onChange\" (from \"on-click\" or \"onClick\")\n * 2. Whitelisted HTML event: \"onclick\", \"onchange\" (lowercase, but known native events)\n *\n * This keeps \"onion\", \"ongoing\" etc. from being misidentified.\n *\n * @param {string} key - normalized key\n * @returns {boolean}\n */\nexport function isEventKey(key) {\n if (key.length <= 2 || key[0] !== 'o' || key[1] !== 'n') return false\n // camelCase: on + Uppercase (from \"on-click\" or \"onClick\")\n if (key[2] >= 'A' && key[2] <= 'Z') return true\n // whitelisted native HTML event\n return HTML_EVENTS.has(key.slice(2))\n}\n","/**\n * @module resolution\n * @description Core resolution utilities for GST's dynamic property system\n *\n * This module provides the foundational resolution mechanisms that power GST's\n * compositional architecture:\n *\n * ## Key Concepts\n *\n * ### Spread Resolution (`resolveSpread`)\n * Handles the `\"...\": \"base\"` syntax that allows field/button/component definitions\n * to inherit from other definitions. Similar to JavaScript spread but for config objects.\n *\n * ### Dynamic Property Resolution (`bindFunctions`)\n * Transforms static `{{functionName}}` strings into live function calls. This is\n * what makes GST configs \"come alive\" - any property can be computed at runtime.\n *\n * ### Record Data Resolution (`resolveRecordData`)\n * Resolves `{{functionName}}` references in initial record data. Unlike bindFunctions,\n * this evaluates once at initialization (not reactively).\n *\n * ## Security\n *\n * All resolution functions include security measures:\n * - Circular reference detection (prevents infinite loops in spread chains)\n * - Prototype pollution prevention (blocks __proto__, constructor, prototype keys)\n * - Type validation (ensures {{}} references resolve to actual functions)\n *\n * @see {@link resolveSpread} for spread/inheritance resolution\n * @see {@link bindFunctions} for dynamic property resolution\n * @see {@link resolveRecordData} for initial data resolution\n */\n\nimport {\n logRegistry,\n isDebugEnabled,\n logger\n} from './logger.js'\nimport { trace, isDebugActive } from './gstDebug.js'\nimport { createStage, enterRenderPhase, exitRenderPhase } from './functionContext.js'\nimport { isEventKey } from './normalizeKeys.js'\n\n// Inline error formatter (formHelpers moved to gst-forms)\nfunction missingReference(type, name, context = {}) {\n const { path, available = [] } = context\n const parts = [`⚠️ ${type} \"${name}\" not found`]\n if (path) parts.push(`\\n Path: ${path}`)\n if (available.length > 0) parts.push(`\\n Available: ${available.join(', ')}`)\n parts.push(`\\n 💡 Check spelling or add \"${name}\" to your ${type.toLowerCase()} registry`)\n return parts.join('')\n}\n\n/**\n * Parse dot notation for cross-registry references\n *\n * Supports JavaScript-style dot notation:\n * - \"fields.email\" -> { registry: \"fields\", key: \"email\" }\n * - \"buttons.save\" -> { registry: \"buttons\", key: \"save\" }\n * - \"components.Input\" -> { registry: \"components\", key: \"Input\" }\n * - \"email\" -> null (no dot notation, use default registry)\n *\n * @param {string} ref - Reference string to parse\n * @param {Set} [validRegistries] - Set of valid registry names. If provided,\n * only parses when the prefix is a known registry. If omitted, any dotted\n * string is treated as a cross-registry reference.\n * @returns {{ registry: string, key: string } | null} Parsed reference or null if no dot notation\n */\nexport function parseDotNotation(ref, validRegistries) {\n if (typeof ref !== 'string') return null\n\n const dotIndex = ref.indexOf('.')\n if (dotIndex <= 0) return null\n\n const registryName = ref.slice(0, dotIndex)\n const key = ref.slice(dotIndex + 1)\n\n // Only parse if it's a valid registry name (when a whitelist is provided)\n if (validRegistries && !validRegistries.has(registryName)) return null\n\n // Key must be non-empty\n if (!key) return null\n\n return { registry: registryName, key }\n}\n\n/**\n * Resolves spread syntax in definitions (JavaScript-like spread behavior)\n *\n * Spread syntax:\n * - { \"...\": \"email\" } → Spreads from named item in registry (e.g., spread from \"email\" field)\n * - { \"...\": \"fields.email\" } → Cross-registry spread using dot notation\n * - \"email\" → Bare string reference (looks up definition and returns it)\n * - \"buttons.save\" → Cross-registry reference using dot notation\n *\n * Note: The '...': '^' syntax for namespace merging is handled by namespaceLoader, not here.\n *\n * @param {*} def - Definition to resolve (string, object with spread, or regular object)\n * @param {Object} registry - Merged registry (global + local) for lookups\n * @param {string} registryName - Name of registry for error messages (e.g., \"fields\")\n * @param {string} itemName - Name of the item being resolved (for logging)\n * @param {Object} options - Additional options\n * @param {Object} options.allRegistries - All registries for cross-registry dot notation lookups\n * @param {Object} options.localRegistry - Local registry for nested lookups\n * @param {Object} options.parentRegistry - Parent registry for nested lookups\n * @param {Set} options._visited - Internal: tracks visited references to prevent circular dependencies\n * @returns {Object} - Resolved definition with spread applied\n */\nexport const resolveSpread = (def, registry = {}, registryName = 'registry', itemName = '', options = {}) => {\n const {\n allRegistries = null,\n fallbackRegistry = null, // Fallback for spread lookups (e.g. defaultButtons)\n validRegistries = null, // Set of valid registry names for dot-notation parsing\n _visited = new Set() // Track visited references to prevent circular dependencies\n } = options\n\n // Handle string references - look up in merged registry\n // \"email\" -> looks up \"email\" in registry\n // \"^\" -> looks up itemName in registry (e.g. \"ssn\": \"^\" looks up \"ssn\")\n // \"fields.email\" -> cross-registry lookup using dot notation\n if (typeof def === 'string') {\n // \"^\" means \"look up this key's own name in the registry\"\n if (def === '^') def = itemName\n\n // Check for dot notation (cross-registry reference)\n const dotRef = parseDotNotation(def, validRegistries)\n let baseDef\n let lookupRegistry = registryName\n let lookupKey = def\n\n if (dotRef && allRegistries) {\n // Cross-registry lookup\n lookupRegistry = dotRef.registry\n lookupKey = dotRef.key\n baseDef = allRegistries[dotRef.registry]?.[dotRef.key]\n } else {\n // Default registry lookup\n baseDef = registry[def]\n }\n\n // If the lookup returned a string, it's an unresolved entry (not a definition).\n // This happens when the key's own unresolved value shadows a lower layer.\n // Treat it as missing — the entry hasn't been resolved yet.\n if (typeof baseDef === 'string') {\n baseDef = null\n }\n\n if (!baseDef) {\n const availableKeys = dotRef && allRegistries\n ? Object.keys(allRegistries[dotRef.registry] || {})\n : Object.keys(registry)\n logger.warn(missingReference(lookupRegistry, lookupKey, {\n path: itemName ? `${registryName}.${itemName}` : registryName,\n available: availableKeys\n }))\n if (isDebugActive()) {\n trace('registry', `resolve-spread \"${itemName || lookupKey}\"`, `MISSING string ref \"${lookupKey}\" in ${lookupRegistry}`, {\n lookupKey, lookupRegistry, available: availableKeys\n })\n }\n return null\n }\n\n if (isDebugEnabled() && itemName) {\n logRegistry(registryName, itemName, 'REFERENCE', `reference to ${def}`)\n }\n\n return { ...baseDef }\n }\n\n // Handle spread syntax with \"...\" operator\n // { \"...\": \"email\", \"label\": \"Work Email\" } → spread from \"email\" field with overrides\n // { \"...\": \"buttons.save\" } → cross-registry spread using dot notation\n if (def && typeof def === 'object' && def['...']) {\n const baseRef = def['...']\n const { '...': _, ...overrides } = def\n\n // Check for dot notation in spread reference\n const dotRef = parseDotNotation(baseRef, validRegistries)\n let targetRegistry = registry\n let targetRegistryName = registryName\n let lookupKey = baseRef\n\n if (dotRef && allRegistries) {\n targetRegistry = allRegistries[dotRef.registry] || {}\n targetRegistryName = dotRef.registry\n lookupKey = dotRef.key\n }\n\n // Create reference key for circular dependency tracking\n const refKey = `${targetRegistryName}.${lookupKey}`\n\n // Check for circular reference\n if (_visited.has(refKey)) {\n // Before giving up, check the fallback registry (e.g. defaultButtons).\n // This handles the case where a user button named \"save\" spreads from\n // the core \"save\" button -- the merge overwrites the core definition,\n // but the fallback still has the original.\n if (fallbackRegistry?.[lookupKey]) {\n if (isDebugActive()) {\n trace('registry', `resolve-spread \"${itemName}\"`, `circular ref \"${refKey}\" resolved via fallback`, {\n refKey, itemName\n })\n }\n return { ...fallbackRegistry[lookupKey], ...overrides }\n }\n logger.error(`Circular reference detected: ${refKey} references itself through spread chain. Breaking circular dependency.`)\n if (isDebugActive()) {\n trace('registry', `resolve-spread \"${itemName}\"`, `CIRCULAR ref \"${refKey}\" (breaking chain)`, {\n refKey, visited: [..._visited], itemName\n })\n }\n return overrides\n }\n\n // Track this reference\n const newVisited = new Set(_visited)\n newVisited.add(refKey)\n\n // Look up base definition from registry\n let baseDef = targetRegistry[lookupKey]\n\n // If the looked-up definition is the same unresolved spread (self-reference),\n // use the fallback registry instead\n if (baseDef && typeof baseDef === 'object' && baseDef['...'] === lookupKey && fallbackRegistry?.[lookupKey]) {\n baseDef = fallbackRegistry[lookupKey]\n }\n\n if (!baseDef) {\n logger.warn(missingReference(`${targetRegistryName} spread`, lookupKey, {\n path: itemName ? `${registryName}.${itemName}` : registryName,\n available: Object.keys(targetRegistry)\n }))\n if (isDebugActive()) {\n trace('registry', `resolve-spread \"${itemName}\"`, `MISSING base \"${lookupKey}\" in ${targetRegistryName} (using overrides only)`, {\n itemName, lookupKey, targetRegistryName,\n available: Object.keys(targetRegistry),\n overrideKeys: Object.keys(overrides)\n })\n }\n // Use override properties only\n return overrides\n }\n\n if (isDebugEnabled() && itemName) {\n const overrideCount = Object.keys(overrides).length\n logRegistry(registryName, itemName, 'SPREAD', `spread from ${baseRef}, overrides=${overrideCount}`)\n }\n\n // Recursively resolve the base definition to handle nested spreads\n // Use the target registry for recursive resolution\n const resolvedBase = resolveSpread(baseDef, targetRegistry, targetRegistryName, lookupKey, {\n allRegistries,\n fallbackRegistry,\n validRegistries,\n _visited: newVisited\n })\n\n // Check if resolved base is valid\n if (!resolvedBase || typeof resolvedBase !== 'object') {\n logger.warn(`Base definition \"${baseRef}\" resolved to non-object type ${typeof resolvedBase}`)\n return overrides\n }\n\n // Spread resolved base definition, then apply overrides\n return { ...resolvedBase, ...overrides }\n }\n\n // Handle objects without spread - return as-is\n if (def && typeof def === 'object') {\n return def\n }\n\n // Fallback - return as-is\n return def\n}\n\n/**\n * Resolve dynamic properties in a definition object (the heart of GST's dynamism)\n *\n * \"Conjure\" processes definition objects and resolves:\n * - `{{functionName}}` references to actual function calls or wrapped handlers\n * - `@optionSetName` references to option set data\n * - Nested arrays and objects recursively\n *\n * Binds {{functionName}} string references to actual functions, wraps event\n * handlers, and resolves option set references.\n *\n * Property handling by type:\n * - **Event handlers** (onX): Wrapped to call function with (context, event) on trigger\n * - **Transform props** (validator, formatter, parser, etc.): Wrapped with render phase markers\n * - **Other props**: Left as `{{name}}` strings for on-demand resolution (e.g., show)\n *\n * @param {Object|Array|*} def - Definition to bind (object, array, or primitive)\n * @param {Object} functions - Functions registry for `{{name}}` resolution\n * @param {Object} optionSets - Option sets registry for `@name` resolution\n * @param {Function} getContext - Function returning current form context\n * @returns {Object|Array|*} - Definition with bound functions and resolved references\n *\n * @example\n * // Input definition with dynamic properties\n * const def = {\n * name: 'email',\n * label: 'Email',\n * show: '{{isEmailRequired}}',\n * validate: '{{validateEmail}}',\n * onChange: '{{handleEmailChange}}',\n * options: '@countries'\n * }\n *\n * // After bindFunctions:\n * // - show: remains '{{isEmailRequired}}' (resolved on-demand during render)\n * // - validate: becomes wrapped function with render phase markers\n * // - onChange: becomes event handler that calls handleEmailChange(context, event)\n * // - options: becomes the actual countries array from optionSets\n */\nexport const bindFunctions = (def, functions = {}, optionSets = {}, getContext) => {\n if (!def || typeof def !== \"object\") return def\n if (Array.isArray(def))\n return def.map(item => bindFunctions(item, functions, optionSets, getContext))\n\n const bound = { ...def }\n const name = def.name || 'unknown'\n\n if (\n typeof bound.options === \"string\" &&\n bound.options.startsWith(\"@\")\n ) {\n const optionKey = bound.options.slice(1)\n const optionData = optionSets[optionKey]\n\n if (optionData) {\n bound.options = optionData\n }\n // If not found, leave the @reference string intact for late resolution\n // (component adapters resolve @refs at render time from store.registries.optionSets)\n }\n\n const isEventHandler = isEventKey\n\n const transformProps = new Set([\n \"validator\",\n \"formatter\",\n \"parser\",\n \"format\",\n \"parse\",\n \"validate\"\n ])\n\n for (const [prop, value] of Object.entries(bound)) {\n if (prop.startsWith('__')) continue\n if (value === undefined || value === null) continue\n\n if (typeof value === \"string\" && value.startsWith(\"{{\") && value.endsWith(\"}}\")) {\n const fnName = value.replace(/^{{|}}$/g, \"\")\n const fn = functions[fnName]\n\n if (!fn) {\n // Function not found during binding - preserve the string for late resolution\n // This allows functions to be resolved later by useFieldProps.resolveProp\n // Only warn if this is an event handler (which must be resolved now)\n if (isEventHandler(prop)) {\n logger.warn(missingReference('Function', fnName, {\n path: `${name}.${prop}`,\n available: Object.keys(functions)\n }))\n }\n if (isDebugActive()) {\n trace('prop', `bind-function \"${name}.${prop}\"`, `\"${fnName}\" not found (preserved for late resolution)`, {\n field: name, property: prop, functionName: fnName,\n isEventHandler: isEventHandler(prop),\n availableFunctions: Object.keys(functions)\n })\n }\n // Keep the string as-is for later resolution\n bound[prop] = value\n continue\n }\n\n // Security: Validate that the resolved value is actually a function\n if (typeof fn !== 'function') {\n logger.error(\n `Security: Expected function but got ${typeof fn} for \"${fnName}\" at ${name}.${prop}. ` +\n `This could indicate a configuration error or attempted code injection.`\n )\n continue\n }\n\n if (isEventHandler(prop)) {\n bound[prop] = event => {\n try {\n const ctx = getContext()\n if (!ctx) return\n const stage = createStage(bound, () => ctx, name)\n return fn.call(stage, ctx, event)\n } catch (err) {\n logger.error(`Error in event handler \"${prop}\" for \"${name}\":`, {\n error: err,\n function: fnName,\n element: name\n })\n // Don't throw - allow form to continue functioning\n return false\n }\n }\n } else if (transformProps.has(prop)) {\n bound[prop] = (context, event) => {\n // Mark render phase for formatters/parsers to prevent setValue during render\n enterRenderPhase()\n try {\n const stage = createStage(bound, () => context, name)\n return fn.call(stage, context, event)\n } catch (err) {\n logger.error(`Error in transform function \"${prop}\" for \"${name}\":`, {\n error: err,\n function: fnName,\n element: name\n })\n // Return undefined to indicate transform failure\n return undefined\n } finally {\n exitRenderPhase()\n }\n }\n } else {\n // Leave as string - will be resolved on-demand when needed\n bound[prop] = value\n }\n }\n }\n\n if (typeof def.action === \"string\" && def.action.startsWith(\"{{\")) {\n bound.action = def.action.replace(/^{{|}}$/g, \"\")\n }\n\n // Recurse into nested fields blocks (constructions/composites)\n if (bound.fields && typeof bound.fields === \"object\" && !Array.isArray(bound.fields)) {\n const boundFields = {}\n for (const [key, fieldDef] of Object.entries(bound.fields)) {\n boundFields[key] = bindFunctions(fieldDef, functions, optionSets, getContext)\n }\n bound.fields = boundFields\n }\n\n return bound\n}\n\n/**\n * Resolves dynamic properties in record data {{functionName}} → evaluated value\n * Unlike bindFunctions(), this evaluates functions ONCE for initial values (not reactive)\n *\n * @param {Object} recordData - Record data object that may contain {{}} references\n * @param {Object} functions - Functions registry\n * @param {Function} getContext - Function that returns current context\n * @returns {Object} Record data with resolved values\n */\n// Set of dangerous property names that could lead to prototype pollution\nconst DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype'])\n\nexport const resolveRecordData = (recordData, functions = {}, getContext) => {\n if (!recordData || typeof recordData !== \"object\") return recordData\n\n // Handle arrays\n if (Array.isArray(recordData)) {\n return recordData.map(item => resolveRecordData(item, functions, getContext))\n }\n\n const resolved = {}\n\n for (const [key, value] of Object.entries(recordData)) {\n // Skip metadata properties\n if (key.startsWith('__')) {\n resolved[key] = value\n continue\n }\n\n // Security: Prevent prototype pollution\n if (DANGEROUS_KEYS.has(key)) {\n logger.error(\n `Security: Blocked potential prototype pollution attempt with key \"${key}\" in record data. ` +\n `This key is not allowed in record objects.`\n )\n continue\n }\n\n // Recursively resolve nested objects\n if (value && typeof value === 'object') {\n resolved[key] = resolveRecordData(value, functions, getContext)\n continue\n }\n\n // Resolve {{functionName}} references\n if (typeof value === \"string\" && value.startsWith(\"{{\") && value.endsWith(\"}}\")) {\n const fnName = value.replace(/^{{|}}$/g, \"\")\n const fn = functions[fnName]\n\n if (!fn) {\n logger.warn(missingReference('Function', fnName, {\n path: `record.data.${key}`,\n available: Object.keys(functions),\n note: 'Function not found for dynamic record property'\n }))\n resolved[key] = value // Keep the original string if function not found\n continue\n }\n\n if (typeof fn !== 'function') {\n logger.error(\n `Expected function but got ${typeof fn} for \"${fnName}\" in record.data.${key}`\n )\n resolved[key] = value\n continue\n }\n\n // Evaluate the function to get the initial value\n try {\n const ctx = getContext()\n // Call without 'this' context - this is data initialization, not UI\n resolved[key] = fn(ctx, { type: 'recordInit', key })\n } catch (err) {\n logger.error(`Error evaluating function \"${fnName}\" for record.data.${key}:`, err)\n resolved[key] = undefined\n }\n } else {\n resolved[key] = value\n }\n }\n\n return resolved\n}\n\n","/**\n * Dot-path navigation helpers for nested object access.\n * Used by field value resolution (path, bind) across the engine.\n */\n\n/**\n * Read a nested value by dot-path. Returns undefined if any intermediate is nullish.\n */\nexport function getByPath(root, path) {\n const parts = path.split('.')\n let obj = root\n for (const p of parts) {\n if (obj == null) return undefined\n obj = obj[p]\n }\n return obj\n}\n\n/**\n * Write a nested value by dot-path. Auto-creates intermediate objects.\n */\nexport function setByPath(root, path, value) {\n const parts = path.split('.')\n let obj = root\n for (let i = 0; i < parts.length - 1; i++) {\n if (obj[parts[i]] == null) obj[parts[i]] = {}\n obj = obj[parts[i]]\n }\n obj[parts[parts.length - 1]] = value\n}\n\n/**\n * Read a field's value from the store, respecting bind and path properties.\n * - bind: \"state.x\" -> store.state.x (store-level path)\n * - path: \"contact.email\" -> store.record.data.contact.email (record-level path)\n * - neither: store.record.data[name]\n */\nexport function getFieldValue(store, name, def) {\n if (def?.bind) return getByPath(store, def.bind)\n if (def?.path) return getByPath(store.record?.data, def.path)\n if (!name) return undefined\n return store.record?.data?.[name]\n}\n\n/**\n * Write a field's value to the store, respecting bind and path properties.\n * Auto-creates intermediate objects for nested paths.\n */\nexport function setFieldValue(store, name, def, value) {\n if (def?.bind) {\n setByPath(store, def.bind, value)\n return\n }\n if (def?.path) {\n if (store.record?.data) setByPath(store.record.data, def.path, value)\n return\n }\n if (!name) return\n if (store.record?.data) {\n store.record.data[name] = value\n }\n}\n\n/**\n * Resolve the effective record path for a field.\n * Returns the path string (for nested), the name (for flat), or null (for bind/ephemeral).\n */\nexport function getRecordPath(name, def) {\n if (def?.bind) return null\n if (def?.path) return def.path\n return name || null\n}\n\n/**\n * Clear a field's value from record.data, respecting path.\n * For nested paths, sets the leaf to undefined.\n */\nexport function clearFieldValue(store, name, def) {\n if (def?.bind) return // bind fields don't live in record\n if (def?.path) {\n if (store.record?.data) setByPath(store.record.data, def.path, undefined)\n return\n }\n if (!name) return\n if (store.record?.data) {\n store.record.data[name] = undefined\n }\n}\n","/**\n * Build the context object that {{fn}} functions receive as their first argument.\n *\n * This is the single canonical implementation. All code paths that need to\n * construct a function context should import and use this.\n *\n * @param {Object} store - The reactive store from mount()\n * @returns {Object} context - { record, meta, state, registries, functions, form }\n */\nimport { getByPath } from './dotPath.js'\n\nexport function buildContext(store) {\n if (!store) return {}\n\n return {\n record: store.record,\n meta: store.meta,\n state: store.state || {},\n registries: store.registries,\n functions: store.registries?.functions || {},\n form: buildFormAPI(store),\n props: store.callbacks || {},\n }\n}\n\nfunction buildFormAPI(store) {\n return {\n getValue: (name) => {\n if (store._getFieldValue) return store._getFieldValue(name)\n return store.record?.data?.[name]\n },\n setValue: (name, value) => {\n if (store._setFieldValue) return store._setFieldValue(name, value)\n if (store.record?.data) store.record.data[name] = value\n },\n getState: key => store.state?.[key],\n setState: (key, value) => {\n if (store.state) store.state[key] = value\n },\n get isDirty() { return store.isDirty },\n get isSubmitting() { return store.isSubmitting },\n get isDeleted() { return store.isDeleted },\n getFieldErrors: name => store.fieldErrors?.[name] || [],\n setFieldErrors: (name, errors) => {\n if (store.fieldErrors) store.fieldErrors[name] = errors\n },\n setFieldError: (name, msg) => {\n if (store.fieldErrors) store.fieldErrors[name] = Array.isArray(msg) ? msg : [msg]\n },\n clearFieldError: name => {\n if (store.fieldErrors) store.fieldErrors[name] = []\n },\n executeAction: store.executeAction,\n isRequired: name => !!store.registries?.fields?.[name]?.required,\n isReadonly: name => store.meta?.readonly?.includes(name) || false,\n isSystemField: name => store.meta?.systemFields?.includes(name) || false,\n getInitialValue: name => {\n const def = store.registries?.fields?.[name]\n const path = def?.path\n if (path) return getByPath(store.initialRecord?.data, path)\n return store.initialRecord?.data?.[name]\n },\n addGuard: (fn) => store.addGuard?.(fn),\n removeGuard: (fn) => store.removeGuard?.(fn),\n setMap: (mapName) => {\n const cb = store.callbacks?.onMapChange\n if (cb) cb(mapName || null)\n },\n }\n}\n","/**\n * Imperative recursive renderer for form elements\n *\n * Imperative recursive renderer that creates real DOM elements\n * and uses @vue/reactivity effects for reactive updates.\n *\n * Each element gets an effect that re-runs when its dependencies change.\n * The effect reads from the reactive form store, so Vue's Proxy tracking\n * knows exactly which elements to update when a field value changes.\n */\n\nimport { effect, stop } from \"../reactivity.js\"\nimport { logger } from \"../utils/logger.js\"\nimport { resolveSpread } from \"../utils/resolution.js\"\nimport { createStage } from \"../utils/functionContext.js\"\nimport { normalizeDef, isEventKey } from \"../utils/normalizeKeys.js\"\nimport { trace, isDebugActive } from \"../utils/gstDebug.js\"\nimport { buildContext } from \"../utils/buildContext.js\"\nimport { getFieldValue, setFieldValue } from \"../utils/dotPath.js\"\n\n// Security: Blocked HTML elements\nconst BLOCKED_ELEMENTS = new Set([\n \"script\",\n \"iframe\",\n \"object\",\n \"embed\",\n \"applet\",\n \"link\",\n \"base\",\n \"meta\",\n \"form\",\n \"frame\",\n \"frameset\",\n \"param\",\n])\n\nconst isHtmlElement = component => {\n if (typeof component !== \"string\") return false\n if (component[0] === component[0].toUpperCase()) return false\n if (BLOCKED_ELEMENTS.has(component)) {\n if (isDebugActive()) {\n trace('render', `blocked-element \"${component}\"`, 'BLOCKED for security', { component })\n }\n return false\n }\n return true\n}\n\n/**\n * Resolve a component definition from the registry\n */\nfunction resolveComponentDef(\n componentName,\n componentsRegistry,\n allRegistries = null,\n) {\n if (!componentName || !componentsRegistry) {\n if (isDebugActive()) {\n trace('component', 'resolve-component-def', 'null (no name or no registry)', {\n componentName, hasRegistry: !!componentsRegistry\n })\n }\n return null\n }\n const componentDef = componentsRegistry[componentName]\n if (!componentDef) {\n if (isDebugActive()) {\n trace('component', 'resolve-component-def', `null (\"${componentName}\" not in components registry)`, {\n componentName,\n availableComponents: Object.keys(componentsRegistry)\n })\n }\n return null\n }\n const resolved = resolveSpread(\n componentDef,\n componentsRegistry,\n \"components\",\n componentName,\n {\n allRegistries,\n },\n )\n if (isDebugActive()) {\n trace('component', 'resolve-component-def', `found \"${componentName}\"`, {\n componentName,\n hasAdapter: !!resolved?._adapter,\n resolvedKeys: resolved ? Object.keys(resolved) : null\n })\n }\n return resolved\n}\n\n/**\n * Get the mount adapter from a resolved definition\n */\nfunction getComponentAdapter(componentDef) {\n if (!componentDef) return null\n return componentDef._adapter || null\n}\n\n/**\n * Resolve a dynamic property value\n *\n * If the value is a {{funcName}} string, look up the function and call it.\n * Otherwise return the static value.\n */\nfunction resolveProp(propName, propValue, store, def) {\n if (propValue === undefined || propValue === null) return propValue\n if (typeof propValue === \"function\") return propValue\n\n // Array of functions: resolve each and compose.\n // For event handlers (onBlur, onChange, etc.), run in sequence.\n // For non-event props, return the last truthy result.\n if (Array.isArray(propValue)) {\n const resolved = propValue\n .map(v => resolveProp(propName, v, store, def))\n .filter(Boolean)\n if (resolved.length === 0) return undefined\n if (resolved.length === 1) return resolved[0]\n\n if (isEventKey(propName)) {\n // Compose event handlers: run each in sequence\n return event => {\n let result\n for (const fn of resolved) {\n result = typeof fn === \"function\" ? fn(event) : fn\n }\n return result\n }\n }\n // Non-event arrays: return last value\n return resolved[resolved.length - 1]\n }\n\n if (typeof propValue !== \"string\" || !propValue.startsWith(\"{{\"))\n return propValue\n\n const raw = propValue.slice(2, -2).trim()\n const colonIdx = raw.indexOf(':')\n const funcName = colonIdx === -1 ? raw : raw.slice(0, colonIdx)\n const arg = colonIdx === -1 ? undefined : raw.slice(colonIdx + 1)\n const func = store.registries?.functions?.[funcName]\n if (!func) {\n logger.warn(`Function \"${funcName}\" not found for property \"${propName}\"`)\n if (isDebugActive()) {\n trace('prop', `resolve-dynamic-prop \"${def?.name || '?'}.${propName}\"`, `MISSING function \"${funcName}\"`, {\n field: def?.name,\n property: propName,\n functionName: funcName,\n availableFunctions: Object.keys(store.registries?.functions || {})\n })\n }\n return undefined\n }\n\n const context = buildContext(store)\n const stage = createStage(def, () => context, def?.name)\n\n // Event handlers get wrapped, not called\n if (isEventKey(propName)) {\n if (isDebugActive()) {\n trace('prop', `resolve-dynamic-prop \"${def?.name || '?'}.${propName}\"`, `wrapped event handler \"${funcName}\"`, {\n field: def?.name, property: propName, functionName: funcName\n })\n }\n return event => {\n try {\n return func.call(stage, buildContext(store), event, arg)\n } catch (error) {\n logger.error(\n `Error in event handler ${propName} with function ${funcName}:`,\n error,\n )\n return undefined\n }\n }\n }\n\n try {\n const result = func.call(stage, context, null, arg)\n if (isDebugActive()) {\n trace('prop', `resolve-dynamic-prop \"${def?.name || '?'}.${propName}\"`, `${funcName}() -> ${JSON.stringify(result)}`, {\n field: def?.name, property: propName, functionName: funcName, result\n })\n }\n return result\n } catch (error) {\n logger.error(\n `Error resolving ${propName} with function ${funcName}:`,\n error,\n )\n if (isDebugActive()) {\n trace('prop', `resolve-dynamic-prop \"${def?.name || '?'}.${propName}\"`, `ERROR in ${funcName}(): ${error.message}`, {\n field: def?.name, property: propName, functionName: funcName, error: error.message\n })\n }\n return undefined\n }\n}\n\n/**\n * Resolve event handler properties (on*) on a definition object.\n * Converts {{funcName}} strings and arrays of them into callable functions\n * so components receive ready-to-call handlers.\n */\nfunction resolveEventHandlers(def, store) {\n let resolved = null\n for (const key of Object.keys(def)) {\n if (isEventKey(key)) {\n const val = def[key]\n if (typeof val === \"string\" || Array.isArray(val)) {\n const fn = resolveProp(key, val, store, def)\n if (fn !== val) {\n if (!resolved) resolved = { ...def }\n resolved[key] = fn\n }\n }\n }\n }\n return resolved || def\n}\n\n/**\n * Check visibility based on show property\n */\nfunction resolveVisibility(def, store) {\n if (!def) return true\n if (def.show !== undefined) {\n const result = !!resolveProp(\"show\", def.show, store, def)\n if (isDebugActive()) {\n trace('visibility', `resolve-visibility \"${def.name || '?'}\"`, result ? 'visible' : 'hidden', {\n field: def.name,\n showValue: def.show,\n resolved: result\n })\n }\n return result\n }\n return true\n}\n\n// buildContext is imported from ../utils/buildContext.js\n\n/**\n * Set attributes/properties on a DOM element, skipping undefined values.\n * Handles the DOM property vs attribute distinction.\n */\nfunction setProps(el, props) {\n for (const [key, value] of Object.entries(props)) {\n if (value === undefined) continue\n\n // Event listeners\n if (key.startsWith(\"on\") && typeof value === \"function\") {\n const eventName = key.slice(2).toLowerCase()\n el.addEventListener(eventName, value)\n continue\n }\n\n // Boolean DOM properties (config keys are lowercase after normalization)\n if (\n key === \"disabled\" ||\n key === \"required\" ||\n key === \"readonly\" ||\n key === \"checked\"\n ) {\n // DOM property names: readOnly is camelCase, others are lowercase\n const domProp = key === \"readonly\" ? \"readOnly\" : key\n el[domProp] = !!value\n continue\n }\n\n // Value property (not attribute)\n if (key === \"value\") {\n el.value = value\n continue\n }\n\n // class attribute (HTML-native name after normalization)\n if (key === \"class\") {\n if (value) el.setAttribute(\"class\", value)\n continue\n }\n\n // Style object\n if (key === \"style\" && typeof value === \"object\") {\n Object.assign(el.style, value)\n continue\n }\n\n // data-* attributes and everything else\n if (value !== null && value !== false) {\n el.setAttribute(key, value)\n }\n }\n}\n\n/**\n * Resolve a field name reference to a definition object\n */\nfunction resolveItem(\n item,\n localFields,\n fieldsRegistry,\n parentName,\n allRegistries,\n) {\n if (typeof item !== \"string\") return item\n\n let fieldDef = localFields[item]\n const isLocal = !!fieldDef\n\n if (fieldDef) {\n fieldDef = resolveSpread(fieldDef, fieldsRegistry, \"fields\", item, {\n allRegistries,\n })\n } else {\n fieldDef = fieldsRegistry[item]\n }\n\n if (!fieldDef) {\n logger.warn(`Field \"${item}\" not found in registry`)\n if (isDebugActive()) {\n trace('layout', `resolve-item \"${item}\"`, 'NOT FOUND (creating empty stub)', {\n item,\n searchedLocal: Object.keys(localFields),\n searchedRegistry: Object.keys(fieldsRegistry),\n parentName\n })\n }\n return { name: item }\n }\n\n const name = isLocal && parentName ? `${parentName}.${item}` : item\n if (isDebugActive()) {\n trace('layout', `resolve-item \"${item}\"`, `found (${isLocal ? 'local' : 'registry'})`, {\n item, resolvedName: name, component: fieldDef.component, isLocal\n })\n }\n return { ...fieldDef, name }\n}\n\n// ============================================================================\n// Render functions for each branch\n// ============================================================================\n\n/**\n * Render a native HTML element (branch 2)\n */\nfunction renderHtmlElement(\n container,\n component,\n mergedDef,\n store,\n isChild,\n cleanup,\n contentElements = [],\n) {\n const el = document.createElement(component)\n const name = mergedDef.name\n\n // Static props that don't change\n if (mergedDef._componentName) {\n el.setAttribute(\"data-gst-component\", mergedDef._componentName)\n }\n\n // Reactive effect: updates DOM when store changes\n const runner = effect(() => {\n // Resolve dynamic props\n if (isChild) {\n const cls = resolveProp(\n \"class\",\n mergedDef.class,\n store,\n mergedDef,\n )\n if (cls) el.setAttribute(\"class\", cls)\n else el.removeAttribute(\"class\")\n }\n\n const id = resolveProp(\"id\", mergedDef.id, store, mergedDef)\n if (id) el.id = id\n\n const style = resolveProp(\"style\", mergedDef.style, store, mergedDef)\n if (style && typeof style === \"object\") {\n el.removeAttribute(\"style\")\n Object.assign(el.style, style)\n }\n\n const title = resolveProp(\"title\", mergedDef.title, store, mergedDef)\n if (title) el.title = title\n\n // Element-specific reactive props\n if (component === \"a\") {\n const href = resolveProp(\"href\", mergedDef.href, store, mergedDef)\n if (href) el.href = href\n const target = resolveProp(\"target\", mergedDef.target, store, mergedDef)\n if (target) el.target = target\n }\n\n if (component === \"img\") {\n const src = resolveProp(\"src\", mergedDef.src, store, mergedDef)\n if (src) el.src = src\n const alt = resolveProp(\"alt\", mergedDef.alt, store, mergedDef)\n if (alt !== undefined) el.alt = alt\n }\n\n if (component === \"label\") {\n const forAttr = resolveProp(\n \"for\",\n mergedDef.for,\n store,\n mergedDef,\n )\n if (forAttr) el.htmlFor = forAttr\n }\n\n if (component === \"input\") {\n if (mergedDef.type) el.type = mergedDef.type\n if (name) el.name = name\n const placeholder = resolveProp(\n \"placeholder\",\n mergedDef.placeholder,\n store,\n mergedDef,\n )\n if (placeholder) el.placeholder = placeholder\n const isRequired = !!resolveProp(\n \"required\",\n mergedDef.required,\n store,\n mergedDef,\n )\n el.disabled = !!resolveProp(\n \"disabled\",\n mergedDef.disabled,\n store,\n mergedDef,\n )\n el.readOnly = !!resolveProp(\n \"readonly\",\n mergedDef.readonly,\n store,\n mergedDef,\n )\n el.required = isRequired\n if (isRequired) el.setAttribute(\"aria-required\", \"true\")\n const autocomp = resolveProp(\"autocomplete\", mergedDef.autocomplete, store, mergedDef)\n if (autocomp) el.autocomplete = autocomp\n\n // aria-invalid: reactive based on field errors\n const errors = name ? store.fieldErrors?.[name] || [] : []\n if (errors.length) el.setAttribute(\"aria-invalid\", \"true\")\n else el.removeAttribute(\"aria-invalid\")\n\n // Value binding\n if (name || mergedDef.bind) {\n const value = getFieldValue(store, name, mergedDef)\n if (mergedDef.type === \"checkbox\") {\n el.checked = !!value\n } else {\n el.value = value ?? \"\"\n }\n }\n }\n\n if (component === \"textarea\") {\n if (name) el.name = name\n const placeholder = resolveProp(\"placeholder\", mergedDef.placeholder, store, mergedDef)\n if (placeholder) el.placeholder = placeholder\n const isRequired = !!resolveProp(\"required\", mergedDef.required, store, mergedDef)\n el.disabled = !!resolveProp(\"disabled\", mergedDef.disabled, store, mergedDef)\n el.readOnly = !!resolveProp(\"readonly\", mergedDef.readonly, store, mergedDef)\n el.required = isRequired\n if (isRequired) el.setAttribute(\"aria-required\", \"true\")\n if (typeof mergedDef.rows === \"number\") el.rows = mergedDef.rows\n if (name || mergedDef.bind) el.value = getFieldValue(store, name, mergedDef) ?? \"\"\n\n // aria-invalid: reactive based on field errors\n const errors = name ? store.fieldErrors?.[name] || [] : []\n if (errors.length) el.setAttribute(\"aria-invalid\", \"true\")\n else el.removeAttribute(\"aria-invalid\")\n }\n\n if (component === \"select\") {\n if (name) el.name = name\n const isRequired = !!resolveProp(\n \"required\",\n mergedDef.required,\n store,\n mergedDef,\n )\n el.disabled = !!resolveProp(\n \"disabled\",\n mergedDef.disabled,\n store,\n mergedDef,\n )\n el.required = isRequired\n if (isRequired) el.setAttribute(\"aria-required\", \"true\")\n const selectAutocomp = resolveProp(\"autocomplete\", mergedDef.autocomplete, store, mergedDef)\n if (selectAutocomp) el.autocomplete = selectAutocomp\n if (name || mergedDef.bind) el.value = getFieldValue(store, name, mergedDef) ?? \"\"\n\n // aria-invalid: reactive based on field errors\n const errors = name ? store.fieldErrors?.[name] || [] : []\n if (errors.length) el.setAttribute(\"aria-invalid\", \"true\")\n else el.removeAttribute(\"aria-invalid\")\n }\n\n if (component === \"button\") {\n el.type = mergedDef.type || \"button\"\n const isDisabled = !!resolveProp(\n \"disabled\",\n mergedDef.disabled,\n store,\n mergedDef,\n )\n el.disabled = isDisabled\n if (isDisabled) el.setAttribute(\"aria-disabled\", \"true\")\n if (store.isSubmitting) el.setAttribute(\"aria-busy\", \"true\")\n if (mergedDef.variant) {\n el.setAttribute(\n \"class\",\n [\"btn\", `btn-${mergedDef.variant}`].filter(Boolean).join(\" \"),\n )\n }\n }\n })\n\n cleanup.push(() => stop(runner))\n\n // Event listeners (set once, not in effect)\n if (\n (name || mergedDef.bind) &&\n (component === \"input\" ||\n component === \"textarea\" ||\n component === \"select\")\n ) {\n const handler = e => {\n const val = mergedDef.type === \"checkbox\" ? e.target.checked : e.target.value\n setFieldValue(store, name, mergedDef, val)\n }\n el.addEventListener(component === \"select\" ? \"change\" : \"input\", handler)\n }\n\n if (component === \"button\" && mergedDef.action) {\n const actions = Array.isArray(mergedDef.action)\n ? mergedDef.action\n : [mergedDef.action]\n el.addEventListener(\"click\", async () => {\n if (!store.executeAction) return\n for (const action of actions) {\n await store.executeAction(action, { buttonName: name })\n }\n })\n }\n\n // Attach event handlers from def (onclick, onblur, onfocus, etc.)\n for (const key of Object.keys(mergedDef)) {\n if (isEventKey(key)) {\n const fn = resolveProp(key, mergedDef[key], store, mergedDef)\n if (typeof fn === \"function\") {\n const eventName = key.slice(2).toLowerCase()\n el.addEventListener(eventName, fn)\n }\n }\n }\n\n // Security: Block innerHTML\n if (mergedDef.innerhtml) {\n logger.warn(\n `Security: innerHTML not allowed. Use innertext or children. Element: ${name || \"unnamed\"}`,\n )\n }\n\n // Append child elements (from children array in the definition)\n if (contentElements.length > 0) {\n for (const child of contentElements) {\n el.appendChild(child)\n }\n }\n\n // Dynamic text content (innertext, button label) -- needs reactive effect\n // so {{funcName}} references re-evaluate when store changes\n const hasDynamicInnerText =\n contentElements.length === 0 && mergedDef.innertext !== undefined\n const hasDynamicLabel = component === \"button\" && mergedDef.label\n if (hasDynamicInnerText || hasDynamicLabel) {\n const textRunner = effect(() => {\n if (hasDynamicInnerText) {\n const text = resolveProp(\n \"innertext\",\n mergedDef.innertext,\n store,\n mergedDef,\n )\n if (text !== undefined) {\n el.textContent = text\n }\n } else if (hasDynamicLabel && !el.textContent) {\n el.textContent = resolveProp(\"label\", mergedDef.label, store, mergedDef)\n }\n })\n cleanup.push(() => stop(textRunner))\n }\n\n // Select options\n if (component === \"select\" && mergedDef.options) {\n let options = mergedDef.options\n if (typeof options === \"string\") {\n const optionSetName = options\n options = store.registries?.optionSets?.[options] || []\n if (isDebugActive()) {\n trace('registry', `resolve-option-set \"${name || '?'}\"`, options.length > 0 ? `found \"${optionSetName}\" (${options.length} items)` : `MISSING \"${optionSetName}\" (empty)`, {\n field: name, optionSetName,\n availableOptionSets: Object.keys(store.registries?.optionSets || {}),\n itemCount: options.length\n })\n }\n }\n const placeholder = resolveProp(\n \"placeholder\",\n mergedDef.placeholder,\n store,\n mergedDef,\n )\n if (placeholder) {\n const opt = document.createElement(\"option\")\n opt.value = \"\"\n opt.textContent = placeholder\n el.appendChild(opt)\n }\n if (Array.isArray(options)) {\n for (const opt of options) {\n const optEl = document.createElement(\"option\")\n optEl.value = typeof opt === \"object\" ? opt.value : opt\n optEl.textContent =\n typeof opt === \"object\" ? opt.label || opt.value : opt\n el.appendChild(optEl)\n }\n }\n }\n\n container.appendChild(el)\n return el\n}\n\n/**\n * Render a group with header and content (branch 4)\n */\nfunction renderGroup(container, mergedDef, store, children, cleanup) {\n const div = document.createElement(\"div\")\n\n const runner = effect(() => {\n const baseClassName = resolveProp(\n \"class\",\n mergedDef.class,\n store,\n mergedDef,\n )\n const hasRows =\n Array.isArray(mergedDef.rows) || Array.isArray(mergedDef.layout)\n const groupTitle = resolveProp(\"title\", mergedDef.title, store, mergedDef)\n const groupDescription = resolveProp(\n \"description\",\n mergedDef.description,\n store,\n mergedDef,\n )\n const isGroup = hasRows || groupTitle || groupDescription\n const className = isGroup\n ? [baseClassName, \"group\"].filter(Boolean).join(\" \")\n : baseClassName\n\n if (className) div.setAttribute(\"class\", className)\n else div.removeAttribute(\"class\")\n\n const id = resolveProp(\"id\", mergedDef.id, store, mergedDef)\n if (id) div.id = id\n\n const style = resolveProp(\"style\", mergedDef.style, store, mergedDef)\n if (style && typeof style === \"object\") {\n div.removeAttribute(\"style\")\n Object.assign(div.style, style)\n }\n })\n\n cleanup.push(() => stop(runner))\n\n // Render header\n const groupTitle = resolveProp(\"title\", mergedDef.title, store, mergedDef)\n const groupDescription = resolveProp(\n \"description\",\n mergedDef.description,\n store,\n mergedDef,\n )\n\n if (groupTitle || groupDescription) {\n const header = document.createElement(\"div\")\n header.className = \"group-header\"\n\n if (groupTitle) {\n const titleId = mergedDef.name\n ? `gst-group-${mergedDef.name}-title`\n : undefined\n const h3 = document.createElement(\"h3\")\n h3.className = \"group-title\"\n if (titleId) h3.id = titleId\n h3.textContent = groupTitle\n\n const groupRequired = resolveProp(\n \"required\",\n mergedDef.required,\n store,\n mergedDef,\n )\n if (groupRequired) {\n const span = document.createElement(\"span\")\n span.className = \"required-indicator\"\n span.setAttribute(\"aria-hidden\", \"true\")\n span.textContent = \" *\"\n h3.appendChild(span)\n }\n header.appendChild(h3)\n\n // Associate group container with its title\n div.setAttribute(\"role\", \"group\")\n if (titleId) div.setAttribute(\"aria-labelledby\", titleId)\n }\n\n if (groupDescription) {\n const p = document.createElement(\"p\")\n p.className = \"group-description\"\n p.textContent = groupDescription\n header.appendChild(p)\n }\n\n div.appendChild(header)\n }\n\n // Append children (already rendered)\n for (const child of children) {\n div.appendChild(child)\n }\n\n // Render group-level buttonSet (normalized to lowercase \"buttonset\")\n const groupButtonSet = mergedDef.buttonset || mergedDef.buttonSet\n if (Array.isArray(groupButtonSet) && groupButtonSet.length > 0) {\n const buttonsDiv = document.createElement(\"div\")\n buttonsDiv.className = \"group-buttons\"\n const buttonsRegistry = store.registries?.buttons || {}\n\n for (const btnRef of groupButtonSet) {\n let btnDef =\n typeof btnRef === \"string\"\n ? { ...(buttonsRegistry[btnRef] || {}), name: btnRef }\n : btnRef\n if (btnDef[\"...\"]) {\n btnDef = resolveSpread(\n btnDef,\n buttonsRegistry,\n \"buttons\",\n btnDef.name,\n {\n allRegistries: store.registries,\n },\n )\n }\n renderElement(\n buttonsDiv,\n { component: \"button\", ...btnDef },\n store,\n cleanup,\n )\n }\n\n div.appendChild(buttonsDiv)\n }\n\n container.appendChild(div)\n return div\n}\n\n// ============================================================================\n// Main entry point\n// ============================================================================\n\n/**\n * Render a form element into a DOM container\n *\n * Recursively walks the definition tree and creates DOM elements with\n * reactive effects that update when the store changes.\n *\n * @param {HTMLElement} container - DOM element to render into\n * @param {Object} def - Field/group/element definition\n * @param {Object} store - Reactive form store\n * @param {Array} cleanup - Array to collect effect cleanup functions\n * @param {Object} [options] - Render options\n * @param {boolean} [options.isChild] - Whether this is a direct child (for className handling)\n * @returns {HTMLElement|null} The created DOM element, or null if hidden\n */\nexport function renderElement(\n container,\n def,\n store,\n cleanup = [],\n options = {},\n) {\n const { isChild = false } = options\n\n // Resolve component: explicit > meta default (leaf fields only)\n const isLeafField =\n def.name && !def.fields && !def.layout && !Array.isArray(def.rows) && !Array.isArray(def.children)\n let component =\n def.component || (isLeafField ? store.meta?.defaultComponent : undefined)\n\n if (isDebugActive() && def.name) {\n const source = def.component ? 'explicit' : (isLeafField && store.meta?.defaultComponent ? 'meta.defaultComponent' : 'none')\n trace('component', `resolve-component \"${def.name}\"`, component || '(none)', {\n field: def.name, source, isLeafField,\n explicitComponent: def.component,\n defaultComponent: store.meta?.defaultComponent\n })\n }\n\n const componentsRegistry = store.registries?.components || {}\n const fieldsRegistry = store.registries?.fields || {}\n\n // Resolve component template if specified\n let resolvedComponentDef = null\n let mergedDef = def\n\n if (component) {\n resolvedComponentDef = resolveComponentDef(\n component,\n componentsRegistry,\n store.registries,\n )\n if (resolvedComponentDef) {\n mergedDef = {\n ...resolvedComponentDef,\n ...def,\n _component: undefined,\n _adapter: undefined,\n _componentName: component,\n }\n }\n }\n\n // Normalize config keys: case-insensitive, hyphen-to-camelCase\n mergedDef = normalizeDef(mergedDef)\n\n // Visibility: create a wrapper that shows/hides reactively\n // We need a placeholder in the DOM so we can insert the element later if it becomes visible\n const anchor = document.createComment(`gst:${mergedDef.name || \"element\"}`)\n container.appendChild(anchor)\n\n let currentEl = null\n let childCleanup = []\n\n const visibilityRunner = effect(() => {\n const isVisible = resolveVisibility(mergedDef, store)\n\n if (!isVisible) {\n // Remove existing element if it was rendered\n if (currentEl) {\n // Notify that this element just became hidden (e.g., for clearing field data).\n // Only fire if THIS element owns the show -- not if a parent hid us.\n const ownsVisibility = mergedDef.show !== undefined\n if (ownsVisibility && store._onHide) {\n store._onHide(mergedDef, store)\n }\n\n currentEl.remove()\n currentEl = null\n // Clean up child effects\n for (const fn of childCleanup) fn()\n childCleanup = []\n }\n return\n }\n\n // Already visible and rendered, skip (inner effects handle updates)\n if (currentEl) return\n\n // Render the element\n childCleanup = []\n const tempContainer = document.createDocumentFragment()\n\n const rendered = renderVisibleElement(\n tempContainer,\n component,\n mergedDef,\n resolvedComponentDef,\n store,\n fieldsRegistry,\n isChild,\n childCleanup,\n )\n\n if (rendered) {\n anchor.parentNode.insertBefore(rendered, anchor.nextSibling)\n currentEl = rendered\n }\n })\n\n cleanup.push(() => {\n stop(visibilityRunner)\n for (const fn of childCleanup) fn()\n })\n\n return currentEl\n}\n\n/**\n * Render an element that is known to be visible\n */\nfunction renderVisibleElement(\n container,\n component,\n mergedDef,\n resolvedComponentDef,\n store,\n fieldsRegistry,\n isChild,\n cleanup,\n) {\n const localFields = mergedDef.fields || {}\n const parentName = mergedDef.name\n\n // Resolve nested content\n const normalizedRows = mergedDef.rows || mergedDef.layout\n let contentElements = []\n\n if (Array.isArray(normalizedRows)) {\n for (const row of normalizedRows) {\n const rowDiv = document.createElement(\"div\")\n rowDiv.className = mergedDef.rowclassname || \"row\"\n\n if (Array.isArray(row)) {\n for (const item of row) {\n const resolved = resolveItem(\n item,\n localFields,\n fieldsRegistry,\n parentName,\n store.registries,\n )\n renderElement(rowDiv, resolved, store, cleanup)\n }\n }\n\n contentElements.push(rowDiv)\n }\n } else if (Array.isArray(mergedDef.children)) {\n for (const child of mergedDef.children) {\n if (typeof child === \"string\") {\n contentElements.push(document.createTextNode(child))\n } else {\n const childContainer = document.createDocumentFragment()\n renderElement(childContainer, child, store, cleanup, { isChild: true })\n contentElements.push(childContainer)\n }\n }\n }\n\n const hasContent = contentElements.length > 0\n const isContainer =\n mergedDef.fields || mergedDef.layout || Array.isArray(mergedDef.rows)\n\n // Branch 1: Registered component with adapter\n const adapter = component ? getComponentAdapter(resolvedComponentDef) : null\n if (adapter) {\n if (isDebugActive()) {\n trace('render', `render-branch \"${mergedDef.name || component || '?'}\"`, 'adapter (registered component)', {\n component, name: mergedDef.name, isContainer, hasContent,\n adapterType: typeof adapter.mount\n })\n }\n // Resolve event handler props (on*) so components receive functions,\n // not raw {{funcName}} strings or arrays of them.\n const resolvedDef = resolveEventHandlers(mergedDef, store)\n\n if (!isContainer && !hasContent) {\n // Leaf field: wrap in .field div\n const fieldDiv = document.createElement(\"div\")\n const type = (typeof resolvedDef.type === 'string' ? resolvedDef.type.toLowerCase() : null)\n const componentName = component?.toLowerCase()\n const typeClass = type ? `type-${type}` : null\n const componentClass = componentName ? `component-${componentName}` : null\n const resolvedClassName = resolveProp(\n \"class\",\n resolvedDef.class,\n store,\n resolvedDef,\n )\n fieldDiv.className = [\n \"field\",\n typeClass,\n componentClass,\n resolvedClassName,\n ]\n .filter(Boolean)\n .join(\" \")\n\n if (resolvedDef.name)\n fieldDiv.setAttribute(\"data-field\", resolvedDef.name)\n if (type) fieldDiv.setAttribute(\"data-type\", type)\n\n const mounted = adapter.mount(fieldDiv, { def: resolvedDef, store })\n cleanup.push(() => {\n if (mounted?.unmount) mounted.unmount()\n })\n\n // Sync computed value: if def.value is a {{fn}} reference, resolve it\n // reactively and write the result into store.record.data (or bind target)\n if (resolvedDef.value && (resolvedDef.name || resolvedDef.bind)) {\n const computedEffect = effect(() => {\n const resolved = resolveProp(\"value\", resolvedDef.value, store, resolvedDef)\n if (resolved !== undefined) {\n setFieldValue(store, resolvedDef.name, resolvedDef, resolved)\n }\n })\n cleanup.push(() => stop(computedEffect))\n }\n\n container.appendChild(fieldDiv)\n return fieldDiv\n }\n\n const wrapperDiv = document.createElement(\"div\")\n const mounted = adapter.mount(wrapperDiv, {\n def: resolvedDef,\n store,\n children: contentElements,\n })\n cleanup.push(() => {\n if (mounted?.unmount) mounted.unmount()\n })\n\n container.appendChild(wrapperDiv)\n return wrapperDiv\n }\n\n // Branch 1b: Built-in vanilla component\n // Look up vanilla component renderers from the store (provided by stdlib)\n const builtinRender = component ? store.components?.[component] : null\n if (builtinRender) {\n if (isDebugActive()) {\n trace('render', `render-branch \"${mergedDef.name || component || '?'}\"`, 'builtin (vanilla component)', {\n component, name: mergedDef.name\n })\n }\n const resolvedDef2 = resolveEventHandlers(mergedDef, store)\n const fieldDiv = document.createElement(\"div\")\n const type = (typeof resolvedDef2.type === 'string' ? resolvedDef2.type.toLowerCase() : null)\n const componentName = component?.toLowerCase()\n const typeClass = type ? `type-${type}` : null\n const componentClass = componentName ? `component-${componentName}` : null\n const resolvedClassName = resolveProp(\n \"class\",\n resolvedDef2.class,\n store,\n resolvedDef2,\n )\n fieldDiv.className = [\"field\", typeClass, componentClass, resolvedClassName]\n .filter(Boolean)\n .join(\" \")\n\n if (resolvedDef2.name)\n fieldDiv.setAttribute(\"data-field\", resolvedDef2.name)\n if (type) fieldDiv.setAttribute(\"data-type\", type)\n\n builtinRender(fieldDiv, resolvedDef2, store, cleanup)\n\n // Sync computed value: if def.value is a {{fn}} reference, resolve it\n // reactively and write the result into store (record.data or bind target)\n if (resolvedDef2.value && (resolvedDef2.name || resolvedDef2.bind)) {\n const computedEffect = effect(() => {\n const resolved = resolveProp(\"value\", resolvedDef2.value, store, resolvedDef2)\n if (resolved !== undefined) {\n setFieldValue(store, resolvedDef2.name, resolvedDef2, resolved)\n }\n })\n cleanup.push(() => stop(computedEffect))\n }\n\n container.appendChild(fieldDiv)\n return fieldDiv\n }\n\n // Branch 2a: Raw HTML (component: \"html\")\n if (component === 'html') {\n const el = document.createElement('div')\n if (mergedDef.name) el.setAttribute('data-field', mergedDef.name)\n if (mergedDef.class) el.className = mergedDef.class\n if (mergedDef.style && typeof mergedDef.style === 'object') {\n Object.assign(el.style, mergedDef.style)\n }\n const runner = effect(() => {\n const content = resolveProp('content', mergedDef.content, store, mergedDef)\n || resolveProp('innerhtml', mergedDef.innerhtml, store, mergedDef)\n || ''\n el.innerHTML = content\n })\n cleanup.push(() => stop(runner))\n container.appendChild(el)\n return el\n }\n\n // Branch 2: Native HTML element\n if (component && isHtmlElement(component)) {\n if (isDebugActive()) {\n trace('render', `render-branch \"${mergedDef.name || component || '?'}\"`, `html-element <${component}>`, {\n component, name: mergedDef.name\n })\n }\n return renderHtmlElement(\n container,\n component,\n mergedDef,\n store,\n isChild,\n cleanup,\n contentElements,\n )\n }\n\n // Branch 3: Unknown component\n if (component && !hasContent) {\n logger.warn(`Unknown component: ${component}. Make sure it's registered.`)\n if (isDebugActive()) {\n trace('render', `render-branch \"${mergedDef.name || component || '?'}\"`, `UNKNOWN component \"${component}\" (returning null)`, {\n component, name: mergedDef.name,\n availableComponents: Object.keys(store.registries?.components || {}),\n availableBuiltins: Object.keys(store.components || {})\n })\n }\n return null\n }\n\n // Branch 4: No component, has content -> group or fragment\n if (hasContent) {\n if (isDebugActive()) {\n trace('render', `render-branch \"${mergedDef.name || '?'}\"`, 'group/fragment (has content, no component)', {\n name: mergedDef.name, hasTitle: !!mergedDef.title,\n hasRows: Array.isArray(mergedDef.rows) || Array.isArray(mergedDef.layout),\n childCount: contentElements.length\n })\n }\n const groupTitle = resolveProp(\"title\", mergedDef.title, store, mergedDef)\n const groupDescription = resolveProp(\n \"description\",\n mergedDef.description,\n store,\n mergedDef,\n )\n const hasRows =\n Array.isArray(mergedDef.rows) || Array.isArray(mergedDef.layout)\n const isGroup = hasRows || groupTitle || groupDescription\n const hasWrapperProps =\n mergedDef.class || mergedDef.style || mergedDef.id || isGroup\n\n if (hasWrapperProps || mergedDef.name) {\n return renderGroup(container, mergedDef, store, contentElements, cleanup)\n }\n\n // Fragment: just append children directly\n for (const child of contentElements) {\n container.appendChild(child)\n }\n return container.lastElementChild\n }\n\n // Branch 5: Nothing -> empty div\n if (isDebugActive()) {\n trace('render', `render-branch \"${mergedDef.name || '?'}\"`, 'EMPTY (no component, no content -> empty div)', {\n name: mergedDef.name, def: mergedDef\n })\n }\n const empty = document.createElement(\"div\")\n container.appendChild(empty)\n return empty\n}\n\n/**\n * Render slot content into a container.\n *\n * Slot content is regular gst config: a string (text node), an object\n * (single element definition), or an array of either. The renderer\n * walks the content the same way it walks children -- calling\n * renderElement for objects and creating text nodes for strings.\n *\n * Returns the cleanup array so callers can tear down slot effects.\n */\nexport function renderSlot(container, slotContent, store, cleanup = []) {\n if (slotContent == null) return cleanup\n\n const items = Array.isArray(slotContent) ? slotContent : [slotContent]\n\n for (const item of items) {\n if (typeof item === \"string\") {\n container.appendChild(document.createTextNode(item))\n } else if (typeof item === \"object\") {\n renderElement(container, item, store, cleanup, { isChild: true })\n }\n }\n\n return cleanup\n}\n","/**\n * Style Processor\n *\n * Converts JS-style CSS objects to actual CSS strings with optional scoping.\n * Supports:\n * - camelCase to kebab-case property conversion\n * - CSS variable definitions via `vars` property\n * - Media queries via `@media` keys\n * - Scoped styles via data attribute\n * - Dynamic class generation from record properties\n */\n\n/**\n * Convert camelCase to kebab-case\n * @param {string} str - camelCase string\n * @returns {string} kebab-case string\n */\nfunction toKebabCase(str) {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()\n}\n\n/**\n * Convert a JS-style property object to CSS declarations\n * @param {Object} properties - Object with camelCase properties\n * @returns {string} CSS declarations (without braces)\n */\nfunction propertiesToCSS(properties) {\n return Object.entries(properties)\n .filter(([key]) => !key.startsWith('@')) // Filter out nested at-rules\n .map(([prop, value]) => {\n const cssProp = toKebabCase(prop)\n return ` ${cssProp}: ${value};`\n })\n .join('\\n')\n}\n\n/**\n * Convert a vars object to CSS custom properties\n * @param {Object} vars - Object with variable definitions\n * @param {string} scopeSelector - Optional scope selector to apply vars to\n * @returns {string} CSS with custom properties\n */\nfunction varsToCSS(vars, scopeSelector = ':root') {\n if (!vars || Object.keys(vars).length === 0) return ''\n\n const declarations = Object.entries(vars)\n .map(([name, value]) => {\n // Convert camelCase var names to kebab-case with -- prefix\n const varName = name.startsWith('--') ? name : `--${toKebabCase(name)}`\n return ` ${varName}: ${value};`\n })\n .join('\\n')\n\n return `${scopeSelector} {\\n${declarations}\\n}`\n}\n\n/**\n * Process rules object into CSS, handling nested media queries\n * @param {Object} rules - Style rules object\n * @param {string|null} scopePrefix - Scope selector prefix\n * @returns {string} CSS string\n */\nfunction rulesToCSS(rules, scopePrefix = null) {\n if (!rules || Object.keys(rules).length === 0) return ''\n\n const cssBlocks = []\n const mediaBlocks = {}\n\n for (const [selector, properties] of Object.entries(rules)) {\n if (selector.startsWith('@media')) {\n // Media query - collect nested rules\n const mediaRules = rulesToCSS(properties, scopePrefix)\n if (mediaRules) {\n mediaBlocks[selector] = mediaRules\n }\n } else if (selector.startsWith('@')) {\n // Other at-rules (keyframes, supports, etc.)\n // For now, pass through as-is with nested content\n const content = typeof properties === 'object'\n ? rulesToCSS(properties, null) // Don't scope inside keyframes\n : properties\n cssBlocks.push(`${selector} {\\n${content}\\n}`)\n } else {\n // Regular selector - handle comma-separated selectors\n const scopedSelector = scopePrefix\n ? selector.split(',').map(s => {\n const trimmed = s.trim()\n // & prefix means same element as scope (like CSS nesting)\n // e.g., &.department-sales -> [data-gst-scope=\"x\"].department-sales\n // Without &, it's a descendant: .foo -> [data-gst-scope=\"x\"] .foo\n if (trimmed.startsWith('&')) {\n return `${scopePrefix}${trimmed.slice(1)}`\n }\n return `${scopePrefix} ${trimmed}`\n }).join(', ')\n : selector\n const declarations = propertiesToCSS(properties)\n if (declarations) {\n cssBlocks.push(`${scopedSelector} {\\n${declarations}\\n}`)\n }\n }\n }\n\n // Add media queries at the end\n for (const [mediaQuery, content] of Object.entries(mediaBlocks)) {\n cssBlocks.push(`${mediaQuery} {\\n${content}\\n}`)\n }\n\n return cssBlocks.join('\\n\\n')\n}\n\n/**\n * Generate a unique scope ID\n * @returns {string} Unique scope ID\n */\nexport function generateScopeId() {\n return 'gst-' + Math.random().toString(36).substring(2, 9)\n}\n\n/**\n * Process a style configuration object into injectable CSS\n * @param {Object} styleConfig - Style configuration\n * @param {boolean} styleConfig.scoped - Whether to scope styles (default: true)\n * @param {Object} styleConfig.vars - CSS variable definitions\n * @param {Object} styleConfig.rules - Style rules\n * @param {string} scopeId - Unique scope ID for this form\n * @returns {string} Complete CSS string\n */\nexport function processStyles(styleConfig, scopeId) {\n if (!styleConfig) return ''\n\n const { scoped = true, vars, rules } = styleConfig\n const cssBlocks = []\n\n // Determine scope selector\n // scoped: true (default) → [data-gst-scope=\"xxx\"] (unique per form instance)\n // scoped: false → .gst (shared across all gst forms)\n const scopeSelector = scoped && scopeId\n ? `[data-gst-scope=\"${scopeId}\"]`\n : '.gst'\n\n // Process CSS variables (outside layer, so they cascade normally)\n if (vars) {\n // If scoped, apply vars to the scope selector, otherwise to :root\n const varSelector = scopeSelector || ':root'\n const varsCSS = varsToCSS(vars, varSelector)\n if (varsCSS) cssBlocks.push(varsCSS)\n }\n\n // Process rules - no layer wrapper for now, scoping provides isolation\n if (rules) {\n const rulesCSS = rulesToCSS(rules, scopeSelector)\n if (rulesCSS) {\n cssBlocks.push(rulesCSS)\n }\n }\n\n return cssBlocks.join('\\n\\n')\n}\n\n/**\n * Generate dynamic class names from record data\n * @param {Object} dynamicClasses - Dynamic class configuration\n * @param {Object} recordData - Current record data\n * @returns {string} Space-separated class names\n */\nexport function generateDynamicClasses(dynamicClasses, recordData) {\n if (!dynamicClasses || !recordData) return ''\n\n const classes = []\n\n for (const [field, config] of Object.entries(dynamicClasses)) {\n const value = recordData[field]\n if (value === undefined || value === null || value === '') continue\n\n // Sanitize value for use in class name\n const sanitizedValue = String(value)\n .toLowerCase()\n .replace(/[^a-z0-9-_]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n\n if (!sanitizedValue) continue\n\n if (config === true) {\n // Use field name as prefix: status=\"active\" → \"status-active\"\n classes.push(`${toKebabCase(field)}-${sanitizedValue}`)\n } else if (typeof config === 'string') {\n // Use custom prefix: priority=\"high\" with config=\"level\" → \"level-high\"\n classes.push(`${config}-${sanitizedValue}`)\n }\n }\n\n return classes.join(' ')\n}\n\n/**\n * Generate dynamic class for a field based on its own value\n *\n * Supports shorthand syntax for field-level dynamicClasses:\n * - `true` → use field name as prefix (priority=\"high\" → \"priority-high\")\n * - `\"custom\"` → use custom prefix (priority=\"high\" → \"custom-high\")\n * - `{ fieldName: true/string }` → explicit config (same as form-level)\n *\n * @param {string} fieldName - The field name\n * @param {*} value - The field's current value\n * @param {boolean|string|Object} config - Dynamic class configuration\n * @returns {string} Generated class name (or empty string)\n */\nexport function generateFieldDynamicClass(fieldName, value, config) {\n if (!fieldName || value === undefined || value === null || value === '') return ''\n if (!config) return ''\n\n // Normalize config to object form\n let normalizedConfig\n if (config === true) {\n // true → { [fieldName]: true }\n normalizedConfig = { [fieldName]: true }\n } else if (typeof config === 'string') {\n // \"prefix\" → { [fieldName]: \"prefix\" }\n normalizedConfig = { [fieldName]: config }\n } else if (typeof config === 'object') {\n // Already in object form\n normalizedConfig = config\n } else {\n return ''\n }\n\n // Reuse generateDynamicClasses with single-field record\n return generateDynamicClasses(normalizedConfig, { [fieldName]: value })\n}\n\n/**\n * Generate a simple hash from a string (for style deduplication)\n * @param {string} str - String to hash\n * @returns {string} Hash string\n */\nfunction hashString(str) {\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash // Convert to 32-bit integer\n }\n return Math.abs(hash).toString(36)\n}\n\n/**\n * Create a style element and inject it into the document\n * @param {string} css - CSS string to inject\n * @param {string} id - Unique ID for the style element\n * @returns {HTMLStyleElement} The created style element\n */\nexport function injectStyles(css, id) {\n if (typeof document === 'undefined') return null\n\n // Remove existing style element with this ID\n const existing = document.getElementById(id)\n if (existing) existing.remove()\n\n // Wrap in @layer gst-form for highest priority\n // The layer order is declared in forms.css: @layer gst, gst-theme, gst-form\n const layeredCSS = `@layer gst-form {\\n${css}\\n}`\n\n const styleEl = document.createElement('style')\n styleEl.id = id\n styleEl.textContent = layeredCSS\n document.head.appendChild(styleEl)\n\n return styleEl\n}\n\n/**\n * Remove an injected style element\n * @param {string} id - ID of the style element to remove\n */\nexport function removeStyles(id) {\n if (typeof document === 'undefined') return\n\n const styleEl = document.getElementById(id)\n if (styleEl) styleEl.remove()\n}\n\n/**\n * Inject styles using content hash for deduplication.\n * Identical CSS content shares one style element via ref counting.\n * @param {string} css - CSS string to inject\n * @returns {{ id: string, styleEl: HTMLStyleElement | null }}\n */\nexport function injectStylesOnce(css) {\n if (typeof document === 'undefined') return { id: null, styleEl: null }\n\n const hash = hashString(css)\n const id = `gst-styles-${hash}`\n\n // If element with this hash exists, increment ref count and return\n const existing = document.getElementById(id)\n if (existing) {\n const refCount = parseInt(existing.dataset.gstRefCount || '1', 10)\n existing.dataset.gstRefCount = String(refCount + 1)\n return { id, styleEl: existing }\n }\n\n // Wrap in @layer gst-form for highest priority\n const layeredCSS = `@layer gst-form {\\n${css}\\n}`\n\n const styleEl = document.createElement('style')\n styleEl.id = id\n styleEl.dataset.gstRefCount = '1'\n styleEl.textContent = layeredCSS\n document.head.appendChild(styleEl)\n\n return { id, styleEl }\n}\n\n/**\n * Remove a ref-counted style element (only removes when refCount hits 0)\n * @param {string} id - ID of the style element\n */\nexport function removeStylesOnce(id) {\n if (typeof document === 'undefined' || !id) return\n\n const styleEl = document.getElementById(id)\n if (!styleEl) return\n\n const refCount = parseInt(styleEl.dataset.gstRefCount || '1', 10)\n if (refCount <= 1) {\n styleEl.remove()\n } else {\n styleEl.dataset.gstRefCount = String(refCount - 1)\n }\n}\n\n/**\n * Process styles from any registry (components, fields, buttons, etc.)\n *\n * By default, styles are scoped to [data-gst-scope][data-{attribute}=\"name\"]\n * This allows multiple forms with different styles to coexist.\n *\n * Set `scoped: false` in the styles object for global styles (no scope prefix).\n *\n * @param {Object} registry - Registry object (components, fields, buttons, etc.)\n * @param {string} formScopeId - The form's scope ID for scoping\n * @param {string} dataAttribute - The data attribute name (e.g., 'gst-component', 'field', 'button')\n * @returns {string} Combined CSS for all items with styles\n */\nexport function processRegistryStyles(registry, formScopeId, dataAttribute) {\n if (!registry || !formScopeId || !dataAttribute) return ''\n\n const cssBlocks = []\n\n for (const [name, def] of Object.entries(registry)) {\n if (!def || typeof def !== 'object') continue\n if (!def.styles) continue\n\n const { styles } = def\n if (typeof styles !== 'object') continue\n\n // Support both flat structure (selectors at top) and form-style structure (with rules wrapper)\n // Flat: { \"&\": {...}, \"& input\": {...}, \"vars\": {...} }\n // Form-style: { \"scoped\": true, \"vars\": {...}, \"rules\": { \"&\": {...} } }\n const { scoped = true, vars, dynamicClasses: _dc, __source: _src, ...rest } = styles\n const rules = styles.rules || rest\n\n // Determine scope selector based on scoped flag\n // scoped: true (default) → [data-gst-scope=\"x\"] [data-{attr}=\"name\"] (unique per form)\n // scoped: false → .gst [data-{attr}=\"name\"] (shared across all gst forms)\n const itemScope = scoped\n ? `[data-gst-scope=\"${formScopeId}\"] [data-${dataAttribute}=\"${name}\"]`\n : `.gst [data-${dataAttribute}=\"${name}\"]`\n\n // Process vars\n if (vars && Object.keys(vars).length > 0) {\n // When scoped, vars go on the item scope; when unscoped, on :root\n const varSelector = itemScope || ':root'\n const varsCSS = varsToCSS(vars, varSelector)\n if (varsCSS) cssBlocks.push(varsCSS)\n }\n\n // Process rules - & means the item root (or nothing if unscoped)\n if (rules && Object.keys(rules).length > 0) {\n const rulesCSS = rulesToCSS(rules, itemScope)\n if (rulesCSS) cssBlocks.push(rulesCSS)\n }\n }\n\n return cssBlocks.join('\\n\\n')\n}\n\n/**\n * Process component-level styles (convenience wrapper)\n * @param {Object} components - Components registry object\n * @param {string} formScopeId - The form's scope ID for scoping\n * @returns {string} Combined CSS for all components with styles\n */\nexport function processComponentStyles(components, formScopeId) {\n return processRegistryStyles(components, formScopeId, 'gst-component')\n}\n\n/**\n * Process field-level styles\n * @param {Object} fields - Fields registry object\n * @param {string} formScopeId - The form's scope ID for scoping\n * @returns {string} Combined CSS for all fields with styles\n */\nexport function processFieldStyles(fields, formScopeId) {\n return processRegistryStyles(fields, formScopeId, 'field')\n}\n\n/**\n * Process button-level styles\n * @param {Object} buttons - Buttons registry object\n * @param {string} formScopeId - The form's scope ID for scoping\n * @returns {string} Combined CSS for all buttons with styles\n */\nexport function processButtonStyles(buttons, formScopeId) {\n return processRegistryStyles(buttons, formScopeId, 'button')\n}\n","/**\n * Mount a config-driven UI into a DOM container\n *\n * Generic entry point for the gst-core rendering engine. Creates a\n * reactive store from config and renders the element tree. Domain-specific\n * behavior (forms, pages, dashboards) is injected via options.\n *\n * @param {HTMLElement} container - DOM element to render into\n * @param {Object} config - Config from loadJsonConfig() or LiveConfig.get()\n * @param {Object} [options] - Mount options\n * @param {Object} [options.record] - Initial record (default: { key: null, data: {} })\n * @param {Object} [options.components] - Component renderers (from stdlib or user-provided)\n * @param {Function} [options.onAction] - Generic action callback\n * @param {Function} [options.onChange] - Called when record changes\n * @param {Object} [options.initialState] - Additional reactive state merged into store\n * @param {Function[]} [options.effects] - Reactive effects to set up after rendering\n * @param {Function} [options.setupActions] - (store, options) => void, sets up store.executeAction\n * @param {Function} [options.onMount] - Called after rendering, receives (store, controller)\n * @param {Function} [options.onUnmount] - Called before cleanup, receives (store)\n * @param {Function} [options.onHide] - Called when an element becomes hidden: (def, store) => void\n *\n * @returns {Object} Controller: update(record), executeAction(name, extra), checkGuards(), unmount(), store\n */\n\nimport { reactive, effect, stop } from \"../reactivity.js\"\nimport { logger, initLogger } from \"../utils/logger.js\"\nimport { renderElement } from \"./FormElement.js\"\nimport {\n processStyles,\n generateScopeId,\n injectStyles,\n removeStyles,\n processRegistryStyles,\n} from \"../utils/styleProcessor.js\"\nimport { trace, isDebugActive, traceGroup } from \"../utils/gstDebug.js\"\nimport { getFieldValue, setFieldValue } from \"../utils/dotPath.js\"\n\nconst DEFAULT_RECORD = { key: null, data: {} }\n\nexport function mount(container, config, options = {}) {\n const {\n record = { ...DEFAULT_RECORD },\n components = {},\n onAction,\n onChange,\n onMapChange,\n initialState = {},\n effects: customEffects = [],\n setupActions,\n onMount,\n onUnmount,\n onHide,\n } = options\n\n const scopeId = generateScopeId()\n\n // Initialize logger from meta (enables debug/strict modes).\n // This also initializes the structured debug tracing system.\n initLogger(config.meta)\n\n // Create the reactive store -- the single source of truth\n const store = reactive({\n // Static config\n meta: config.meta || {},\n registries: config.registries || {},\n actions: config.actions || {},\n\n // Component renderers\n components,\n\n // Dynamic state\n record: record,\n state: config.state || {},\n\n // Callbacks\n callbacks: { onAction, onChange, onMapChange },\n\n // Domain-specific state (forms: fieldErrors, isDirty, etc.)\n ...initialState,\n })\n\n // Guard registry -- any mounted element can register a function that\n // blocks transitions (navigation, tab switch, etc.). Guards return\n // true to allow, or a string (rejection message) / false to block.\n const guards = []\n store.addGuard = (fn) => {\n guards.push(fn)\n return () => {\n const i = guards.indexOf(fn)\n if (i !== -1) guards.splice(i, 1)\n }\n }\n store.removeGuard = (fn) => {\n const i = guards.indexOf(fn)\n if (i !== -1) guards.splice(i, 1)\n }\n store._guards = guards\n\n // Value helpers that respect bind/path on field defs\n store._getFieldValue = (name) => {\n const def = store.registries?.fields?.[name]\n return getFieldValue(store, name, def)\n }\n store._setFieldValue = (name, value) => {\n const def = store.registries?.fields?.[name]\n setFieldValue(store, name, def, value)\n }\n\n // Pass internal state to the store so the renderer and components can access it\n store._scopeId = scopeId\n if (onHide) store._onHide = onHide\n\n // Let the caller set up action execution on the store\n if (setupActions) {\n setupActions(store, options)\n } else if (onAction) {\n // Minimal default: just forward to onAction\n store.executeAction = async (actionName, extra = {}) => {\n await onAction({\n action: actionName,\n record: store.record,\n meta: store.meta,\n registries: store.registries,\n ...extra,\n })\n }\n }\n\n // ============================================================================\n // DOM setup and rendering\n // ============================================================================\n\n container.setAttribute(\"data-gst-scope\", scopeId)\n if (!container.classList.contains(\"gst\")) {\n container.classList.add(\"gst\")\n }\n\n // Accessibility: mark container as a form landmark if it has a title\n container.setAttribute(\"role\", \"form\")\n const formTitle = config.meta?.title\n if (formTitle) container.setAttribute(\"aria-label\", formTitle)\n\n // Inject styles\n let styleId = null\n if (config.styles) {\n const css = processStyles(config.styles, scopeId)\n if (css) {\n styleId = `gst-styles-${scopeId}`\n injectStyles(css, styleId)\n }\n }\n\n // Inject registry-level styles\n let registryStyleId = null\n const registryCss = [\n processRegistryStyles(\n config.registries?.components || {},\n scopeId,\n \"gst-component\",\n ),\n processRegistryStyles(config.registries?.fields || {}, scopeId, \"field\"),\n processRegistryStyles(config.registries?.buttons || {}, scopeId, \"button\"),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\")\n\n if (registryCss) {\n registryStyleId = `gst-registry-styles-${scopeId}`\n injectStyles(registryCss, registryStyleId)\n }\n\n // Render the layout\n const cleanup = []\n const layout = config.layout || []\n\n if (isDebugActive()) {\n trace('mount', 'mount-begin', `${layout.length} layout items`, {\n title: config.meta?.title,\n fieldCount: Object.keys(config.registries?.fields || {}).length,\n componentCount: Object.keys(config.registries?.components || {}).length,\n functionCount: Object.keys(config.registries?.functions || {}).length,\n hasStyles: !!config.styles,\n debugLevel: config.meta?.debug\n })\n }\n\n for (const item of layout) {\n // Bare arrays are sugar for { rows: [row] }\n const def = Array.isArray(item) ? { rows: [item] } : item\n renderElement(container, def, store, cleanup)\n }\n\n // Set up custom effects (dirty tracking, error tracking, etc.)\n const effectRunners = customEffects.map(fn => fn(store, options))\n\n // Build the controller\n const controller = {\n update(newRecord) {\n store.record.key = newRecord.key ?? null\n const newData = newRecord.data || {}\n const currentData = store.record.data\n\n for (const key of Object.keys(currentData)) {\n if (!(key in newData)) delete currentData[key]\n }\n for (const [key, value] of Object.entries(newData)) {\n currentData[key] = value\n }\n },\n\n async executeAction(actionName, extra = {}) {\n if (store.executeAction) {\n return store.executeAction(actionName, extra)\n }\n },\n\n checkGuards() {\n for (const guard of guards) {\n const result = guard()\n if (result === false || typeof result === 'string') return result\n }\n return true\n },\n\n unmount() {\n if (onUnmount) onUnmount(store)\n guards.length = 0\n for (const fn of cleanup) fn()\n for (const runner of effectRunners) {\n if (runner) stop(runner)\n }\n if (styleId) removeStyles(styleId)\n if (registryStyleId) removeStyles(registryStyleId)\n container.innerHTML = \"\"\n container.removeAttribute(\"data-gst-scope\")\n container.removeAttribute(\"role\")\n container.removeAttribute(\"aria-label\")\n container.classList.remove(\"gst\")\n },\n\n store,\n }\n\n // Notify caller that mount is complete\n if (onMount) onMount(store, controller)\n\n return controller\n}\n"],"names":["makeMap","str","map","key","val","extend","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isFunction","isString","isSymbol","isObject","objectToString","value","toRawType","isIntegerKey","cacheStringFunction","fn","cache","capitalize","hasChanged","oldValue","warn","msg","args","activeSub","pausedQueueEffects","ReactiveEffect","batch","cleanupEffect","prepareDeps","prevEffect","prevShouldTrack","shouldTrack","cleanupDeps","link","removeSub","isDirty","batchDepth","batchedSub","batchedComputed","sub","isComputed","startBatch","endBatch","e","next","error","err","head","tail","prev","removeDep","refreshComputed","computed","globalVersion","dep","prevSub","soft","nextSub","l","prevDep","nextDep","effect","options","runner","stop","trackStack","pauseTracking","enableTracking","resetTracking","last","cleanup","Link","Dep","debugInfo","addSub","currentTail","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ARRAY_ITERATE_KEY","track","target","type","depsMap","trigger","newValue","oldTarget","run","targetIsArray","isArrayIndex","newLength","key2","reactiveReadArray","array","raw","toRaw","isShallow","toReactive","shallowReadArray","arr","toWrapped","item","isReadonly","toReadonly","isReactive","arrayInstrumentations","iterator","x","thisArg","apply","v","searchProxy","separator","noTracking","reduce","comparer","self","method","wrapValue","iter","result","arrayProto","wrappedRetFn","needsWrap","methodFn","result2","wrappedFn","index","wrapInitialAccumulator","acc","res","isProxy","isNonTrackableKeys","builtInSymbols","obj","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","isRef","readonly","reactive","MutableReactiveHandler","isArrayWithIntegerKey","isOldValueReadonly","hadKey","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","toShallow","getProto","createIterableMethod","rawTarget","targetIsMap","isPair","isKeyOnly","innerIterator","wrap","done","createReadonlyMethod","createInstrumentations","shallow","instrumentations","rawKey","has","callback","observed","proto","rawValue","valueToAdd","get","checkIdentityKeys","hadItems","createInstrumentationGetter","mutableCollectionHandlers","readonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","createReactiveObject","baseHandlers","collectionHandlers","proxyMap","targetType","existingProxy","proxy","r","ref","createRef","RefImpl","useDirectValue","ComputedRefImpl","setter","isSSR","getterOrOptions","debugOptions","getter","cRef","isInRenderPhase","renderPhaseWarned","enterRenderPhase","exitRenderPhase","createStage","def","contextGetter","path","domRef","logger","name","getContext","initialContext","capturedInitialValue","_a","baseContext","_b","element","ctx","errors","_c","data","normalizeKey","lower","_","c","normalizeDef","out","HTML_EVENTS","isEventKey","missingReference","context","available","parts","parseDotNotation","validRegistries","dotIndex","registryName","resolveSpread","registry","itemName","allRegistries","fallbackRegistry","_visited","dotRef","baseDef","lookupRegistry","lookupKey","availableKeys","isDebugActive","trace","isDebugEnabled","logRegistry","baseRef","overrides","targetRegistry","targetRegistryName","refKey","newVisited","overrideCount","resolvedBase","bindFunctions","functions","optionSets","bound","optionKey","optionData","isEventHandler","transformProps","prop","fnName","event","stage","boundFields","fieldDef","DANGEROUS_KEYS","resolveRecordData","recordData","resolved","getByPath","root","p","setByPath","i","getFieldValue","store","setFieldValue","getRecordPath","clearFieldValue","buildContext","buildFormAPI","_e","_d","mapName","cb","BLOCKED_ELEMENTS","isHtmlElement","component","resolveComponentDef","componentName","componentsRegistry","componentDef","getComponentAdapter","resolveProp","propName","propValue","colonIdx","funcName","arg","func","resolveEventHandlers","resolveVisibility","resolveItem","localFields","fieldsRegistry","parentName","isLocal","renderHtmlElement","container","mergedDef","isChild","contentElements","el","cls","id","style","title","href","src","alt","forAttr","placeholder","isRequired","autocomp","selectAutocomp","isDisabled","handler","actions","action","eventName","child","hasDynamicInnerText","hasDynamicLabel","textRunner","text","optionSetName","opt","optEl","renderGroup","children","div","baseClassName","hasRows","groupTitle","groupDescription","className","header","titleId","h3","span","groupButtonSet","buttonsDiv","buttonsRegistry","btnRef","btnDef","renderElement","isLeafField","source","resolvedComponentDef","anchor","currentEl","childCleanup","visibilityRunner","tempContainer","rendered","renderVisibleElement","normalizedRows","row","rowDiv","childContainer","hasContent","isContainer","adapter","resolvedDef","fieldDiv","typeClass","componentClass","resolvedClassName","mounted","computedEffect","wrapperDiv","builtinRender","resolvedDef2","content","isGroup","empty","renderSlot","slotContent","items","toKebabCase","propertiesToCSS","properties","varsToCSS","vars","scopeSelector","declarations","rulesToCSS","rules","scopePrefix","cssBlocks","mediaBlocks","selector","mediaRules","scopedSelector","s","trimmed","mediaQuery","generateScopeId","processStyles","styleConfig","scopeId","scoped","varsCSS","rulesCSS","generateDynamicClasses","dynamicClasses","classes","field","config","sanitizedValue","generateFieldDynamicClass","fieldName","normalizedConfig","hashString","hash","char","injectStyles","css","existing","layeredCSS","styleEl","removeStyles","injectStylesOnce","refCount","removeStylesOnce","processRegistryStyles","formScopeId","dataAttribute","styles","_dc","_src","rest","itemScope","processComponentStyles","components","processFieldStyles","fields","processButtonStyles","buttons","DEFAULT_RECORD","mount","record","onAction","onChange","onMapChange","initialState","customEffects","setupActions","onMount","onUnmount","onHide","initLogger","guards","actionName","extra","formTitle","styleId","registryStyleId","registryCss","layout","_f","_g","_h","_i","effectRunners","controller","newRecord","newData","currentData","guard"],"mappings":"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","x_google_ignoreList":[0,1]}