{"version":3,"file":"FileUploadControl.BARTUSZR.mjs","names":["useState","useRef","useMemo","useCallback"],"sources":["https:/framerusercontent.com/modules/PnYBMB00l1wLrkKOYUpz/FP4mcHIzvz1uAbbEMHAd/FileUploadControl.js"],"sourcesContent":["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\";// ============================================================================\n// DEFAULT VALUES\n// ============================================================================\nconst DEFAULT_VALIDATION={requiredMessage:\"\",maxSizeMessage:\"\",invalidTypeMessage:\"\"};const DEFAULT_UPLOAD={maxSizeMB:25,uploadingText:\"Uploading [FileName]...\",showSpinner:true,fileTypes:\"all\",customTypes:[\".pdf\"],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_FILE_ICON=`data:image/svg+xml,${encodeURIComponent(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.744 7.4215C19.744 6.59902 19.4168 5.81039 18.8358 5.22822C17.7493 4.14286 15.6012 1.99471 14.5158 0.908225C13.9336 0.327187 13.145 0 12.3225 0C10.8502 0 7.89987 0 5.35909 0C3.93752 0 2.57462 0.564115 1.56937 1.56937C0.564115 2.57462 0 3.93752 0 5.35909V16.6414C0 19.6007 2.39975 22.0005 5.35909 22.0005H14.3849C17.3443 22.0005 19.744 19.6007 19.744 16.6414C19.744 13.3819 19.744 9.24472 19.744 7.4215ZM12.4105 1.6946C12.3812 1.69347 12.3519 1.69235 12.3225 1.69235C10.8502 1.69235 7.89987 1.69235 5.35909 1.69235C4.38656 1.69235 3.45351 2.0782 2.76642 2.76642C2.0782 3.45351 1.69235 4.38656 1.69235 5.35909V16.6414C1.69235 18.6666 3.33392 20.3081 5.35909 20.3081H14.3849C16.4101 20.3081 18.0517 18.6666 18.0517 16.6414C18.0517 13.3819 18.0517 9.24472 18.0517 7.4215C18.0517 7.39216 18.0506 7.36283 18.0494 7.3335H15.5132C14.6907 7.3335 13.9009 7.00631 13.3188 6.42527C12.7377 5.8431 12.4105 5.05334 12.4105 4.23086V1.6946ZM16.8546 5.64115L14.1029 2.8894V4.23086C14.1029 4.60544 14.2518 4.96308 14.5158 5.22822C14.7809 5.49222 15.1386 5.64115 15.5132 5.64115H16.8546Z\" fill=\"currentColor\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.87237 7.89771H9.89268C9.97053 7.89996 10.0461 7.91237 10.1172 7.93381L10.1195 7.93494C10.2481 7.9733 10.3688 8.04438 10.4703 8.14592L12.7268 10.4024C13.0574 10.7318 13.0574 11.2689 12.7268 11.5983C12.3973 11.9289 11.8603 11.9289 11.5309 11.5983L10.7185 10.7871V14.385C10.7185 14.8521 10.3395 15.2312 9.87237 15.2312C9.40528 15.2312 9.0262 14.8521 9.0262 14.385V10.7871L8.21387 11.5983C7.88443 11.9289 7.34739 11.9289 7.01795 11.5983C6.68738 11.2689 6.68738 10.7318 7.01795 10.4024L9.27441 8.14592C9.37595 8.04438 9.49667 7.9733 9.62529 7.93494L9.62754 7.93381C9.69862 7.91237 9.77421 7.89996 9.85206 7.89771H9.87237Z\" 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 * `formName` becomes the per-form subfolder name inside the customer's\n * configured Drive root folder.\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||\"\",// Server uses this as the size cap, replacing the static\n// MAX_SIZE_MB previously set inside the Apps Script. Lets\n// each control instance enforce its own per-form limit.\nmaxSizeMB: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. Treat HTTP non-2xx as a transport\n// problem (e.g. deployment URL revoked, network hiccup) — surface\n// the body if it parses, else use the status text.\nconst text=await response.text();let body=null;try{body=JSON.parse(text);}catch{/* non-JSON response (HTML auth page, etc.) */}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\"};}}/**\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();}/**\n * Read multiple sibling fields by name, drop empty values, join with \"-\".\n * Returns \"\" when the input array is empty or every field is empty —\n * caller treats \"\" as \"skip this folder level\".\n */function joinFieldValues(parentForm,fieldNames,joiner=\" \"){// Defensive: only treat true arrays of non-empty strings as input.\nif(!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);}/**\n * Resolve the per-control joiner choice to the actual string used between\n * combined field values. Picking \"slash\" produces a \"/\" which the Apps\n * Script template treats as a nested-folder separator (each split piece\n * is sanitized individually).\n */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\" \";}}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;}// Strip \"data:<mime>;base64,\" prefix → keep just the base64 body\nconst comma=result.indexOf(\",\");resolve(comma>=0?result.slice(comma+1):result);};reader.onerror=()=>reject(reader.error??new Error(\"FileReader error\"));reader.readAsDataURL(file);});}function getAcceptedTypes(uploadConfig){if(uploadConfig.fileTypes===\"all\")return\"\";const types=[];for(const type of uploadConfig.customTypes||[]){if(type.startsWith(\".\")||type.includes(\"/*\")){types.push(type);}else{types.push(`.${type}`);}}return types.join(\",\");}function validateFileType(file,uploadConfig){if(uploadConfig.fileTypes===\"all\")return true;return(uploadConfig.customTypes||[]).some(type=>{if(type.startsWith(\".\")){return file.name.toLowerCase().endsWith(type.toLowerCase());}else if(type.includes(\"/*\")){const[category]=type.split(\"/\");return file.type.startsWith(`${category}/`);}return file.type===type;});}// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 300\n * @framerIntrinsicHeight 92\n * @framerDisableUnlink\n */export default function FileUploadControl(props){const{name,labelText,placeholder,subText,required,conditions,validation,upload,label,layout,inputStyle,icons,preview,clearButton,focusStyle,errorStyle,_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||\"file-upload\";const currentLabelText=labelText||\"File\";const inputId=`field-${fieldName}`;const errorId=`error-${fieldName}`;const maxSizeMB=Math.min(uploadConfig.maxSizeMB||25,25);const[fileName,setFileName]=useState(\"\");const[uploadedFileUrl,setUploadedFileUrl]=useState(\"\");const[imagePreviewUrl,setImagePreviewUrl]=useState(\"\");const[isUploading,setIsUploading]=useState(false);const[error,setError]=useState(\"\");const[isFocused,setIsFocused]=useState(false);const inputRef=useRef(null);const hiddenInputRef=useRef(null);const rootRef=useRef(null);const isCanvas=RenderTarget.current()===RenderTarget.canvas;const Wrapper=isCanvas?\"div\":motion.div;// 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,uploadedFileUrl);el.dispatchEvent(new Event(\"change\",{bubbles:true}));}},[uploadedFileUrl]);const conditionItems=useMemo(()=>conditions||[],[conditions]);const handleValueReset=useCallback(()=>{setFileName(\"\");setUploadedFileUrl(\"\");setImagePreviewUrl(\"\");setError(\"\");},[]);const{isVisible,isRequired,isReadOnly,isDisabled}=useConditionArray(conditionItems,\"\",isCanvas,handleValueReset);const hasRequiredConditions=conditionItems.some(c=>c.type===\"required\");const hasDisableConditions=conditionItems.some(c=>c.type===\"disable\");const hasReadOnlyConditions=conditionItems.some(c=>c.type===\"readOnly\");const effectiveRequired=hasRequiredConditions?isRequired:required;const effectiveDisabled=hasDisableConditions?isDisabled:false;const effectiveReadOnly=hasReadOnlyConditions?isReadOnly:false;const effectiveDisabledOrReadOnly=effectiveDisabled||effectiveReadOnly;const parsedMeta=useMemo(()=>{if(!_meta)return null;try{return JSON.parse(_meta);}catch{return null;}},[_meta]);const userId=parsedMeta?.userId;const projectId=parsedMeta?.projectId;const acceptedTypes=getAcceptedTypes(uploadConfig);// 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 a file.\";},[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]);const getInvalidTypeMessage=useCallback(()=>{const template=validationConfig.invalidTypeMessage?.trim();if(template){return template.replace(/\\{label\\}/g,currentLabelText||fieldName).replace(/\\{name\\}/g,fieldName).replace(/\\{types\\}/g,acceptedTypes||\"any\");}return`Invalid file type. Allowed: ${acceptedTypes||\"any\"}`;},[validationConfig.invalidTypeMessage,currentLabelText,fieldName,acceptedTypes]);// 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(!uploadedFileUrl){event.preventDefault();event.stopPropagation();setError(getRequiredMessage());return;}setError(\"\");};form.addEventListener(\"submit\",handleSubmit,true);return()=>{form.removeEventListener(\"submit\",handleSubmit,true);};},[isCanvas,effectiveRequired,uploadedFileUrl,getRequiredMessage]);const handleFocus=useCallback(()=>{setIsFocused(true);setError(\"\");},[]);const handleBlur=useCallback(()=>{setIsFocused(false);},[]);const handleFileChange=useCallback(async event=>{const file=event.target.files?.[0];if(!file)return;setFileName(file.name);setImagePreviewUrl(\"\");setError(\"\");// Validate file type\nif(!validateFileType(file,uploadConfig)){setError(getInvalidTypeMessage());setFileName(\"\");return;}// Validate file size\nconst maxSizeBytes=maxSizeMB*1024*1024;if(file.size>maxSizeBytes){setError(getMaxSizeMessage());setFileName(\"\");return;}// Create preview for images\nif(previewConfig.showPreview&&file.type.startsWith(\"image/\")){setImagePreviewUrl(URL.createObjectURL(file));}setIsUploading(true);// ─── Resolve nested folder path for Google Drive ───────────\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//                        (skipped if empty/not found)\n// Level 3 (customize on): date / datetime stamp (skipped if \"none\")\n// When gdriveCustomizeFolder is off, levels 2 & 3 are forced empty.\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):\"\";const result=await uploadToServer(file,uploadConfig,{userId,projectId,formName:detectedFormName,dynamicFolder,dateFolder});setIsUploading(false);if(result.url){setUploadedFileUrl(result.url);}else{// Surface the actual upstream message (Apps Script {error}\n// payload, HTTP status, network error). Falls back to a\n// generic line only when nothing was reported.\nsetError(result.error||\"Upload failed. Please try again.\");setFileName(\"\");setImagePreviewUrl(\"\");}},[maxSizeMB,userId,projectId,uploadConfig,acceptedTypes,previewConfig.showPreview,getMaxSizeMessage,getInvalidTypeMessage]);const handleClearFile=useCallback(()=>{setFileName(\"\");setUploadedFileUrl(\"\");setImagePreviewUrl(\"\");setIsUploading(false);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(!uploadedFileUrl&&effectiveRequired){setError(getRequiredMessage());}},[uploadedFileUrl,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:effectiveDisabledOrReadOnly?\"not-allowed\":fileName?\"default\":\"pointer\",opacity:effectiveDisabledOrReadOnly?.5:1};const errorMessageStyle={...errorStyleConfig.font,color:errorStyleConfig.color,marginTop:\"6px\",overflow:\"hidden\"};const resolvedIcon=iconsConfig.icon||DEFAULT_FILE_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\nconst renderIconOrPreview=()=>{if(!iconsConfig.showIcon&&!previewConfig.showPreview)return null;if(isUploading&&uploadConfig.showSpinner){return renderSpinner();}// Show image preview if available\nif(imagePreviewUrl&&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:imagePreviewUrl,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:fileName?\"transparent\":iconsConfig.containerBackground,border:fileName?\"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:fileName?\"#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\nconst renderContent=()=>{if(isUploading){return /*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,color:inputStyleConfig.color,whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\"},children:uploadConfig.uploadingText.replace(\"[FileName]\",fileName)});}if(fileName){return /*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,color:inputStyleConfig.color,whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\"},children:fileName});}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:placeholder}),subText&&/*#__PURE__*/_jsx(\"span\",{style:{...inputStyleConfig.font,fontSize:((inputStyleConfig.font?.fontSize)||14)*.85,fontWeight:500,color:inputStyleConfig.placeholderColor,marginTop:4,opacity:.8},children:subText.replace(\"{max}\",`${maxSizeMB}`)})]});};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,onFocus:handleFocus,onBlur:handleBlur,onKeyDown:handleKeyDown,tabIndex:0,children:[/*#__PURE__*/_jsx(\"input\",{ref:hiddenInputRef,type:\"hidden\",name:fieldName,value:uploadedFileUrl}),/*#__PURE__*/_jsx(\"input\",{ref:inputRef,id:inputId,type:\"file\",accept:acceptedTypes,onChange:handleFileChange,onInvalid:handleInvalid,required:effectiveRequired&&!uploadedFileUrl,disabled:effectiveDisabledOrReadOnly,\"aria-invalid\":error?\"true\":undefined,\"aria-describedby\":describedBy,style:{position:\"absolute\",inset:0,opacity:0,cursor:effectiveDisabledOrReadOnly?\"not-allowed\":\"pointer\",pointerEvents:effectiveDisabledOrReadOnly||fileName?\"none\":\"auto\"}}),renderIconOrPreview(),/*#__PURE__*/_jsx(\"div\",{style:{flex:1,minWidth:0,display:\"flex\",alignItems:\"center\"},children:renderContent()}),clearButtonConfig.show&&fileName&&!isUploading&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:e=>{e.preventDefault();e.stopPropagation();handleClearFile();},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\"}})})]}),/*#__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\")})]})]});}FileUploadControl.displayName=\"File Upload\";FileUploadControl.defaultProps={name:\"file-upload\",labelText:\"File\",placeholder:\"Click to upload or drag & drop\",subText:\"Max {max} MB\",required:false,conditions:[],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,_meta:\"\",style:{}};// ============================================================================\n// PROPERTY CONTROLS\n// ============================================================================\naddPropertyControls(FileUploadControl,{name:{type:ControlType.String,title:\"Field Name\",defaultValue:\"file-upload\",description:\"Unique name used in submitted form data.\"},labelText:{type:ControlType.String,title:\"Label Name\",defaultValue:\"File\"},placeholder:{type:ControlType.String,title:\"Placeholder\",defaultValue:\"Click to upload or drag & drop\"},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}.\"},invalidTypeMessage:{type:ControlType.String,title:\"Invalid Type Error\",defaultValue:\"\",description:\"Custom message for invalid type. Supports {label}, {name}, {types}.\"}}},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\"},fileTypes:{type:ControlType.Enum,title:\"File Types\",defaultValue:\"all\",options:[\"all\",\"custom\"],optionTitles:[\"Any File\",\"Custom\"]},customTypes:{type:ControlType.Array,title:\"Allowed Types\",defaultValue:[\".pdf\"],control:{type:ControlType.String,placeholder:\".pdf\"},hidden(props){return props.fileTypes!==\"custom\";}},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\"},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 for uploaded images.\"},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\":\"FileUploadControl\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"300\",\"framerIntrinsicHeight\":\"92\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FileUploadControl.map"],"mappings":"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"}