{"version":3,"file":"KahfLabNotes.YvhpRA-R.mjs","names":["React.useState","React.useId","React.useRef","_Fragment","__esmMin","init_npm_react_18_3_1","init_ssg_sandbox_shims","window","ie","l","_e","p","init_jsx_runtime","de","addPropertyControls","RenderTarget","init_framer_CaDWdxiz","ControlType","KahfLabNotes","props","email","setEmail","state","setState","error","setError","trap","setTrap","id","inputRef","tone","font","heading","text","v","EMAIL","ok","endpoint","source","form","set","el","name","value","r","contactEmail","init_KahfLabNotes"],"sources":["https:/framerusercontent.com/modules/iteuWZhi5fAaLhtuvCcn/qDi0BIb1BsVs0bipBrxc/KahfLabNotes.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";// Lab Notes sign-up. Submits through a native Framer form on the same page: any form that\n// contains an input named \"Lab Notes Email\" (an optional \"Lab Notes Source\" input gets the page).\n// Saves to Airtable (Kahf Lab › Lab Notes) through /api/subscribe; the Framer form is a backup inbox. Light or dark; two columns when wide, stacked when narrow.\nconst EMAIL=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;const font='\"Season Mix-TRIAL Regular\", \"Season Mix-TRIAL\", Georgia, serif';/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */export default function KahfLabNotes(props){const{heading=\"One email a month.\",text=\"What we’re building, what we’re learning, and what’s next at Kahf Lab.\",tone=\"light\",source=\"\",endpoint=\"https://kahf-chat-api.vercel.app/api/subscribe\",contactEmail=\"nashid@kahflab.com\",style}=props;const[email,setEmail]=React.useState(\"\");const[state,setState]=React.useState(\"idle\");const[error,setError]=React.useState(\"\");const[trap,setTrap]=React.useState(\"\");const id=React.useId();const inputRef=React.useRef(null);const submit=async e=>{e.preventDefault();if(state===\"sending\")return;const v=email.trim();if(!EMAIL.test(v)){setError(\"Please enter your full email address, like name@example.com.\");inputRef.current?.focus();return;}setError(\"\");if(trap){setState(\"done\");return;}setState(\"sending\");if(RenderTarget.current()===RenderTarget.canvas){setState(\"done\");return;}let ok=false;// 1. Airtable (Lab Notes table) through the Kahf API.\nif(endpoint){try{const r=await fetch(endpoint,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({email:v,source:source||window.location.pathname})});if(r.ok)ok=true;}catch{}}// 2. The hidden native Framer form on the page, as a backup inbox.\ntry{const anchor=document.querySelector('input[name=\"Lab Notes Email\"]');const form=anchor?.closest(\"form\");if(!form)throw new Error(\"no form\");const set=(name,value)=>{const el=form.querySelector(`[name=\"${name}\"]`);if(!el)return;Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,\"value\")?.set?.call(el,value);el.dispatchEvent(new Event(\"input\",{bubbles:true}));el.dispatchEvent(new Event(\"change\",{bubbles:true}));};set(\"Lab Notes Email\",v);set(\"Lab Notes Source\",source||window.location.pathname);await new Promise(r=>setTimeout(r,60));if(typeof form.requestSubmit===\"function\")form.requestSubmit();else form.querySelector(\"button\")?.click();await new Promise(r=>setTimeout(r,700));ok=true;}catch{}setState(ok?\"done\":\"error\");};const dark=tone===\"dark\";return /*#__PURE__*/_jsxs(\"section\",{className:\"kln\"+(dark?\" d\":\"\"),style:style,\"aria-labelledby\":id+\"h\",children:[/*#__PURE__*/_jsx(\"style\",{children:`\n.kln{--ink:var(--token-b174ce2f-4d80-4bb3-9d2b-1a866289b707,#0B0B0B);--paper:var(--token-fd39b4d1-72e9-4885-a09a-811ebe46db2f,#F2F2F2);\n  --fg:var(--ink);--bg:var(--paper);--muted:color-mix(in srgb,var(--fg) 58%,transparent);--line:color-mix(in srgb,var(--fg) 22%,transparent);\n  container-type:inline-size;width:100%;color:var(--fg);font-family:${font};}\n.kln.d{--fg:var(--paper);--bg:var(--ink)}\n.kln *{box-sizing:border-box;margin:0;padding:0}\n.kln-in{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:48px;align-items:end}\n.kln-label{display:flex;align-items:center;gap:10px;font-size:15px;margin-bottom:20px}\n.kln-mark{display:inline-flex;gap:2px}.kln-mark i{width:7px;height:7px;background:currentColor}\n.kln-h{font-size:clamp(34px,5cqi,56px);line-height:1.02;letter-spacing:-.015em;font-weight:400}\n.kln-p{font-size:17px;line-height:1.45;color:var(--muted);margin-top:16px;max-width:440px}\n.kln-form{width:100%}\n.kln-fl{display:block;font-size:13px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-bottom:10px}\n.kln-row{display:flex;align-items:stretch;border-bottom:1px solid var(--line);transition:border-color .2s}\n.kln-row:focus-within{border-color:var(--fg)}\n.kln-row.err{border-color:#C2410C}\n.kln-input{flex:1;min-width:0;font:inherit;font-size:24px;line-height:1.2;color:var(--fg);background:transparent;border:0;outline:0;padding:14px 0}\n.kln-input::placeholder{color:color-mix(in srgb,var(--fg) 34%,transparent)}\n.kln-btn{font:inherit;font-size:16px;border:0;cursor:pointer;background:var(--fg);color:var(--bg);padding:0 22px;min-height:48px;margin:6px 0 8px 12px;display:inline-flex;align-items:center;gap:10px;white-space:nowrap}\n.kln-btn:focus-visible{outline:2px solid var(--fg);outline-offset:3px}\n.kln-btn[disabled]{opacity:.6;cursor:default}\n.kln-note{font-size:14px;line-height:1.45;color:var(--muted);margin-top:12px}\n.kln-err{font-size:14px;line-height:1.45;color:#C2410C;margin-top:12px}\n.kln.d .kln-err,.kln.d .kln-row.err{color:#FDBA74;border-color:#FDBA74}\n.kln-trap{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}\n.kln-done{display:flex;gap:16px;align-items:flex-start;padding:18px 0;border-bottom:1px solid var(--line)}\n.kln-done b{display:block;font-weight:400;font-size:24px;line-height:1.2}\n.kln-done span{display:block;font-size:15px;color:var(--muted);margin-top:6px;word-break:break-word}\n.kln-blocks{display:grid;grid-template-columns:repeat(3,10px);gap:3px;margin-top:6px;flex:none}\n.kln-blocks i{width:10px;height:10px;background:currentColor}\n.kln-dots{display:inline-flex;gap:3px}.kln-dots i{width:5px;height:5px;background:currentColor;opacity:.3}\n@media (prefers-reduced-motion:no-preference){\n  .kln-blocks i{animation:kln-in .5s cubic-bezier(.2,.9,.25,1.2) both}\n  .kln-blocks i:nth-child(2){animation-delay:.08s}.kln-blocks i:nth-child(3){animation-delay:.16s}\n  .kln-dots i{animation:kln-dot 1s infinite}.kln-dots i:nth-child(2){animation-delay:.15s}.kln-dots i:nth-child(3){animation-delay:.3s}\n}\n@keyframes kln-in{from{transform:translateY(-6px) scale(.6)}to{transform:none}}\n@keyframes kln-dot{50%{opacity:1}}\n@container (max-width:760px){.kln-in{grid-template-columns:1fr;gap:32px}.kln-input{font-size:20px}}\n@container (max-width:420px){.kln-row{flex-direction:column;border-bottom:0}.kln-input{border-bottom:1px solid var(--line)}.kln-row:focus-within .kln-input{border-color:var(--fg)}.kln-row.err .kln-input{border-color:#C2410C}.kln-btn{margin:14px 0 0;justify-content:center;width:100%}}\n`}),/*#__PURE__*/_jsxs(\"div\",{className:\"kln-in\",children:[/*#__PURE__*/_jsxs(\"div\",{children:[/*#__PURE__*/_jsxs(\"p\",{className:\"kln-label\",children:[/*#__PURE__*/_jsxs(\"span\",{className:\"kln-mark\",\"aria-hidden\":\"true\",children:[/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{})]}),\"Lab Notes\"]}),/*#__PURE__*/_jsx(\"h2\",{className:\"kln-h\",id:id+\"h\",children:heading}),/*#__PURE__*/_jsx(\"p\",{className:\"kln-p\",children:text})]}),/*#__PURE__*/_jsx(\"div\",{\"aria-live\":\"polite\",children:state===\"done\"?/*#__PURE__*/_jsxs(\"div\",{className:\"kln-done\",children:[/*#__PURE__*/_jsxs(\"span\",{className:\"kln-blocks\",\"aria-hidden\":\"true\",children:[/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{})]}),/*#__PURE__*/_jsxs(\"div\",{children:[/*#__PURE__*/_jsx(\"b\",{children:\"You’re on the list.\"}),/*#__PURE__*/_jsxs(\"span\",{children:[\"The next Lab Notes will go to \",email.trim(),\".\"]})]})]}):/*#__PURE__*/_jsxs(\"form\",{className:\"kln-form\",onSubmit:submit,noValidate:true,children:[/*#__PURE__*/_jsx(\"label\",{className:\"kln-fl\",htmlFor:id+\"e\",children:\"Your email\"}),/*#__PURE__*/_jsxs(\"div\",{className:\"kln-row\"+(error?\" err\":\"\"),children:[/*#__PURE__*/_jsx(\"input\",{ref:inputRef,id:id+\"e\",className:\"kln-input\",type:\"email\",name:\"email\",inputMode:\"email\",autoComplete:\"email\",enterKeyHint:\"send\",placeholder:\"name@example.com\",value:email,\"aria-invalid\":!!error,\"aria-describedby\":id+\"n\",onChange:e=>{setEmail(e.target.value);if(error)setError(\"\");if(state===\"error\")setState(\"idle\");}}),/*#__PURE__*/_jsx(\"button\",{className:\"kln-btn\",type:\"submit\",disabled:state===\"sending\",children:state===\"sending\"?/*#__PURE__*/_jsxs(_Fragment,{children:[\"Sending\",/*#__PURE__*/_jsxs(\"span\",{className:\"kln-dots\",\"aria-hidden\":\"true\",children:[/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{})]})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[\"Subscribe \",/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":\"true\",children:\"→\"})]})})]}),/*#__PURE__*/_jsx(\"input\",{className:\"kln-trap\",tabIndex:-1,autoComplete:\"off\",\"aria-hidden\":\"true\",value:trap,onChange:e=>setTrap(e.target.value)}),error?/*#__PURE__*/_jsx(\"p\",{className:\"kln-err\",id:id+\"n\",role:\"alert\",children:error}):state===\"error\"?/*#__PURE__*/_jsxs(\"p\",{className:\"kln-err\",id:id+\"n\",role:\"alert\",children:[\"That didn’t go through. Try again, or write to \",/*#__PURE__*/_jsx(\"a\",{href:`mailto:${contactEmail}?subject=Lab%20Notes`,style:{color:\"inherit\"},children:contactEmail}),\".\"]}):/*#__PURE__*/_jsx(\"p\",{className:\"kln-note\",id:id+\"n\",children:\"No spam. Leave any time.\"})]})})]})]});}addPropertyControls(KahfLabNotes,{heading:{type:ControlType.String,title:\"Heading\",defaultValue:\"One email a month.\"},text:{type:ControlType.String,title:\"Text\",displayTextArea:true,defaultValue:\"What we’re building, what we’re learning, and what’s next at Kahf Lab.\"},tone:{type:ControlType.Enum,title:\"Tone\",options:[\"light\",\"dark\"],optionTitles:[\"Light\",\"Dark\"],defaultValue:\"light\"},source:{type:ControlType.String,title:\"Source\",defaultValue:\"\",description:\"Label saved with each sign-up. Defaults to the page path.\"},endpoint:{type:ControlType.String,title:\"Signup API\",defaultValue:\"https://kahf-chat-api.vercel.app/api/subscribe\"},contactEmail:{type:ControlType.String,title:\"Fallback email\",defaultValue:\"nashid@kahflab.com\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"KahfLabNotes\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./KahfLabNotes.map"],"mappings":"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"}