{"version":3,"file":"BrevoIntegrationControl.DdC1b92e.mjs","names":["useRef","useState","useMemo","useCallback","_Fragment"],"sources":["https:/framerusercontent.com/modules/Bjk4ExEII5wszuhg18xF/TBEtLjqAhu4W8sFlNzs6/BrevoIntegrationControl.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useCallback,useEffect,useMemo,useRef,useState}from\"react\";// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\nconst DEFAULT_API_CONFIG={apiKey:\"\",listId:\"\",updateEnabled:true};const DEFAULT_FIELDS_CONFIG={mappings:[{formFieldName:\"email\",brevoAttribute:\"EMAIL\"}]};const BASE_URL=\"https://api.framergeeks.com/plugin/api/v1\";// Shared encryption key (must match server INTEGRATION_ENCRYPT_KEY)\nconst ENCRYPT_KEY_HEX=\"a3f2b8c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1\";/**\n * AES-256-GCM encrypt using Web Crypto API.\n * Output: base64( IV 12 bytes + ciphertext + authTag 16 bytes )\n */async function encryptPayload(data){const iv=crypto.getRandomValues(new Uint8Array(12));const keyBytes=new Uint8Array(ENCRYPT_KEY_HEX.match(/.{2}/g).map(b=>parseInt(b,16)));const cryptoKey=await crypto.subtle.importKey(\"raw\",keyBytes,\"AES-GCM\",false,[\"encrypt\"]);const encoded=new TextEncoder().encode(JSON.stringify(data));const encrypted=await crypto.subtle.encrypt({name:\"AES-GCM\",iv},cryptoKey,encoded);// GCM appends 16-byte auth tag to ciphertext automatically\nconst result=new Uint8Array(iv.length+encrypted.byteLength);result.set(iv,0);result.set(new Uint8Array(encrypted),iv.length);// Base64 encode\nlet binary=\"\";for(let i=0;i<result.length;i++){binary+=String.fromCharCode(result[i]);}return btoa(binary);}// ---------------------------------------------------------------------------\n// Canvas badge\n// ---------------------------------------------------------------------------\nfunction BrevoLogo(){return /*#__PURE__*/_jsxs(\"svg\",{width:\"40\",height:\"40\",viewBox:\"0 0 40 40\",fill:\"none\",children:[/*#__PURE__*/_jsx(\"rect\",{width:\"40\",height:\"40\",rx:\"12\",fill:\"#0B996E\",fillOpacity:\"0.082\"}),/*#__PURE__*/_jsx(\"g\",{clipPath:\"url(#brevo_clip)\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M19.9999 8.00488C16.8186 8.00488 13.7676 9.26864 11.5181 11.5181C9.26864 13.7676 8.00488 16.8186 8.00488 19.9999C8.00488 23.1812 9.26864 26.2321 11.5181 28.4816C13.7676 30.7311 16.8186 31.9949 19.9999 31.9949C23.1812 31.9949 26.2321 30.7311 28.4816 28.4816C30.7311 26.2321 31.9949 23.1812 31.9949 19.9999C31.9949 16.8186 30.7311 13.7676 28.4816 11.5181C26.2321 9.26864 23.1812 8.00488 19.9999 8.00488ZM15.2019 12.8029H20.9465C23.2855 12.8029 24.8399 14.2083 24.8399 16.3174C24.8399 17.339 24.492 18.1786 23.7503 18.9043C25.1867 19.812 25.9974 21.2194 25.9974 22.7837C25.9974 25.6425 23.3585 27.7976 19.836 27.7976H15.2009V12.8039L15.2019 12.8029ZM17.286 14.7541V20.2888H17.356C17.5889 19.8569 18.2136 19.4931 19.604 19.0633C21.6422 18.4045 22.6398 17.5439 22.6398 16.4094C22.6398 15.4118 21.8741 14.7541 20.7166 14.7541H17.286ZM22.154 20.0179C21.3883 20.4027 20.4847 20.7656 19.3951 21.1274C18.1666 21.5143 17.286 22.5128 17.286 23.5334V25.8474H19.65C22.036 25.8474 23.7973 24.508 23.7973 22.6938C23.7973 21.6272 23.1736 20.6076 22.154 20.0179Z\",fill:\"#0B996E\"})}),/*#__PURE__*/_jsx(\"defs\",{children:/*#__PURE__*/_jsx(\"clipPath\",{id:\"brevo_clip\",children:/*#__PURE__*/_jsx(\"rect\",{width:\"23.99\",height:\"23.99\",fill:\"white\",transform:\"translate(8.00488 8.00488)\"})})})]});}function StatusIcon({connected}){if(connected){return /*#__PURE__*/_jsxs(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 24 24\",fill:\"none\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\",stroke:\"#10B77F\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M9 12L11 14L15 10\",stroke:\"#10B77F\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})]});}return /*#__PURE__*/_jsxs(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 24 24\",fill:\"none\",children:[/*#__PURE__*/_jsx(\"path\",{d:\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\",stroke:\"#6B7280\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M12 16V12\",stroke:\"#6B7280\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M12 8H12.01\",stroke:\"#6B7280\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})]});}function CanvasBadge({configured,error}){const subtitle=error?error:configured?\"Integration active\":\"Connect API key\";const subtitleColor=error?\"#dc2626\":configured?\"#10B77F\":\"#6B7280\";return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:\"12px\",padding:\"10px 14px\",background:\"#FFFFFF\",border:`1px solid ${error?\"rgba(220,38,38,0.15)\":\"rgba(0,0,0,0.06)\"}`,borderRadius:\"12px\",fontFamily:\"system-ui, -apple-system, sans-serif\",userSelect:\"none\",boxShadow:\"0 1px 3px rgba(0,0,0,0.04)\"},children:[/*#__PURE__*/_jsx(BrevoLogo,{}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:\"2px\",flex:1,minWidth:0},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontSize:\"14px\",fontWeight:600,color:\"#111827\",lineHeight:1.3},children:\"Brevo\"}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:\"12px\",fontWeight:400,color:subtitleColor,lineHeight:1.3},children:subtitle})]}),/*#__PURE__*/_jsx(StatusIcon,{connected:configured&&!error})]});}// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 220\n * @framerIntrinsicHeight 40\n * @framerDisableUnlink\n */export default function BrevoIntegrationControl(props){const{apiConfig,fieldsConfig,_meta,style}=props;const apiCfg={...DEFAULT_API_CONFIG,...apiConfig||{}};const fieldsCfg={...DEFAULT_FIELDS_CONFIG,...fieldsConfig||{}};const isCanvas=RenderTarget.current()===RenderTarget.canvas;const containerRef=useRef(null);const formRef=useRef(null);const pendingRef=useRef(false);const[status,setStatus]=useState(\"idle\");const[statusMessage,setStatusMessage]=useState(\"\");const[setupDone,setSetupDone]=useState(false);const parsedMeta=useMemo(()=>{if(!_meta)return null;try{return JSON.parse(_meta);}catch{return null;}},[_meta]);const userId=parsedMeta?.userId;const projectId=parsedMeta?.projectId;// --- Upsert integration setup on API key / List ID change ---\nuseEffect(()=>{if(!apiCfg.apiKey||!apiCfg.listId){setSetupDone(false);return;}if(!userId||!projectId)return;fetch(`${BASE_URL}/integration/setup/brevo`,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({int_user_fk_user_id:userId,int_fk_project_id:projectId,int_tp_api_key:apiCfg.apiKey,int_domain_prod:parsedMeta?.publishInfo?.production||\"\",int_domain_test:parsedMeta?.publishInfo?.staging||\"\",int_config:{list_id:[Number(apiCfg.listId)]}})}).then(async res=>{const data=await res.json();if(res.ok&&(data.status===true||data.success!==false)){setSetupDone(true);setStatus(\"success\");setStatusMessage(\"Integration active\");}else{setSetupDone(false);setStatus(\"error\");setStatusMessage(data.message||data.error?.[0]||\"Setup failed\");}}).catch(()=>{setSetupDone(false);setStatus(\"error\");setStatusMessage(\"Connection error\");});},[apiCfg.apiKey,apiCfg.listId,userId,projectId]);// --- Find parent form ---\nconst findParentForm=useCallback(()=>{let el=containerRef.current;while(el){if(el.tagName===\"FORM\")return el;el=el.parentElement;}return null;},[]);// --- Collect form data & map to payload ---\nconst buildPayload=useCallback(form=>{const formData=new FormData(form);const dataObj={};formData.forEach((val,key)=>{if(typeof val===\"string\")dataObj[key]=val;});let email=\"\";const attributes={};const mappings=fieldsCfg.mappings||[];for(const mapping of mappings){const formField=mapping.formFieldName?.trim();const brevoAttr=mapping.brevoAttribute?.trim().toUpperCase();if(!formField||!brevoAttr)continue;// Case-insensitive lookup\nlet formValue=\"\";for(const[key,value]of Object.entries(dataObj)){if(key.toLowerCase()===formField.toLowerCase()){formValue=value;break;}}if(!formValue)continue;if(brevoAttr===\"EMAIL\"){email=formValue;}else{attributes[brevoAttr]=formValue;}}if(!email)return null;return{int_user_fk_user_id:userId||\"\",int_fk_project_id:projectId||\"\",email,attributes:Object.keys(attributes).length>0?attributes:undefined,config:{listIds:[Number(apiCfg.listId)],updateEnabled:apiCfg.updateEnabled}};},[fieldsCfg.mappings,userId,projectId,apiCfg.listId,apiCfg.updateEnabled]);// --- Submit handler (calls our server, not Brevo directly) ---\nconst handleSubmit=useCallback(async()=>{// Guard: prevent double-fire from submit + Enter\nif(pendingRef.current)return;if(!setupDone)return;const form=formRef.current;if(!form)return;pendingRef.current=true;const payload=buildPayload(form);if(!payload){setStatus(\"error\");setStatusMessage(\"No email field mapped\");pendingRef.current=false;return;}setStatus(\"sending\");setStatusMessage(\"\");// Encrypt entire payload so nothing is visible in network tab\nconst encrypted=await encryptPayload(payload);// Use keepalive so the request completes even if the page\n// navigates away (external redirect after form submit).\ntry{const response=await fetch(`${BASE_URL}/integration/use/brevo`,{method:\"POST\",keepalive:true,headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({data:encrypted})});const data=await response.json().catch(()=>({status:false,message:\"Unknown error\"}));if(data.status===true){setStatus(\"success\");setStatusMessage(\"Contact synced\");}else{setStatus(\"error\");setStatusMessage(data.message||`Error ${response.status}`);}}catch(err){if(err instanceof TypeError&&err.message.includes(\"abort\")){pendingRef.current=false;return;}setStatus(\"error\");setStatusMessage(\"Network error\");}finally{pendingRef.current=false;}},[setupDone,buildPayload]);// --- Attach to parent form ---\nuseEffect(()=>{if(isCanvas)return;const form=findParentForm();formRef.current=form;if(!form)return;const onKeydown=e=>{if(e.key!==\"Enter\"||e.shiftKey)return;const tag=e.target?.tagName;if(tag===\"TEXTAREA\"||tag===\"SELECT\")return;handleSubmit();};form.addEventListener(\"submit\",handleSubmit);form.addEventListener(\"keydown\",onKeydown);return()=>{form.removeEventListener(\"submit\",handleSubmit);form.removeEventListener(\"keydown\",onKeydown);};},[isCanvas,findParentForm,handleSubmit]);// --- Auto-clear status ---\nuseEffect(()=>{if(status===\"success\"||status===\"error\"){// On canvas keep error visible so user sees the issue\nif(isCanvas&&status===\"error\")return;const timer=setTimeout(()=>{setStatus(\"idle\");setStatusMessage(\"\");},5e3);return()=>clearTimeout(timer);}},[status,isCanvas]);// --- Render ---\nconst containerStyle={position:\"relative\",width:\"100%\",...style};if(isCanvas){return /*#__PURE__*/_jsx(\"div\",{style:containerStyle,children:/*#__PURE__*/_jsx(CanvasBadge,{configured:setupDone,error:status===\"error\"?statusMessage:undefined})});}// Hidden in preview — CSS :has() hides the Framer wrapper\nreturn /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"style\",{children:`div:has(> .formsplugin-hide) { display: none; }`}),/*#__PURE__*/_jsx(\"div\",{ref:containerRef,className:\"formsplugin-hide\",style:containerStyle})]});}BrevoIntegrationControl.displayName=\"Brevo Integration\";BrevoIntegrationControl.defaultProps={apiConfig:DEFAULT_API_CONFIG,fieldsConfig:DEFAULT_FIELDS_CONFIG,_meta:\"\",style:{}};addPropertyControls(BrevoIntegrationControl,{// ------------------------------------------------------------------\n// API Config\n// ------------------------------------------------------------------\napiConfig:{type:ControlType.Object,title:\"API Settings\",controls:{apiKey:{type:ControlType.String,title:\"API Key\",defaultValue:\"\",description:\"Your Brevo API key. [Get API Key](https://app.brevo.com/settings/keys/api)\",obscured:true},listId:{type:ControlType.String,title:\"List ID\",defaultValue:\"\",description:\"Brevo contact list ID to add subscribers to.\"},updateEnabled:{type:ControlType.Boolean,title:\"Update Existing\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Update existing contacts if email already exists.\"}}},// ------------------------------------------------------------------\n// Field Mappings\n// ------------------------------------------------------------------\nfieldsConfig:{type:ControlType.Object,title:\"Field Mappings\",controls:{mappings:{type:ControlType.Array,title:\"Mappings\",description:\"Map form field names to Brevo contact attributes. One mapping must target EMAIL.\",defaultValue:[{formFieldName:\"email\",brevoAttribute:\"EMAIL\"}],control:{type:ControlType.Object,controls:{formFieldName:{type:ControlType.String,title:\"Form Field\",defaultValue:\"\",description:\"The name attribute of your form field.\"},brevoAttribute:{type:ControlType.String,title:\"Brevo Attr\",defaultValue:\"\",description:\"Brevo attribute name (EMAIL, FIRSTNAME, etc). [Manage Attributes](https://my.brevo.com/lists/add-attributes)\"}}}}}},// ------------------------------------------------------------------\n// Hidden Meta\n// ------------------------------------------------------------------\n_meta:{type:ControlType.String,defaultValue:\"\",hidden(){return true;}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"BrevoIntegrationControl\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicHeight\":\"40\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"220\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BrevoIntegrationControl.map"],"mappings":"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"}