{"version":3,"file":"ImageUploadControl.DIrJLCYc.mjs","names":["useState","useRef","useState","useRef","useMemo","useCallback"],"sources":["https:/framerusercontent.com/modules/fBY7K5QM2pcfPmulIEIE/3i69Aw20ukDiSnYJtxST/ConditionalLogicUtil.js","https:/framer.com/m/ConditionalLogicUtil-69lIOW.js","https:/framerusercontent.com/modules/RtD2yqkFsw49KYymvv5t/tuvDwO7JGwkPajsmHfr9/ImageUploadControl.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{ControlType}from\"framer\";import{useCallback,useEffect,useRef,useState,forwardRef}from\"react\";export const DEFAULT_CONDITION_ITEM={type:\"visibility\",logic:\"and\",sourceField:\"\",fieldType:\"text\",operator:\"is_not_empty\",numberOperator:\"is_not_empty\",dateOperator:\"is_not_empty\",value:\"\",value2:\"\",numberValue:\"\",numberValue2:\"\",dateValue:\"\",dateValue2:\"\"};/** Resolves the active operator from a ConditionItem based on its fieldType */export function resolveOperator(item){switch(item.fieldType){case\"number\":return item.numberOperator||\"is_not_empty\";case\"date\":return item.dateOperator||\"is_not_empty\";default:return item.operator||\"is_not_empty\";}}/** Resolves value/value2 from the correct field based on fieldType */export function resolveValues(item){switch(item.fieldType){case\"number\":return{value:item.numberValue||item.value||\"\",value2:item.numberValue2||item.value2||\"\"};case\"date\":return{value:item.dateValue||item.value||\"\",value2:item.dateValue2||item.value2||\"\"};default:return{value:item.value||\"\",value2:item.value2||\"\"};}}// ============================================================================\n// DEFAULTS\n// ============================================================================\nexport const DEFAULT_CONDITION={enabled:false,sourceField:\"\",fieldType:\"text\",operator:\"is_not_empty\",value:\"\",value2:\"\",logic:\"and\",enableRule2:false,sourceFieldR2:\"\",fieldTypeR2:\"text\",operatorR2:\"is_not_empty\",valueR2:\"\",value2R2:\"\"};// ============================================================================\n// OPERATOR OPTIONS BY FIELD TYPE\n// ============================================================================\nexport const OPERATOR_OPTIONS={all:[{value:\"is_empty\",label:\"Is Empty\"},{value:\"is_not_empty\",label:\"Is Not Empty\"}],text:[{value:\"contains\",label:\"Contains\"},{value:\"not_contains\",label:\"Not Contains\"},{value:\"exact_match\",label:\"Exact Match (Case Sensitive)\"},{value:\"match\",label:\"Match (Case Insensitive)\"},{value:\"starts_with\",label:\"Starts With\"},{value:\"ends_with\",label:\"Ends With\"},{value:\"length_greater_than\",label:\"Length Greater Than\"},{value:\"length_less_than\",label:\"Length Less Than\"},{value:\"regex\",label:\"Regex\"}],number:[{value:\"equals\",label:\"Equals\"},{value:\"not_equals\",label:\"Not Equals\"},{value:\"greater_than\",label:\"Greater Than\"},{value:\"less_than\",label:\"Less Than\"},{value:\"greater_than_equals\",label:\"Greater Than or Equals\"},{value:\"less_than_equals\",label:\"Less Than or Equals\"},{value:\"between\",label:\"Between\"},{value:\"not_between\",label:\"Not Between\"}],date:[{value:\"equals\",label:\"Equals\"},{value:\"not_equals\",label:\"Not Equals\"},{value:\"before\",label:\"Before\"},{value:\"after\",label:\"After\"},{value:\"between\",label:\"Between\"},{value:\"not_between\",label:\"Not Between\"}]};// Build flat lists for property controls\nconst ALL_OPERATOR_VALUES=[...OPERATOR_OPTIONS.all,...OPERATOR_OPTIONS.text,...OPERATOR_OPTIONS.number,...OPERATOR_OPTIONS.date].reduce((acc,op)=>{if(!acc.find(o=>o.value===op.value))acc.push(op);return acc;},[]);export const ALL_OPERATOR_IDS=ALL_OPERATOR_VALUES.map(o=>o.value);export const ALL_OPERATOR_LABELS=ALL_OPERATOR_VALUES.map(o=>o.label);// Per-type operator lists (including \"all\" operators)\nconst TEXT_OPERATOR_LIST=[...OPERATOR_OPTIONS.all,...OPERATOR_OPTIONS.text];const NUMBER_OPERATOR_LIST=[...OPERATOR_OPTIONS.all,...OPERATOR_OPTIONS.number];const DATE_OPERATOR_LIST=[...OPERATOR_OPTIONS.all,...OPERATOR_OPTIONS.date];export const TEXT_OPERATOR_IDS=TEXT_OPERATOR_LIST.map(o=>o.value);export const TEXT_OPERATOR_LABELS=TEXT_OPERATOR_LIST.map(o=>o.label);export const NUMBER_OPERATOR_IDS=NUMBER_OPERATOR_LIST.map(o=>o.value);export const NUMBER_OPERATOR_LABELS=NUMBER_OPERATOR_LIST.map(o=>o.label);export const DATE_OPERATOR_IDS=DATE_OPERATOR_LIST.map(o=>o.value);export const DATE_OPERATOR_LABELS=DATE_OPERATOR_LIST.map(o=>o.label);// Sets for fast lookup per field type (including \"all\" operators)\nconst TEXT_OPS=new Set([...OPERATOR_OPTIONS.all,...OPERATOR_OPTIONS.text].map(o=>o.value));const NUMBER_OPS=new Set([...OPERATOR_OPTIONS.all,...OPERATOR_OPTIONS.number].map(o=>o.value));const DATE_OPS=new Set([...OPERATOR_OPTIONS.all,...OPERATOR_OPTIONS.date].map(o=>o.value));export function isOperatorValidForType(operator,fieldType){switch(fieldType){case\"number\":return NUMBER_OPS.has(operator);case\"date\":return DATE_OPS.has(operator);default:return TEXT_OPS.has(operator);}}// Operators that need no value input\nexport const NO_VALUE_OPS=new Set([\"is_empty\",\"is_not_empty\"]);// Operators that need a second value input (between / not_between)\nexport const RANGE_OPS=new Set([\"between\",\"not_between\"]);// Operators that need a special value input (length or regex pattern)\nexport const SPECIAL_VALUE_OPS=new Set([\"length_greater_than\",\"length_less_than\",\"regex\"]);// ============================================================================\n// FIELD VALUE READER\n// ============================================================================\n/**\n * Reads the comparable string value from a form element.\n * Checkboxes need special handling: a native checkbox's `.value` is always \"on\"\n * regardless of checked state, so condition operators (is_empty / is_not_empty /\n * equals) can't tell checked from unchecked. We normalize:\n *   - unchecked checkbox → \"\" (so is_empty is true)\n *   - checked checkbox → its explicit value attr, or \"true\" if none was set\n * Radios use the same rule per element so the currently-checked radio in a\n * group provides the value.\n */function readFieldValue(el){if(el instanceof HTMLInputElement&&(el.type===\"checkbox\"||el.type===\"radio\")){if(!el.checked)return\"\";return el.value&&el.value!==\"on\"?el.value:\"true\";}return el.value;}// ============================================================================\n// DATE PARSER\n// ============================================================================\n/**\n * Parses a date string into a comparable timestamp.\n * Supports YYYY-MM-DD (from HTML date inputs) and other Date-parsable formats.\n * Uses UTC noon to avoid timezone/DST edge cases with YYYY-MM-DD.\n */function parseDate(s){if(!s)return NaN;// YYYY-MM-DD format — parse as UTC noon to avoid off-by-one timezone issues\nconst isoMatch=s.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);if(isoMatch){return Date.UTC(Number(isoMatch[1]),Number(isoMatch[2])-1,Number(isoMatch[3]),12);}return new Date(s).getTime();}// ============================================================================\n// CONDITION EVALUATOR\n// ============================================================================\nexport function evaluateCondition(fieldValue,config){// If operator is invalid for the selected fieldType, pass through\nif(!isOperatorValidForType(config.operator,config.fieldType))return true;const v=fieldValue||\"\";const target=config.value||\"\";const target2=config.value2||\"\";switch(config.operator){// All types\ncase\"is_empty\":return v.trim()===\"\";case\"is_not_empty\":return v.trim()!==\"\";// Text operators\ncase\"contains\":return v.toLowerCase().includes(target.toLowerCase());case\"not_contains\":return!v.toLowerCase().includes(target.toLowerCase());case\"exact_match\":return v===target;case\"match\":return v.toLowerCase()===target.toLowerCase();case\"starts_with\":return v.toLowerCase().startsWith(target.toLowerCase());case\"ends_with\":return v.toLowerCase().endsWith(target.toLowerCase());case\"length_greater_than\":return v.length>(parseInt(target,10)||0);case\"length_less_than\":return v.length<(parseInt(target,10)||0);case\"regex\":try{return new RegExp(target).test(v);}catch{return false;}// Number operators\ncase\"equals\":{if(config.fieldType===\"date\")return parseDate(v)===parseDate(target);return parseFloat(v)===parseFloat(target);}case\"not_equals\":{if(config.fieldType===\"date\")return parseDate(v)!==parseDate(target);return parseFloat(v)!==parseFloat(target);}case\"greater_than\":return parseFloat(v)>parseFloat(target);case\"less_than\":return parseFloat(v)<parseFloat(target);case\"greater_than_equals\":return parseFloat(v)>=parseFloat(target);case\"less_than_equals\":return parseFloat(v)<=parseFloat(target);case\"between\":{if(config.fieldType===\"date\"){const d=parseDate(v);return d>=parseDate(target)&&d<=parseDate(target2);}const num=parseFloat(v);return num>=parseFloat(target)&&num<=parseFloat(target2);}case\"not_between\":{if(config.fieldType===\"date\"){const d=parseDate(v);return d<parseDate(target)||d>parseDate(target2);}const num=parseFloat(v);return num<parseFloat(target)||num>parseFloat(target2);}// Date operators\ncase\"before\":return parseDate(v)<parseDate(target);case\"after\":return parseDate(v)>parseDate(target);default:return true;}}// ============================================================================\n// CONDITION EFFECT HOOK\n// ============================================================================\n/**\n * Hook that manages all 5 condition types (visibility, required, readOnly, disable, valueReset).\n * Watches source fields in the DOM, evaluates conditions, and returns reactive state.\n *\n * @param configs - Object containing all condition configs\n * @param fallbackSourceField - Fallback source field name if condition's own sourceField is empty\n * @param isCanvas - Whether rendering on Framer canvas (disables watchers)\n * @param onValueReset - Callback fired when valueReset condition transitions to true\n */export function useConditionalLogic(configs,fallbackSourceField,isCanvas,onValueReset){const[isVisible,setIsVisible]=useState(!configs.visibility.enabled);const[isRequired,setIsRequired]=useState(false);const[isReadOnly,setIsReadOnly]=useState(false);const[isDisabled,setIsDisabled]=useState(false);// Shared compound condition watcher logic\nconst conditionEffect=useCallback((config,defaultState,onResult)=>{if(!config.enabled){onResult(defaultState);return undefined;}if(isCanvas){onResult(defaultState);return undefined;}const cleanups=[];let result1=false;let result2=false;const hasRule2=Boolean(config.enableRule2);const combine=()=>{if(!hasRule2){onResult(result1);}else if(config.logic===\"or\"){onResult(result1||result2);}else{onResult(result1&&result2);}};const rule2Config={...config,sourceField:config.sourceFieldR2,fieldType:config.fieldTypeR2,operator:config.operatorR2,value:config.valueR2,value2:config.value2R2};const getSelector=name=>`input[name=\"${name}\"], select[name=\"${name}\"], textarea[name=\"${name}\"]`;const watchSource=(sourceName,ruleConfig,setResult)=>{const resolved=sourceName||fallbackSourceField||\"\";if(!resolved)return;const selector=getSelector(resolved);let currentEl=null;let currentCleanup=null;const attachListener=sourceEl=>{if(currentEl===sourceEl)return;if(currentCleanup)currentCleanup();currentEl=sourceEl;const check=()=>{setResult(evaluateCondition(readFieldValue(sourceEl),ruleConfig));combine();};check();sourceEl.addEventListener(\"input\",check);sourceEl.addEventListener(\"change\",check);currentCleanup=()=>{sourceEl.removeEventListener(\"input\",check);sourceEl.removeEventListener(\"change\",check);};};const existing=document.querySelector(selector);if(existing){attachListener(existing);}// Keep watching so we re-attach when a source field is\n// removed (hidden) and later re-added (shown) in the DOM.\nconst observer=new MutationObserver(()=>{const el=document.querySelector(selector);if(el&&el!==currentEl){attachListener(el);}else if(!el&&currentEl){if(currentCleanup)currentCleanup();currentEl=null;currentCleanup=null;}});observer.observe(document.body,{childList:true,subtree:true});cleanups.push(()=>{observer.disconnect();if(currentCleanup)currentCleanup();});};watchSource(config.sourceField,config,r=>{result1=r;});if(hasRule2){watchSource(config.sourceFieldR2,rule2Config,r=>{result2=r;});}return()=>cleanups.forEach(fn=>fn());},[isCanvas,fallbackSourceField]);// Shared deps builder\nconst conditionDeps=cfg=>[cfg.enabled,cfg.sourceField,cfg.fieldType,cfg.operator,cfg.value,cfg.value2,cfg.logic,cfg.enableRule2,cfg.sourceFieldR2,cfg.fieldTypeR2,cfg.operatorR2,cfg.valueR2,cfg.value2R2];// Visibility\nuseEffect(()=>{return conditionEffect(configs.visibility,true,setIsVisible);// eslint-disable-next-line react-hooks/exhaustive-deps\n},[conditionEffect,...conditionDeps(configs.visibility)]);// Required\nuseEffect(()=>{return conditionEffect(configs.requiredCondition,false,setIsRequired);// eslint-disable-next-line react-hooks/exhaustive-deps\n},[conditionEffect,...conditionDeps(configs.requiredCondition)]);// Read-only\nuseEffect(()=>{return conditionEffect(configs.readOnlyCondition,false,setIsReadOnly);// eslint-disable-next-line react-hooks/exhaustive-deps\n},[conditionEffect,...conditionDeps(configs.readOnlyCondition)]);// Disable\nuseEffect(()=>{return conditionEffect(configs.disableCondition,false,setIsDisabled);// eslint-disable-next-line react-hooks/exhaustive-deps\n},[conditionEffect,...conditionDeps(configs.disableCondition)]);// Value reset — fires callback when condition transitions to true\nconst valueResetPrevRef=useRef(false);useEffect(()=>{return conditionEffect(configs.valueResetCondition,false,result=>{if(result&&!valueResetPrevRef.current){onValueReset?.();}valueResetPrevRef.current=result;});// eslint-disable-next-line react-hooks/exhaustive-deps\n},[conditionEffect,...conditionDeps(configs.valueResetCondition),onValueReset]);return{isVisible,isRequired,isReadOnly,isDisabled};}// ============================================================================\n// PROPERTY CONTROLS HELPER\n// ============================================================================\n/**\n * Generates a Framer property control object for a single condition section.\n * Spread into `addPropertyControls`: `...conditionControl(\"visibility\", \"Visibility\", \"...\")`\n */export function conditionControl(propKey,title,enableDesc){return{[propKey]:{type:ControlType.Object,title,controls:{enabled:{type:ControlType.Boolean,title:\"Enable\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\",description:enableDesc},sourceField:{type:ControlType.String,title:\"Source Field\",defaultValue:\"\",description:\"Field name to watch (e.g. 'Email'). Falls back to the top-level Source Field if empty.\",hidden(props){return!props.enabled;}},fieldType:{type:ControlType.Enum,title:\"Field Type\",defaultValue:\"text\",options:[\"text\",\"number\",\"date\"],optionTitles:[\"Text\",\"Number\",\"Date\"],description:\"Type of the source field. Determines which operators are valid.\",hidden(props){return!props.enabled;}},operator:{type:ControlType.Enum,title:\"Operator\",defaultValue:\"is_not_empty\",options:ALL_OPERATOR_IDS,optionTitles:ALL_OPERATOR_LABELS,description:\"Pick an operator that matches the Field Type. Invalid combos are ignored at runtime.\",hidden(props){return!props.enabled;}},value:{type:ControlType.String,title:\"Value\",defaultValue:\"\",description:\"Compare value. For length operators enter a number. For regex enter a pattern.\",hidden(props){return!props.enabled||NO_VALUE_OPS.has(props.operator);}},value2:{type:ControlType.String,title:\"Value 2 (Max)\",defaultValue:\"\",description:\"Second value for Between / Not Between operators.\",hidden(props){return!props.enabled||!RANGE_OPS.has(props.operator);}},// ── Compound rule ──\nenableRule2:{type:ControlType.Boolean,title:\"Add Rule 2\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Add a second condition rule combined with AND / OR logic.\",hidden(props){return!props.enabled;}},logic:{type:ControlType.Enum,title:\"Logic\",defaultValue:\"and\",options:[\"and\",\"or\"],optionTitles:[\"AND\",\"OR\"],displaySegmentedControl:true,description:\"How to combine Rule 1 and Rule 2.\",hidden(props){return!props.enabled||!props.enableRule2;}},sourceFieldR2:{type:ControlType.String,title:\"Source Field (R2)\",defaultValue:\"\",description:\"Source field for Rule 2. Falls back to the top-level Source Field if empty.\",hidden(props){return!props.enabled||!props.enableRule2;}},fieldTypeR2:{type:ControlType.Enum,title:\"Field Type (R2)\",defaultValue:\"text\",options:[\"text\",\"number\",\"date\"],optionTitles:[\"Text\",\"Number\",\"Date\"],hidden(props){return!props.enabled||!props.enableRule2;}},operatorR2:{type:ControlType.Enum,title:\"Operator (R2)\",defaultValue:\"is_not_empty\",options:ALL_OPERATOR_IDS,optionTitles:ALL_OPERATOR_LABELS,description:\"Operator for Rule 2. Pick one that matches the Rule 2 Field Type.\",hidden(props){return!props.enabled||!props.enableRule2;}},valueR2:{type:ControlType.String,title:\"Value (R2)\",defaultValue:\"\",description:\"Compare value for Rule 2. For length operators enter a number. For regex enter a pattern.\",hidden(props){return!props.enabled||!props.enableRule2||NO_VALUE_OPS.has(props.operatorR2);}},value2R2:{type:ControlType.String,title:\"Value 2 (R2 Max)\",defaultValue:\"\",description:\"Second value for Rule 2 Between / Not Between.\",hidden(props){return!props.enabled||!props.enableRule2||!RANGE_OPS.has(props.operatorR2);}}}}};}// ============================================================================\n// STANDARD CONDITION PROPERTY CONTROLS (pre-built for common usage)\n// ============================================================================\nexport const CONDITION_CONTROLS={...conditionControl(\"visibility\",\"Visibility\",\"Show or hide this field based on another field's value.\"),...conditionControl(\"requiredCondition\",\"Required\",\"Make this field required based on another field's value. Overrides the static Required toggle.\"),...conditionControl(\"readOnlyCondition\",\"Read-Only\",\"Make this field read-only based on another field's value.\"),...conditionControl(\"disableCondition\",\"Disable\",\"Disable this field based on another field's value. Disabled fields are greyed out and excluded from form submission.\"),...conditionControl(\"valueResetCondition\",\"Value Reset\",\"Clear this field's value when the condition on another field becomes true.\")};/**\n * Source field property control — add before CONDITION_CONTROLS in addPropertyControls.\n */export const SOURCE_FIELD_CONTROL={sourceField:{type:ControlType.String,title:\"Source Field\",defaultValue:\"\",description:\"Field name to read value from (e.g. 'Email'). Used as the default source for all conditions below.\"}};// ============================================================================\n// ARRAY-BASED CONDITION SYSTEM\n// ============================================================================\n/**\n * Hook that evaluates a dynamic array of ConditionItem[].\n * Groups conditions by type, combines per-type with AND/OR logic,\n * and returns reactive ConditionState.\n */export function useConditionArray(conditions,fallbackSourceField,isCanvas,onValueReset){const[state,setState]=useState({isVisible:true,isRequired:false,isReadOnly:false,isDisabled:false});const valueResetPrevRef=useRef(false);const onValueResetRef=useRef(onValueReset);onValueResetRef.current=onValueReset;// Serialize conditions for stable effect dependency\nconst conditionsKey=JSON.stringify(conditions);useEffect(()=>{if(!conditions?.length||isCanvas){setState({isVisible:true,isRequired:false,isReadOnly:false,isDisabled:false});valueResetPrevRef.current=false;return;}const fieldValues=new Map;const cleanups=[];// Collect all unique source field names\nconst sourceFields=new Set(conditions.map(c=>c.sourceField||fallbackSourceField||\"\").filter(Boolean));const evaluate=()=>{// Accumulate per-type results\nconst results={visibility:null,required:null,readOnly:null,disable:null,valueReset:null};for(const condition of conditions){const resolved=condition.sourceField||fallbackSourceField||\"\";const fieldValue=fieldValues.get(resolved)||\"\";const activeOperator=resolveOperator(condition);const resolvedVals=resolveValues(condition);const result=evaluateCondition(fieldValue,{fieldType:condition.fieldType||\"text\",operator:activeOperator,value:resolvedVals.value,value2:resolvedVals.value2});const t=condition.type;if(results[t]===null){results[t]=result;}else if(condition.logic===\"or\"){results[t]=results[t]||result;}else{results[t]=results[t]&&result;}}setState({isVisible:results.visibility===null?true:results.visibility,isRequired:results.required===null?false:results.required,isReadOnly:results.readOnly===null?false:results.readOnly,isDisabled:results.disable===null?false:results.disable});// Value reset — edge-triggered\nconst vr=results.valueReset===null?false:results.valueReset;if(vr&&!valueResetPrevRef.current){onValueResetRef.current?.();}valueResetPrevRef.current=vr;};// Watch each unique source field in the DOM\nfor(const fieldName of sourceFields){const selector=`input[name=\"${fieldName}\"], select[name=\"${fieldName}\"], textarea[name=\"${fieldName}\"]`;let currentEl=null;let currentCleanup=null;const attachListener=sourceEl=>{if(currentEl===sourceEl)return;if(currentCleanup)currentCleanup();currentEl=sourceEl;const check=()=>{fieldValues.set(fieldName,readFieldValue(sourceEl));evaluate();};fieldValues.set(fieldName,readFieldValue(sourceEl));sourceEl.addEventListener(\"input\",check);sourceEl.addEventListener(\"change\",check);currentCleanup=()=>{sourceEl.removeEventListener(\"input\",check);sourceEl.removeEventListener(\"change\",check);};};const existing=document.querySelector(selector);if(existing){attachListener(existing);}// Keep watching so we re-attach when a source field is\n// removed (hidden) and later re-added (shown) in the DOM.\nconst observer=new MutationObserver(()=>{const el=document.querySelector(selector);if(el&&el!==currentEl){attachListener(el);evaluate();}else if(!el&&currentEl){if(currentCleanup)currentCleanup();currentEl=null;currentCleanup=null;}});observer.observe(document.body,{childList:true,subtree:true});cleanups.push(()=>{observer.disconnect();if(currentCleanup)currentCleanup();});}// Initial evaluation after all watchers attached\nevaluate();return()=>cleanups.forEach(fn=>fn());// eslint-disable-next-line react-hooks/exhaustive-deps\n},[conditionsKey,fallbackSourceField,isCanvas]);return state;}/**\n * Framer property control for a conditions array.\n * Usage: `...CONDITION_ARRAY_CONTROL` spread into addPropertyControls.\n *//** Helper: get the active operator from array item props based on fieldType */function getActiveOp(props){if(props.fieldType===\"number\")return props.numberOperator||\"is_not_empty\";if(props.fieldType===\"date\")return props.dateOperator||\"is_not_empty\";return props.operator||\"is_not_empty\";}export const CONDITION_ARRAY_CONTROL={conditions:{type:ControlType.Array,title:\"Conditions\",description:\"Add rules to control this field based on other fields' values.\",control:{type:ControlType.Object,controls:{type:{type:ControlType.Enum,title:\"Action\",defaultValue:\"visibility\",options:[\"visibility\",\"required\",\"readOnly\",\"disable\",\"valueReset\"],optionTitles:[\"Show / Hide\",\"Required\",\"Read-Only\",\"Disable\",\"Value Reset\"]},logic:{type:ControlType.Enum,title:\"Logic\",defaultValue:\"and\",options:[\"and\",\"or\"],optionTitles:[\"AND\",\"OR\"],displaySegmentedControl:true},sourceField:{type:ControlType.String,title:\"Source Field\",defaultValue:\"\",description:\"Field name to watch (e.g. 'email', 'phone'). Must match the field's Name property.\"},fieldType:{type:ControlType.Enum,title:\"Field Type\",defaultValue:\"text\",options:[\"text\",\"number\",\"date\"],optionTitles:[\"Text\",\"Number\",\"Date\"]},operator:{type:ControlType.Enum,title:\"Operator\",defaultValue:\"is_not_empty\",options:TEXT_OPERATOR_IDS,optionTitles:TEXT_OPERATOR_LABELS,hidden(props){return props.fieldType!==\"text\";}},numberOperator:{type:ControlType.Enum,title:\"Operator\",defaultValue:\"is_not_empty\",options:NUMBER_OPERATOR_IDS,optionTitles:NUMBER_OPERATOR_LABELS,hidden(props){return props.fieldType!==\"number\";}},dateOperator:{type:ControlType.Enum,title:\"Operator\",defaultValue:\"is_not_empty\",options:DATE_OPERATOR_IDS,optionTitles:DATE_OPERATOR_LABELS,hidden(props){return props.fieldType!==\"date\";}},value:{type:ControlType.String,title:\"Value\",defaultValue:\"\",description:\"Text to compare. For length operators: a number. For regex: a pattern.\",hidden(props){return props.fieldType!==\"text\"||NO_VALUE_OPS.has(getActiveOp(props));}},numberValue:{type:ControlType.String,title:\"Value\",defaultValue:\"\",description:\"Enter a number (e.g. 42, 3.14).\",hidden(props){return props.fieldType!==\"number\"||NO_VALUE_OPS.has(getActiveOp(props));}},dateValue:{type:ControlType.String,title:\"Value\",defaultValue:\"\",description:\"Date format: YYYY-MM-DD (e.g. 2025-06-15).\",hidden(props){return props.fieldType!==\"date\"||NO_VALUE_OPS.has(getActiveOp(props));}},value2:{type:ControlType.String,title:\"Value 2 (Max)\",defaultValue:\"\",description:\"End text value for Between / Not Between.\",hidden(props){return props.fieldType!==\"text\"||!RANGE_OPS.has(getActiveOp(props));}},numberValue2:{type:ControlType.String,title:\"Value 2 (Max)\",defaultValue:\"\",description:\"End number for Between / Not Between range.\",hidden(props){return props.fieldType!==\"number\"||!RANGE_OPS.has(getActiveOp(props));}},dateValue2:{type:ControlType.String,title:\"Value 2 (Max)\",defaultValue:\"\",description:\"End date for range. Format: YYYY-MM-DD.\",hidden(props){return props.fieldType!==\"date\"||!RANGE_OPS.has(getActiveOp(props));}}}},defaultValue:[]}};// ============================================================================\n// DEFAULT EXPORT (required for Framer module upload)\n// ============================================================================\n/**\n * Placeholder component — required for Framer to register this as a module.\n * Not intended for direct canvas use. Import named exports in other components.\n */const ConditionalLogic=/*#__PURE__*/forwardRef((_,ref)=>{return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{display:\"none\"}});});ConditionalLogic.displayName=\"Conditional Logic\";export default ConditionalLogic;\nexport const __FramerMetadata__ = {\"exports\":{\"ConditionType\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEFAULT_CONDITION\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ConditionConfig\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"RANGE_OPS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NUMBER_OPERATOR_LABELS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NUMBER_OPERATOR_IDS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isOperatorValidForType\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CONDITION_CONTROLS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NO_VALUE_OPS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CONDITION_ARRAY_CONTROL\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"resolveValues\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ConditionState\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"TEXT_OPERATOR_LABELS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SOURCE_FIELD_CONTROL\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DATE_OPERATOR_IDS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"evaluateCondition\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useConditionArray\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DATE_OPERATOR_LABELS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ALL_OPERATOR_IDS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ConditionItem\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ALL_OPERATOR_LABELS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useConditionalLogic\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEFAULT_CONDITION_ITEM\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"OPERATOR_OPTIONS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"TEXT_OPERATOR_IDS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"conditionControl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"EvalConfig\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SPECIAL_VALUE_OPS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"resolveOperator\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ConditionalLogicUtil.map","/*\n * ConditionalLogicUtil\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/fBY7K5QM2pcfPmulIEIE/3i69Aw20ukDiSnYJtxST/ConditionalLogicUtil.js\"\nexport { default } from \"https://framerusercontent.com/modules/fBY7K5QM2pcfPmulIEIE/3i69Aw20ukDiSnYJtxST/ConditionalLogicUtil.js\"\n","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{AnimatePresence,motion}from\"framer-motion\";import{useCallback,useEffect,useMemo,useRef,useState}from\"react\";import{useConditionArray,CONDITION_ARRAY_CONTROL}from\"https://framer.com/m/ConditionalLogicUtil-69lIOW.js\";// ============================================================================\n// CONSTANTS\n// ============================================================================\nconst API_UPLOAD_ENDPOINT=\"https://api.framergeeks.com/upload/api/v1/common/upload\";const SUPPORTED_IMAGE_FORMATS=\"image/*\";// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\nconst DEFAULT_VALIDATION={requiredMessage:\"\",maxSizeMessage:\"\"};const DEFAULT_UPLOAD={maxSizeMB:25,uploadingText:\"Uploading [FileName]...\",showSpinner:true,allowMultiple:false,maxFiles:5,provider:\"framergeeks\",gdriveWebAppUrl:\"\",gdriveLinkType:\"download\",gdriveCustomizeFolder:false,formName:\"\",gdriveDateFolder:\"none\",gdriveFolderFields:[],gdriveFieldsJoiner:\"space\",gdriveFieldsJoinerCustom:\"\"};const DEFAULT_LABEL={show:true,requiredMark:\"*\",font:{fontSize:12,fontWeight:\"500\",lineHeight:\"1.2em\"},color:\"#888888\"};const DEFAULT_LAYOUT={direction:\"vertical\",gap:8,labelWidth:120};const DEFAULT_INPUT_STYLE={font:{fontSize:14,lineHeight:1.2},color:\"#333333\",placeholderColor:\"#999999\",background:\"rgba(187,187,187,0.15)\",padding:\"12px 15px 12px 12px\",border:{borderWidth:1,borderStyle:\"solid\",borderColor:\"rgba(0,0,0,0.06)\"},radius:\"10px\",shadow:\"\"};const DEFAULT_FOCUS_STYLE={borderColor:\"#3B82F6\",shadow:\"\",scale:1};const DEFAULT_ICONS={showIcon:true,icon:\"\",size:18,color:\"#0066FF\",containerBackground:\"#F5F5F5\",containerBorderColor:\"#FFFFFF\"};const DEFAULT_PREVIEW={showPreview:true,height:44,radius:\"8px\"};const DEFAULT_CLEAR_BUTTON={show:true,icon:\"\",size:12,color:\"#000000\",background:\"#FFFFFF\",radius:\"8px\"};const DEFAULT_ERROR_STYLE={color:\"#dc2626\",font:{fontSize:12,lineHeight:1.4}};// ============================================================================\n// DEFAULT ICONS (SVG)\n// ============================================================================\nconst DEFAULT_IMAGE_ICON=`data:image/svg+xml,${encodeURIComponent(`<svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.75 9.5C6.23 9.5 5 8.27 5 6.75C5 5.23 6.23 4 7.75 4C9.27 4 10.5 5.23 10.5 6.75C10.5 8.27 9.27 9.5 7.75 9.5ZM7.75 5.5C7.06 5.5 6.5 6.06 6.5 6.75C6.5 7.44 7.06 8 7.75 8C8.44 8 9 7.44 9 6.75C9 6.06 8.44 5.5 7.75 5.5Z\" fill=\"currentColor\"/>\n<path d=\"M13.75 21.5H7.75C2.32 21.5 0 19.18 0 13.75V7.75C0 2.32 2.32 0 7.75 0H11.75C12.16 0 12.5 0.34 12.5 0.75C12.5 1.16 12.16 1.5 11.75 1.5H7.75C3.14 1.5 1.5 3.14 1.5 7.75V13.75C1.5 18.36 3.14 20 7.75 20H13.75C18.36 20 20 18.36 20 13.75V8.75C20 8.34 20.34 8 20.75 8C21.16 8 21.5 8.34 21.5 8.75V13.75C21.5 19.18 19.18 21.5 13.75 21.5Z\" fill=\"currentColor\"/>\n<path d=\"M16.75 7.49994C16.34 7.49994 16 7.15994 16 6.74994V0.749939C16 0.449939 16.18 0.169939 16.46 0.0599391C16.74 -0.0500609 17.06 0.0099391 17.28 0.219939L19.28 2.21994C19.57 2.50994 19.57 2.98994 19.28 3.27994C18.99 3.56994 18.51 3.56994 18.22 3.27994L17.5 2.55994V6.74994C17.5 7.15994 17.16 7.49994 16.75 7.49994Z\" fill=\"currentColor\"/>\n<path d=\"M14.7499 3.49994C14.5599 3.49994 14.3699 3.42994 14.2199 3.27994C13.9299 2.98994 13.9299 2.50994 14.2199 2.21994L16.2199 0.219941C16.5099 -0.0700586 16.9899 -0.0700586 17.2799 0.219941C17.5699 0.509941 17.5699 0.989941 17.2799 1.27994L15.2799 3.27994C15.1299 3.42994 14.9399 3.49994 14.7499 3.49994Z\" fill=\"currentColor\"/>\n<path d=\"M1.4198 18.4501C1.1798 18.4501 0.939805 18.3301 0.799805 18.1201C0.569805 17.7801 0.659805 17.3101 0.999805 17.0801L5.9298 13.7701C7.0098 13.0501 8.4998 13.1301 9.4798 13.9601L9.8098 14.2501C10.3098 14.6801 11.1598 14.6801 11.6498 14.2501L15.8098 10.6801C16.8698 9.77006 18.5398 9.77006 19.6098 10.6801L21.2398 12.0801C21.5498 12.3501 21.5898 12.8201 21.3198 13.1401C21.0498 13.4501 20.5698 13.4901 20.2598 13.2201L18.6298 11.8201C18.1298 11.3901 17.2898 11.3901 16.7898 11.8201L12.6298 15.3901C11.5698 16.3001 9.8998 16.3001 8.8298 15.3901L8.4998 15.1001C8.0398 14.7101 7.27981 14.6701 6.76981 15.0201L1.8498 18.3301C1.7098 18.4101 1.5598 18.4501 1.4198 18.4501Z\" fill=\"currentColor\"/>\n</svg>`)}`;const DEFAULT_DELETE_ICON=`data:image/svg+xml,${encodeURIComponent(`<svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 2H7.5C7.5 1.73478 7.39464 1.48043 7.20711 1.29289C7.01957 1.10536 6.76522 1 6.5 1C6.23478 1 5.98043 1.10536 5.79289 1.29289C5.60536 1.48043 5.5 1.73478 5.5 2ZM4.5 2C4.5 1.46957 4.71071 0.960859 5.08579 0.585786C5.46086 0.210714 5.96957 0 6.5 0C7.03043 0 7.53914 0.210714 7.91421 0.585786C8.28929 0.960859 8.5 1.46957 8.5 2H12.5C12.6326 2 12.7598 2.05268 12.8536 2.14645C12.9473 2.24021 13 2.36739 13 2.5C13 2.63261 12.9473 2.75979 12.8536 2.85355C12.7598 2.94732 12.6326 3 12.5 3H11.936L10.731 11.838C10.6493 12.4369 10.3533 12.986 9.8979 13.3835C9.44249 13.781 8.85848 14 8.254 14H4.746C4.14152 14 3.55751 13.781 3.1021 13.3835C2.64669 12.986 2.35073 12.4369 2.269 11.838L1.064 3H0.5C0.367392 3 0.240215 2.94732 0.146447 2.85355C0.0526784 2.75979 0 2.63261 0 2.5C0 2.36739 0.0526784 2.24021 0.146447 2.14645C0.240215 2.05268 0.367392 2 0.5 2H4.5ZM5.5 5.5C5.5 5.36739 5.44732 5.24021 5.35355 5.14645C5.25979 5.05268 5.13261 5 5 5C4.86739 5 4.74021 5.05268 4.64645 5.14645C4.55268 5.24021 4.5 5.36739 4.5 5.5V10.5C4.5 10.6326 4.55268 10.7598 4.64645 10.8536C4.74021 10.9473 4.86739 11 5 11C5.13261 11 5.25979 10.9473 5.35355 10.8536C5.44732 10.7598 5.5 10.6326 5.5 10.5V5.5ZM8 5C8.13261 5 8.25979 5.05268 8.35355 5.14645C8.44732 5.24021 8.5 5.36739 8.5 5.5V10.5C8.5 10.6326 8.44732 10.7598 8.35355 10.8536C8.25979 10.9473 8.13261 11 8 11C7.86739 11 7.74021 10.9473 7.64645 10.8536C7.55268 10.7598 7.5 10.6326 7.5 10.5V5.5C7.5 5.36739 7.55268 5.24021 7.64645 5.14645C7.74021 5.05268 7.86739 5 8 5ZM3.26 11.703C3.30908 12.0623 3.48664 12.3916 3.75984 12.6301C4.03304 12.8685 4.38337 13 4.746 13H8.254C8.6168 13.0002 8.96737 12.8689 9.24078 12.6304C9.51419 12.3919 9.6919 12.0625 9.741 11.703L10.927 3H2.073L3.26 11.703Z\" fill=\"currentColor\"/>\n</svg>`)}`;async function uploadToServer(file,uploadConfig,ctx){if(uploadConfig.provider===\"google-drive\"){return uploadToGoogleDrive(file,uploadConfig.gdriveWebAppUrl,uploadConfig.gdriveLinkType,{formName:ctx.formName,dynamicFolder:ctx.dynamicFolder,dateFolder:ctx.dateFolder,maxSizeMB:uploadConfig.maxSizeMB});}return uploadToFramerGeeks(file,ctx.userId,ctx.projectId);}async function uploadToFramerGeeks(file,userId,projectId){const formData=new FormData;formData.append(\"file\",file);if(userId)formData.append(\"userId\",userId);if(projectId)formData.append(\"projectId\",projectId);try{const response=await fetch(API_UPLOAD_ENDPOINT,{method:\"POST\",body:formData});const responseBody=await response.json().catch(()=>({}));if(!response.ok){return{url:\"\",error:responseBody.message||responseBody.errorMessage||responseBody.error||`Upload failed (HTTP ${response.status})`};}const fileLocation=responseBody.data?.path||responseBody.path||responseBody.url||responseBody.fileLocation||responseBody.fileUrl;if(!fileLocation){return{url:\"\",error:\"No file URL returned from server\"};}return{url:fileLocation};}catch(error){console.error(\"Upload error:\",error);return{url:\"\",error:error instanceof Error?error.message:\"Network error\"};}}/**\n * Upload a file to a customer-deployed Google Apps Script Web App.\n *\n * Wire format: JSON body with `text/plain;charset=utf-8` content-type to avoid\n * triggering a CORS preflight (Apps Script doesn't return CORS headers for\n * preflighted application/json POSTs). The Apps Script reads `e.postData.contents`\n * regardless of the declared content-type.\n *\n * The script enforces its own Origin allowlist; we pass `origin` so it can.\n */async function uploadToGoogleDrive(file,webAppUrl,linkType,folders){if(!webAppUrl){return{url:\"\",error:\"Apps Script URL is not configured\"};}try{const fileData=await fileToBase64(file);const response=await fetch(webAppUrl,{method:\"POST\",headers:{\"Content-Type\":\"text/plain;charset=utf-8\"},body:JSON.stringify({filename:file.name,mimeType:file.type||\"application/octet-stream\",size:file.size,fileData,linkType:linkType||\"download\",formName:folders.formName||\"default\",dynamicFolder:folders.dynamicFolder||\"\",dateFolder:folders.dateFolder||\"\",maxSizeMB:folders.maxSizeMB,origin:typeof window!==\"undefined\"?window.location.origin:\"\"})});// Apps Script returns 200 even on errors; the JSON body's `error`\n// field is the source of truth.\nconst text=await response.text();let body=null;try{body=JSON.parse(text);}catch{/* non-JSON response */}if(!response.ok){return{url:\"\",error:body?.error||`Upload failed (HTTP ${response.status} ${response.statusText})`};}if(body?.error){return{url:\"\",error:body.error};}const url=body?.url||body?.fileUrl;if(!url){return{url:\"\",error:\"No file URL returned from Apps Script\"};}return{url};}catch(error){console.error(\"GDrive upload error:\",error);return{url:\"\",error:error instanceof Error?error.message:\"Network error\"};}}function fileToBase64(file){return new Promise((resolve,reject)=>{const reader=new FileReader;reader.onload=()=>{const result=reader.result;if(typeof result!==\"string\"){reject(new Error(\"Failed to read file\"));return;}const comma=result.indexOf(\"\\n\\n\");resolve(comma>=0?result.slice(comma+1):result);};reader.onerror=()=>reject(reader.error??new Error(\"FileReader error\"));reader.readAsDataURL(file);});}/**\n * Format a Date into a folder-safe stamp.\n *   \"date\"     → \"2026-05-18\"\n *   \"datetime\" → \"2026-05-18_14-32-08\"\n */function formatDateFolder(mode,d=new Date){const pad=n=>String(n).padStart(2,\"0\");const y=d.getFullYear();const m=pad(d.getMonth()+1);const day=pad(d.getDate());if(mode===\"date\")return`${y}-${m}-${day}`;return`${y}-${m}-${day}_${pad(d.getHours())}-${pad(d.getMinutes())}-${pad(d.getSeconds())}`;}/**\n * Read the value of a sibling form field by `name` attribute.\n * Returns empty string when not found, not yet filled, or non-text input.\n */function readSiblingFieldValue(parentForm,fieldName){if(!parentForm||!fieldName)return\"\";const el=parentForm.querySelector(`[name=\"${CSS.escape(fieldName)}\"]`);return(el?.value||\"\").toString().trim();}function joinFieldValues(parentForm,fieldNames,joiner=\" \"){if(!parentForm||!Array.isArray(fieldNames)||fieldNames.length===0)return\"\";const values=fieldNames.filter(n=>typeof n===\"string\"&&n.length>0).map(n=>readSiblingFieldValue(parentForm,n)).filter(v=>v.length>0);return values.join(joiner);}function resolveJoiner(mode,custom){switch(mode){case\"dash\":return\"-\";case\"slash\":return\"/\";case\"underscore\":return\"_\";case\"custom\":return typeof custom===\"string\"&&custom.length>0?custom:\" \";case\"space\":default:return\" \";}}// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 300\n * @framerIntrinsicHeight 92\n * @framerDisableUnlink\n */export default function ImageUploadControl(props){const{name,labelText,placeholder,subText,required,validation,upload,label,layout,inputStyle,icons,preview,clearButton,focusStyle,errorStyle,conditions,_meta,style}=props;// Merge configs with defaults\nconst validationConfig={...DEFAULT_VALIDATION,...validation||{}};const uploadConfig={...DEFAULT_UPLOAD,...upload||{}};const labelConfig={...DEFAULT_LABEL,...label||{},font:{...DEFAULT_LABEL.font,...label&&label.font||{}}};const layoutConfig={...DEFAULT_LAYOUT,...layout||{}};const inputStyleConfig={...DEFAULT_INPUT_STYLE,...inputStyle||{},font:{...DEFAULT_INPUT_STYLE.font,...inputStyle&&inputStyle.font||{}},border:{...DEFAULT_INPUT_STYLE.border,...inputStyle&&inputStyle.border||{}}};const iconsConfig={...DEFAULT_ICONS,...icons||{}};const previewConfig={...DEFAULT_PREVIEW,...preview||{}};const clearButtonConfig={...DEFAULT_CLEAR_BUTTON,...clearButton||{}};const focusStyleConfig={...DEFAULT_FOCUS_STYLE,...focusStyle||{}};const errorStyleConfig={...DEFAULT_ERROR_STYLE,...errorStyle||{},font:{...DEFAULT_ERROR_STYLE.font,...errorStyle&&errorStyle.font||{}}};const fieldName=name||\"image-upload\";const currentLabelText=labelText||\"Image\";const inputId=`field-${fieldName}`;const errorId=`error-${fieldName}`;const maxSizeMB=Math.min(uploadConfig.maxSizeMB||25,25);const allowMultiple=uploadConfig.allowMultiple===true;const maxFiles=allowMultiple?Math.max(1,Math.floor(uploadConfig.maxFiles||5)):1;// All tracked images. Single-image mode keeps this at length ≤ 1.\nconst[items,setItems]=useState([]);const[error,setError]=useState(\"\");const[isFocused,setIsFocused]=useState(false);const inputRef=useRef(null);const hiddenInputRef=useRef(null);const rootRef=useRef(null);const idCounter=useRef(0);// Mirror of `items` so async upload handlers read fresh state without stale closures.\nconst itemsRef=useRef(items);useEffect(()=>{itemsRef.current=items;},[items]);const isCanvas=RenderTarget.current()===RenderTarget.canvas;// ─── Derived values (shared by single- and multi-image modes) ───────\n// Comma-separated list of successfully uploaded URLs — the form value.\nconst submittedValue=items.filter(it=>it.status===\"done\"&&it.url).map(it=>it.url).join(\",\");const isUploading=items.some(it=>it.status===\"uploading\");const atCapacity=items.length>=maxFiles;// Single-mode convenience view of the (at most one) tracked item.\nconst firstItem=items[0];// What the MAIN box shows. In multi-image mode the box is only the \"add\n// image\" affordance — selected files render as chips below it, so the box\n// never shows a specific file name/preview/spinner.\nconst boxFileName=allowMultiple?\"\":firstItem?.name||\"\";const boxPreviewUrl=allowMultiple?\"\":firstItem?.previewUrl||\"\";const boxUploading=allowMultiple?false:isUploading;// Revoke object URLs on unmount to avoid leaking blob: handles.\nuseEffect(()=>{return()=>{itemsRef.current.forEach(it=>it.previewUrl&&URL.revokeObjectURL(it.previewUrl));};},[]);// Dispatch native change event so conditional logic watchers detect value updates\nuseEffect(()=>{const el=hiddenInputRef.current;if(el){const nativeInputValueSetter=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,\"value\")?.set;nativeInputValueSetter?.call(el,submittedValue);el.dispatchEvent(new Event(\"change\",{bubbles:true}));}},[submittedValue]);// Conditional logic\nconst conditionItems=useMemo(()=>conditions||[],[conditions]);const handleValueReset=useCallback(()=>{setItems(prev=>{prev.forEach(it=>it.previewUrl&&URL.revokeObjectURL(it.previewUrl));return[];});setError(\"\");},[]);const{isVisible,isRequired,isReadOnly,isDisabled}=useConditionArray(conditionItems,\"\",isCanvas,handleValueReset);const effectiveRequired=conditionItems.some(c=>c.type===\"required\")?isRequired:required;const effectiveDisabled=conditionItems.some(c=>c.type===\"disable\")?isDisabled:false;const effectiveDisabledOrReadOnly=effectiveDisabled||(conditionItems.some(c=>c.type===\"readOnly\")?isReadOnly:false);const Wrapper=isCanvas?\"div\":motion.div;const parsedMeta=useMemo(()=>{if(!_meta)return null;try{return JSON.parse(_meta);}catch{return null;}},[_meta]);const userId=parsedMeta?.userId;const projectId=parsedMeta?.projectId;// Get validation messages with token replacement\nconst getRequiredMessage=useCallback(()=>{const template=validationConfig.requiredMessage?.trim();if(template){return template.replace(/\\{label\\}/g,currentLabelText||fieldName).replace(/\\{name\\}/g,fieldName);}return\"Please upload an image.\";},[validationConfig.requiredMessage,currentLabelText,fieldName]);const getMaxSizeMessage=useCallback(()=>{const template=validationConfig.maxSizeMessage?.trim();if(template){return template.replace(/\\{label\\}/g,currentLabelText||fieldName).replace(/\\{name\\}/g,fieldName).replace(/\\{max\\}/g,`${maxSizeMB}`);}return`File size exceeds ${maxSizeMB}MB limit.`;},[validationConfig.maxSizeMessage,currentLabelText,fieldName,maxSizeMB]);// Form submission handler to enforce required validation\nuseEffect(()=>{if(isCanvas)return;if(!effectiveRequired)return;const form=rootRef.current?.closest(\"form\");if(!form)return;const handleSubmit=event=>{if(!submittedValue){event.preventDefault();event.stopPropagation();setError(getRequiredMessage());return;}setError(\"\");};form.addEventListener(\"submit\",handleSubmit,true);return()=>{form.removeEventListener(\"submit\",handleSubmit,true);};},[isCanvas,effectiveRequired,submittedValue,getRequiredMessage]);const handleFocus=useCallback(()=>{setIsFocused(true);setError(\"\");},[]);const handleBlur=useCallback(()=>{setIsFocused(false);},[]);const handleFileChange=useCallback(async event=>{const selected=Array.from(event.target.files||[]);// Reset so the same file(s) can be re-selected later (add-more).\nevent.target.value=\"\";if(selected.length===0)return;setError(\"\");const maxSizeBytes=maxSizeMB*1024*1024;// Single mode always accepts one (replacing any prior selection);\n// multi mode is bounded by the remaining capacity.\nconst spaceLeft=allowMultiple?Math.max(0,maxFiles-itemsRef.current.length):1;// ─── Validate each file, respecting remaining capacity ─────────\nlet rejectedType=false;let rejectedSize=false;let overflow=false;const accepted=[];for(const file of selected){if(accepted.length>=spaceLeft){overflow=true;break;}if(!file.type.startsWith(\"image/\")){rejectedType=true;continue;}if(file.size>maxSizeBytes){rejectedSize=true;continue;}accepted.push(file);}const capacityMsg=`You can upload up to ${maxFiles} image${maxFiles>1?\"s\":\"\"}.`;if(accepted.length===0){if(rejectedType)setError(\"Invalid file type. Only image files are allowed.\");else if(rejectedSize)setError(getMaxSizeMessage());else if(overflow)setError(capacityMsg);return;}// Surface the most relevant partial-rejection notice, if any.\nif(overflow)setError(capacityMsg);else if(rejectedSize)setError(getMaxSizeMessage());else if(rejectedType)setError(\"Some files were skipped — images only.\");// Register each accepted file as an \"uploading\" item.\nconst pending=accepted.map(file=>({id:`img-${idCounter.current++}`,file,previewUrl:previewConfig.showPreview?URL.createObjectURL(file):\"\"}));// Single-image mode replaces the previous selection.\nif(!allowMultiple){itemsRef.current.forEach(it=>it.previewUrl&&URL.revokeObjectURL(it.previewUrl));}setItems(prev=>{const base=allowMultiple?prev:[];const added=pending.map(p=>({id:p.id,name:p.file.name,url:\"\",previewUrl:p.previewUrl,status:\"uploading\"}));return[...base,...added];});// ─── Resolve nested folder path for Google Drive (once per batch) ─\n// Level 1 (always): form name — override OR parent form name/id OR \"default\"\n// Level 2 (customize on): dynamic — value of a sibling form field by `name`\n// Level 3 (customize on): date / datetime stamp (skipped if \"none\")\nconst parentForm=rootRef.current?.closest(\"form\");const customize=uploadConfig.gdriveCustomizeFolder===true;const detectedFormName=customize&&uploadConfig.formName&&uploadConfig.formName.trim()||parentForm?.getAttribute(\"name\")||parentForm?.getAttribute(\"id\")||\"default\";const dynamicFolder=customize?joinFieldValues(parentForm,uploadConfig.gdriveFolderFields,resolveJoiner(uploadConfig.gdriveFieldsJoiner,uploadConfig.gdriveFieldsJoinerCustom)):\"\";const dateFolder=customize&&uploadConfig.gdriveDateFolder&&uploadConfig.gdriveDateFolder!==\"none\"?formatDateFolder(uploadConfig.gdriveDateFolder):\"\";// Upload all accepted files in parallel; patch each item by id.\nconst results=await Promise.all(pending.map(async p=>{const result=await uploadToServer(p.file,uploadConfig,{userId,projectId,formName:detectedFormName,dynamicFolder,dateFolder});setItems(prev=>prev.map(it=>it.id===p.id?{...it,url:result.url,status:result.url?\"done\":\"error\",error:result.url?undefined:result.error||\"Upload failed. Please try again.\"}:it));return{id:p.id,result};}));// Single-image mode renders no per-item chip, so an errored item\n// would sit in the box looking like a success. Mirror the original\n// single-image component: surface the message via the top-level\n// error and drop the failed item so the box resets and re-opens.\nif(!allowMultiple){const failed=results.find(r=>!r.result.url);if(failed){setError(failed.result.error||\"Upload failed. Please try again.\");setItems(prev=>{const target=prev.find(it=>it.id===failed.id);if(target?.previewUrl)URL.revokeObjectURL(target.previewUrl);return prev.filter(it=>it.id!==failed.id);});}}},[allowMultiple,maxFiles,maxSizeMB,userId,projectId,previewConfig.showPreview,getMaxSizeMessage,uploadConfig]);// Remove a single image by id (used by per-item and single-clear buttons).\nconst handleRemoveItem=useCallback(id=>{setItems(prev=>{const target=prev.find(it=>it.id===id);if(target?.previewUrl)URL.revokeObjectURL(target.previewUrl);return prev.filter(it=>it.id!==id);});setError(\"\");},[]);const handleClearAll=useCallback(()=>{setItems(prev=>{prev.forEach(it=>it.previewUrl&&URL.revokeObjectURL(it.previewUrl));return[];});setError(\"\");if(inputRef.current){inputRef.current.value=\"\";}},[]);const handleKeyDown=useCallback(event=>{if(event.key===\"Enter\"){inputRef.current?.click();}},[]);const handleInvalid=useCallback(event=>{event.preventDefault();if(!submittedValue&&effectiveRequired){setError(getRequiredMessage());}},[submittedValue,effectiveRequired,getRequiredMessage]);// Variants for animation\nconst wrapperVariants={idle:{borderColor:inputStyleConfig.border?.borderColor||\"#D1D5DB\",boxShadow:inputStyleConfig.shadow||\"none\",scale:1},focused:{borderColor:focusStyleConfig.borderColor,boxShadow:focusStyleConfig.shadow,scale:focusStyleConfig.scale},error:{borderColor:errorStyleConfig.color,boxShadow:\"0 0 0 3px rgba(239,68,68,0.2)\",scale:1}};const wrapperState=error?\"error\":isFocused?\"focused\":\"idle\";const describedBy=error?errorId:undefined;// Styles\nconst containerStyle={display:\"flex\",flexDirection:layoutConfig.direction===\"horizontal\"?\"row\":\"column\",alignItems:layoutConfig.direction===\"horizontal\"?\"center\":\"stretch\",gap:`${layoutConfig.gap}px`,width:\"100%\",...style};const normalizedLabelFontWeight=(()=>{const current=labelConfig.font?.fontWeight;if(current===undefined||current===null||current===\"\"||current===\"normal\"||current===\"regular\"||current===400||current===\"400\"){return 500;}return current;})();const labelStyle={...labelConfig.font,fontWeight:normalizedLabelFontWeight,color:labelConfig.color,flexShrink:0,...layoutConfig.direction===\"horizontal\"?{width:`${layoutConfig.labelWidth}px`}:{}};const inputWrapperStyle={...inputStyleConfig.border,borderWidth:inputStyleConfig.border?.borderWidth||1,borderStyle:inputStyleConfig.border?.borderStyle||\"solid\",borderColor:inputStyleConfig.border?.borderColor||\"#D1D5DB\",borderRadius:inputStyleConfig.radius,backgroundColor:inputStyleConfig.background,padding:inputStyleConfig.padding,boxShadow:inputStyleConfig.shadow,minHeight:\"56px\",overflow:\"hidden\",display:\"flex\",alignItems:\"center\",gap:\"12px\",position:\"relative\",cursor:boxFileName||atCapacity?\"default\":\"pointer\"};const errorMessageStyle={...errorStyleConfig.font,color:errorStyleConfig.color,marginTop:\"6px\",overflow:\"hidden\"};const resolvedIcon=iconsConfig.icon||DEFAULT_IMAGE_ICON;const resolvedClearIcon=clearButtonConfig.icon||DEFAULT_DELETE_ICON;// Render spinner\nconst renderSpinner=()=>/*#__PURE__*/_jsx(\"div\",{style:{width:iconsConfig.size,height:iconsConfig.size,flexShrink:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},dangerouslySetInnerHTML:{__html:`\n                <svg width=\"${iconsConfig.size}\" height=\"${iconsConfig.size}\" viewBox=\"0 0 50 50\">\n                    <circle cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke=\"#e2e8f0\" stroke-width=\"4\"></circle>\n                    <circle cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke=\"${iconsConfig.color}\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-dasharray=\"125.6\" stroke-dashoffset=\"125.6\">\n                        <animate attributeName=\"stroke-dashoffset\" values=\"125.6;0;125.6\" dur=\"2s\" repeatCount=\"indefinite\" />\n                    </circle>\n                </svg>\n                `}});// Render icon or preview (main box — single-image mode / add affordance)\nconst renderIconOrPreview=()=>{if(boxUploading&&uploadConfig.showSpinner){return renderSpinner();}// Show image preview if available\nif(boxPreviewUrl&&previewConfig.showPreview){return /*#__PURE__*/_jsx(\"div\",{style:{width:previewConfig.height,height:previewConfig.height,minWidth:previewConfig.height,borderRadius:previewConfig.radius,overflow:\"hidden\",flexShrink:0},children:/*#__PURE__*/_jsx(\"img\",{src:boxPreviewUrl,alt:\"Preview\",style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",objectPosition:\"center\"}})});}if(!iconsConfig.showIcon)return null;return /*#__PURE__*/_jsx(\"div\",{style:{width:44,height:44,minWidth:44,borderRadius:\"50%\",background:boxFileName?\"transparent\":iconsConfig.containerBackground,border:boxFileName?\"none\":`4px solid ${iconsConfig.containerBorderColor}`,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flexShrink:0},children:/*#__PURE__*/_jsx(\"div\",{style:{width:`${iconsConfig.size}px`,height:`${iconsConfig.size}px`,backgroundColor:boxFileName?\"#666666\":iconsConfig.color,WebkitMaskImage:`url(${resolvedIcon})`,maskImage:`url(${resolvedIcon})`,WebkitMaskRepeat:\"no-repeat\",maskRepeat:\"no-repeat\",WebkitMaskPosition:\"center\",maskPosition:\"center\",WebkitMaskSize:\"contain\",maskSize:\"contain\"}})});};// Render content (main box text)\nconst renderContent=()=>{if(boxUploading){return /*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,color:inputStyleConfig.color,whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\"},children:uploadConfig.uploadingText.replace(\"[FileName]\",boxFileName)});}if(boxFileName){return /*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,color:inputStyleConfig.color,whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\"},children:boxFileName});}// Placeholder / add affordance. In multi mode append a count so the\n// user can see how many of the allowed images are used.\nconst baseSub=subText?subText.replace(\"{max}\",`${maxSizeMB}`):\"\";const countSub=allowMultiple?`${baseSub?baseSub+\" • \":\"\"}${items.length}/${maxFiles} added`:baseSub;const boxPlaceholder=allowMultiple&&atCapacity?`Maximum ${maxFiles} image${maxFiles>1?\"s\":\"\"} reached`:placeholder;return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:\"2px\",alignItems:\"flex-start\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,color:inputStyleConfig.color},children:boxPlaceholder}),countSub&&/*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,fontSize:((inputStyleConfig.font?.fontSize)||14)*.85,fontWeight:500,color:inputStyleConfig.placeholderColor,marginTop:4,opacity:.8},children:countSub})]});};if(!isVisible)return null;return /*#__PURE__*/_jsxs(\"div\",{ref:rootRef,style:containerStyle,children:[labelConfig.show&&currentLabelText&&/*#__PURE__*/_jsxs(\"label\",{htmlFor:inputId,style:labelStyle,children:[currentLabelText,effectiveRequired&&/*#__PURE__*/_jsx(\"span\",{style:{color:errorStyleConfig.color,marginLeft:\"2px\"},children:labelConfig.requiredMark||\"*\"})]}),/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0,width:\"100%\"},children:[/*#__PURE__*/_jsxs(Wrapper,{...!isCanvas&&{animate:wrapperState,variants:wrapperVariants,transition:{duration:.2,ease:\"easeOut\"}},style:{...inputWrapperStyle,opacity:effectiveDisabledOrReadOnly?.5:1,pointerEvents:effectiveDisabledOrReadOnly?\"none\":\"auto\"},onFocus:handleFocus,onBlur:handleBlur,onKeyDown:handleKeyDown,tabIndex:0,children:[/*#__PURE__*/_jsx(\"input\",{ref:hiddenInputRef,type:\"hidden\",name:fieldName,value:submittedValue}),/*#__PURE__*/_jsx(\"input\",{ref:inputRef,id:inputId,type:\"file\",accept:SUPPORTED_IMAGE_FORMATS,multiple:allowMultiple,onChange:handleFileChange,onInvalid:handleInvalid,required:effectiveRequired&&!submittedValue,disabled:effectiveDisabledOrReadOnly,\"aria-invalid\":error?\"true\":undefined,\"aria-describedby\":describedBy,style:{position:\"absolute\",inset:0,opacity:0,cursor:\"pointer\",// Single mode: block re-open while a file is set so the\n// clear button works. Multi mode: block at the cap.\npointerEvents:boxFileName||atCapacity?\"none\":\"auto\"}}),renderIconOrPreview(),/*#__PURE__*/_jsx(\"div\",{style:{flex:1,minWidth:0,display:\"flex\",alignItems:\"center\"},children:renderContent()}),!allowMultiple&&clearButtonConfig.show&&boxFileName&&!boxUploading&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:e=>{e.preventDefault();e.stopPropagation();handleClearAll();},style:{flexShrink:0,width:27,height:27,background:clearButtonConfig.background,borderRadius:clearButtonConfig.radius,border:\"none\",cursor:\"pointer\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",padding:\"8px 9px\",boxShadow:\"0px 2px 5px rgba(51, 51, 51, 0.06)\"},children:/*#__PURE__*/_jsx(\"div\",{style:{width:`${clearButtonConfig.size}px`,height:`${clearButtonConfig.size}px`,backgroundColor:clearButtonConfig.color,WebkitMaskImage:`url(${resolvedClearIcon})`,maskImage:`url(${resolvedClearIcon})`,WebkitMaskRepeat:\"no-repeat\",maskRepeat:\"no-repeat\",WebkitMaskPosition:\"center\",maskPosition:\"center\",WebkitMaskSize:\"contain\",maskSize:\"contain\"}})})]}),allowMultiple&&items.length>0&&/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:\"8px\",marginTop:\"8px\"},children:items.map(it=>/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:\"10px\",padding:\"8px 10px\",border:`1px solid ${it.status===\"error\"?errorStyleConfig.color:inputStyleConfig.border?.borderColor||\"rgba(0,0,0,0.06)\"}`,borderRadius:inputStyleConfig.radius,background:inputStyleConfig.background},children:[it.status===\"uploading\"&&uploadConfig.showSpinner?renderSpinner():it.previewUrl&&previewConfig.showPreview?/*#__PURE__*/_jsx(\"div\",{style:{width:previewConfig.height,height:previewConfig.height,minWidth:previewConfig.height,borderRadius:previewConfig.radius,overflow:\"hidden\",flexShrink:0},children:/*#__PURE__*/_jsx(\"img\",{src:it.previewUrl,alt:it.name,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",objectPosition:\"center\"}})}):/*#__PURE__*/_jsx(\"div\",{style:{width:32,height:32,minWidth:32,borderRadius:\"50%\",background:iconsConfig.containerBackground,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flexShrink:0},children:/*#__PURE__*/_jsx(\"div\",{style:{width:`${iconsConfig.size}px`,height:`${iconsConfig.size}px`,backgroundColor:iconsConfig.color,WebkitMaskImage:`url(${resolvedIcon})`,maskImage:`url(${resolvedIcon})`,WebkitMaskRepeat:\"no-repeat\",maskRepeat:\"no-repeat\",WebkitMaskPosition:\"center\",maskPosition:\"center\",WebkitMaskSize:\"contain\",maskSize:\"contain\"}})}),/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0,display:\"flex\",flexDirection:\"column\",gap:2},children:[/*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,color:inputStyleConfig.color,whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\"},children:it.name}),it.status===\"uploading\"&&/*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,fontSize:((inputStyleConfig.font?.fontSize)||14)*.8,color:inputStyleConfig.placeholderColor},children:uploadConfig.uploadingText.replace(\"[FileName]\",it.name)}),it.status===\"error\"&&/*#__PURE__*/_jsx(\"span\",{style:{...errorStyleConfig.font,color:errorStyleConfig.color},children:it.error||\"Upload failed.\"})]}),clearButtonConfig.show&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:e=>{e.preventDefault();e.stopPropagation();handleRemoveItem(it.id);},\"aria-label\":`Remove ${it.name}`,style:{flexShrink:0,width:27,height:27,background:clearButtonConfig.background,borderRadius:clearButtonConfig.radius,border:\"none\",cursor:\"pointer\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",padding:\"8px 9px\",boxShadow:\"0px 2px 5px rgba(51, 51, 51, 0.06)\"},children:/*#__PURE__*/_jsx(\"div\",{style:{width:`${clearButtonConfig.size}px`,height:`${clearButtonConfig.size}px`,backgroundColor:clearButtonConfig.color,WebkitMaskImage:`url(${resolvedClearIcon})`,maskImage:`url(${resolvedClearIcon})`,WebkitMaskRepeat:\"no-repeat\",maskRepeat:\"no-repeat\",WebkitMaskPosition:\"center\",maskPosition:\"center\",WebkitMaskSize:\"contain\",maskSize:\"contain\"}})})]},it.id))}),/*#__PURE__*/_jsx(AnimatePresence,{children:error&&!isCanvas&&/*#__PURE__*/_jsx(motion.div,{id:errorId,role:\"alert\",initial:{opacity:0,y:-4,height:0},animate:{opacity:1,y:0,height:\"auto\"},exit:{opacity:0,y:-4,height:0},transition:{duration:.2,ease:\"easeOut\"},style:errorMessageStyle,children:error},\"error-message\")})]})]});}ImageUploadControl.displayName=\"Image Upload\";ImageUploadControl.defaultProps={name:\"image-upload\",labelText:\"Image\",placeholder:\"Click to upload image\",subText:\"Max {max} MB\",required:false,validation:DEFAULT_VALIDATION,upload:DEFAULT_UPLOAD,label:DEFAULT_LABEL,layout:DEFAULT_LAYOUT,inputStyle:DEFAULT_INPUT_STYLE,icons:DEFAULT_ICONS,preview:DEFAULT_PREVIEW,clearButton:DEFAULT_CLEAR_BUTTON,focusStyle:DEFAULT_FOCUS_STYLE,errorStyle:DEFAULT_ERROR_STYLE,conditions:[],_meta:\"\",style:{}};// ============================================================================\n// PROPERTY CONTROLS\n// ============================================================================\naddPropertyControls(ImageUploadControl,{name:{type:ControlType.String,title:\"Field Name\",defaultValue:\"image-upload\",description:\"Unique name used in submitted form data.\"},labelText:{type:ControlType.String,title:\"Label Name\",defaultValue:\"Image\"},placeholder:{type:ControlType.String,title:\"Placeholder\",defaultValue:\"Click to upload image\"},subText:{type:ControlType.String,title:\"Sub Text\",defaultValue:\"Max {max} MB\",description:\"Use {max} for max file size.\"},required:{type:ControlType.Boolean,title:\"Required\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},validation:{type:ControlType.Object,title:\"Validation\",controls:{requiredMessage:{type:ControlType.String,title:\"Required Error\",defaultValue:\"\",description:\"Custom message when required. Supports {label}, {name}.\"},maxSizeMessage:{type:ControlType.String,title:\"Max Size Error\",defaultValue:\"\",description:\"Custom message for size limit. Supports {label}, {name}, {max}.\"}}},upload:{type:ControlType.Object,title:\"Upload Settings\",controls:{maxSizeMB:{type:ControlType.Number,title:\"Max Size\",defaultValue:25,min:1,max:25,step:1,unit:\"MB\"},uploadingText:{type:ControlType.String,title:\"Uploading Text\",defaultValue:\"Uploading [FileName]...\",description:\"[FileName] will be replaced with actual file name.\"},showSpinner:{type:ControlType.Boolean,title:\"Show Spinner\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},allowMultiple:{type:ControlType.Boolean,title:\"Allow Multiple\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Let users add several images. Their URLs are submitted as a single comma-separated value.\"},maxFiles:{type:ControlType.Number,title:\"Max Files\",defaultValue:5,min:2,max:20,step:1,displayStepper:true,hidden(props){return props.allowMultiple!==true;}},provider:{type:ControlType.Enum,title:\"Storage\",defaultValue:\"framergeeks\",options:[\"framergeeks\",\"google-drive\"],optionTitles:[\"FormsPlugin (default)\",\"Google Drive\"],description:\"Where the uploaded file is stored. Google Drive routes through your own Apps Script web app — see the setup guide.\"},gdriveWebAppUrl:{type:ControlType.String,title:\"Apps Script URL\",defaultValue:\"\",placeholder:\"https://script.google.com/.../exec\",description:\"Deploy the Apps Script template, then paste the /exec URL. [Setup guide](https://docs.formsplugin.com/integrations/google-drive)\",hidden(props){return props.provider!==\"google-drive\";}},gdriveLinkType:{type:ControlType.Enum,title:\"Link Type\",defaultValue:\"download\",options:[\"download\",\"preview\"],optionTitles:[\"Downloadable\",\"Preview only\"],description:\"Downloadable returns a direct file URL. Preview returns a Drive preview page URL.\",hidden(props){return props.provider!==\"google-drive\";}},gdriveCustomizeFolder:{type:ControlType.Boolean,title:\"Customize Folder\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Reveal advanced folder controls: name override, per-field subfolder, date/time stamp.\",hidden(props){return props.provider!==\"google-drive\";}},formName:{type:ControlType.String,title:\"Form Name (override)\",defaultValue:\"\",placeholder:\"auto from parent <form>\",description:'Optional. Used as the per-form subfolder inside your Drive root folder. When empty, the parent form\\'s name/id attribute is used; falls back to \"default\".',hidden(props){return props.provider!==\"google-drive\"||props.gdriveCustomizeFolder!==true;}},gdriveDateFolder:{type:ControlType.Enum,title:\"Date/Time Folder\",defaultValue:\"none\",options:[\"none\",\"date\",\"datetime\"],optionTitles:[\"Off\",\"Date (2026-05-18)\",\"Date + Time (2026-05-18_14-32-08)\"],description:\"Optional. Adds a date or date+time subfolder so submissions group naturally by day.\",hidden(props){return props.provider!==\"google-drive\"||props.gdriveCustomizeFolder!==true;}},gdriveFolderFields:{type:ControlType.Array,title:\"Folder by Field\",defaultValue:[],control:{type:ControlType.String,placeholder:\"e.g. email, fullName\"},description:\"Optional. One or more form field names. Live values are joined (see Joiner) and used as the next folder level. Empty values are skipped.\",hidden(props){return props.provider!==\"google-drive\"||props.gdriveCustomizeFolder!==true;}},gdriveFieldsJoiner:{type:ControlType.Enum,title:\"Joiner\",defaultValue:\"space\",options:[\"space\",\"dash\",\"slash\",\"underscore\",\"custom\"],optionTitles:[\"Space ( )\",\"Dash (-)\",\"Slash (/)\",\"Underscore (_)\",\"Custom…\"],description:\"Character placed between combined field values. Slash creates a nested subfolder per value in Drive.\",hidden(props){return props.provider!==\"google-drive\"||props.gdriveCustomizeFolder!==true||!(props.gdriveFolderFields&&props.gdriveFolderFields.length>1);}},gdriveFieldsJoinerCustom:{type:ControlType.String,title:\"Custom Joiner\",defaultValue:\"\",placeholder:\"_ or ~ or any character\",description:\"Your own joiner string. Used only when Joiner = Custom.\",hidden(props){return props.provider!==\"google-drive\"||props.gdriveCustomizeFolder!==true||props.gdriveFieldsJoiner!==\"custom\";}}}},label:{type:ControlType.Object,title:\"Label Style\",controls:{show:{type:ControlType.Boolean,title:\"Show Label\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},requiredMark:{type:ControlType.String,title:\"Required Mark\",defaultValue:\"*\",hidden(props){return props.show===false;}},font:{type:ControlType.Font,title:\"Label Font\",controls:\"basic\",displayFontSize:true,defaultFontType:\"sans-serif\",defaultValue:{fontSize:12,fontWeight:\"500\",lineHeight:\"1.2em\"},hidden(props){return props.show===false;}},color:{type:ControlType.Color,title:\"Label Color\",defaultValue:\"#888888\",hidden(props){return props.show===false;}}}},layout:{type:ControlType.Object,title:\"Layout\",controls:{direction:{type:ControlType.Enum,title:\"Direction\",defaultValue:\"vertical\",options:[\"vertical\",\"horizontal\"],optionTitles:[\"Vertical\",\"Horizontal\"],optionIcons:[\"direction-vertical\",\"direction-horizontal\"],displaySegmentedControl:true},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:8,min:0,max:40,step:2,unit:\"px\"},labelWidth:{type:ControlType.Number,title:\"Label Width\",defaultValue:120,min:40,max:300,step:4,unit:\"px\",hidden(props){return props.direction!==\"horizontal\";}}}},inputStyle:{type:ControlType.Object,title:\"Input Style\",controls:{font:{type:ControlType.Font,title:\"Font\",controls:\"basic\",displayFontSize:true,defaultFontType:\"sans-serif\",defaultValue:{fontSize:14,lineHeight:1.2}},color:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#333333\"},placeholderColor:{type:ControlType.Color,title:\"Sub Text Color\",defaultValue:\"#999999\"},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"rgba(187,187,187,0.15)\"},padding:{type:ControlType.Padding,title:\"Padding\",defaultValue:\"12px 15px 12px 12px\"},border:{type:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:1,borderStyle:\"solid\",borderColor:\"rgba(0,0,0,0.06)\"}},radius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"10px\"},shadow:{type:ControlType.BoxShadow,title:\"Shadow\",defaultValue:\"none\"}}},icons:{type:ControlType.Object,title:\"Icon\",controls:{showIcon:{type:ControlType.Boolean,title:\"Show Icon\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},icon:{type:ControlType.Image,title:\"Icon\",hidden(props){return props.showIcon===false;}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#0066FF\",hidden(props){return props.showIcon===false;}},size:{type:ControlType.Number,title:\"Icon Size\",defaultValue:18,min:8,max:64,step:1,unit:\"px\",displayStepper:true,hidden(props){return props.showIcon===false;}},containerBackground:{type:ControlType.Color,title:\"Icon BG\",defaultValue:\"#F5F5F5\",hidden(props){return props.showIcon===false;}},containerBorderColor:{type:ControlType.Color,title:\"Icon Border\",defaultValue:\"#FFFFFF\",hidden(props){return props.showIcon===false;}}}},preview:{type:ControlType.Object,title:\"Image Preview\",controls:{showPreview:{type:ControlType.Boolean,title:\"Show Preview\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Show thumbnail of uploaded image.\"},height:{type:ControlType.Number,title:\"Height\",defaultValue:44,min:24,max:120,step:4,unit:\"px\",hidden(props){return props.showPreview===false;}},radius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"8px\",hidden(props){return props.showPreview===false;}}}},clearButton:{type:ControlType.Object,title:\"Clear Button\",controls:{show:{type:ControlType.Boolean,title:\"Show Button\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},icon:{type:ControlType.Image,title:\"Icon\",hidden(props){return props.show===false;}},color:{type:ControlType.Color,title:\"Icon Color\",defaultValue:\"#000000\",hidden(props){return props.show===false;}},size:{type:ControlType.Number,title:\"Icon Size\",defaultValue:12,min:8,max:32,step:1,unit:\"px\",displayStepper:true,hidden(props){return props.show===false;}},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF\",hidden(props){return props.show===false;}},radius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"8px\",hidden(props){return props.show===false;}}}},focusStyle:{type:ControlType.Object,title:\"Focus Style\",controls:{borderColor:{type:ControlType.Color,title:\"Border\",defaultValue:\"#3B82F6\"},shadow:{type:ControlType.BoxShadow,title:\"Shadow\",defaultValue:\"none\"},scale:{type:ControlType.Number,title:\"Scale\",defaultValue:1,min:1,max:1.05,step:.005}}},errorStyle:{type:ControlType.Object,title:\"Error Style\",description:\"by [Forms Plugin](https://formsplugin.com/?ref=field_setting)\",controls:{color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#dc2626\"},font:{type:ControlType.Font,title:\"Font\",controls:\"basic\",displayFontSize:true,defaultFontType:\"sans-serif\",defaultValue:{fontSize:12,lineHeight:1.4}}}},...CONDITION_ARRAY_CONTROL,_meta:{type:ControlType.String,defaultValue:\"\",hidden(){return true;}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ImageUploadControl\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicWidth\":\"300\",\"framerDisableUnlink\":\"\",\"framerIntrinsicHeight\":\"92\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ImageUploadControl.map"],"mappings":"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"}