{"version":3,"file":"HtmlRenderer.BP4eCDaC.mjs","names":["React.useRef","React.useMemo","React.useState","React.useLayoutEffect","React.useEffect"],"sources":["https:/framerusercontent.com/modules/jlE132RWkSpJKEYZ3UKX/4BwY5WTRZVR2U5T6rBG0/HtmlRenderer.js"],"sourcesContent":["// TextSlotsHtmlRenderer.tsx\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * useLayoutEffect on the client, useEffect on the server. Layout effects never\n * run on Framer's SSR pass (and React warns if you use them there), so we\n * degrade to useEffect on the server. On the client we keep layout timing so\n * the preset styling is applied BEFORE the first post-hydration paint.\n */const useIsomorphicLayoutEffect=typeof window!==\"undefined\"?React.useLayoutEffect:React.useEffect;/**\n * Framer validates the HTML injected via dangerouslySetInnerHTML at publish time\n * and rejects malformed markup (unclosed <p>, block elements inside <p>, a stray\n * </div>, …). Author-pasted HTML — legal/Impressum pages, rich-text exports — is\n * very often malformed, and the browser silently repairs it on the client while\n * Framer's SSR does not.\n *\n * `processHtml` is a small, dependency-free structural repair: it closes dangling\n * <p>/<li> before a new block, drops stray end tags, and auto-closes anything\n * left open at the end. It is pure and DOM-free, so it runs identically in the\n * editor and in SSR, and it is deterministic so hydration never mismatches.\n *\n * ALTERNATIVE CONSIDERED — parse5 (the real HTML5 parser) via\n *   import { parseFragment, serialize } from \"https://esm.sh/parse5@7\"\n *   const processHtml = (s: string) => serialize(parseFragment(s))\n * It gives spec-perfect recovery of even pathological markup (shattered tables,\n * SVG/foreign content, foster-parenting). REJECTED on bundle size: `parseFragment`\n * pulls in parse5's full parser + the `entities` decode tables — ~49 KB gzipped —\n * and it ships to and runs on the CLIENT (processHtml runs during render for\n * hydration), which is a poor trade for a site whose goal is SEO/performance.\n * The tiny repair below covers the malformations Framer actually rejects; revisit\n * parse5 only if you must paste genuinely broken tables and need bulletproof\n * recovery.\n *\n * This repairs STRUCTURE only; it does NOT sanitize — the `html` prop is trusted\n * (author-set in the editor, same trust level as Framer's own HTML Embed). For\n * untrusted input, sanitize at the data source before it reaches this component.\n */const VOID_TAGS=new Set([\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"]);const RAWTEXT_TAGS=new Set([\"script\",\"style\",\"textarea\",\"title\"]);const BLOCK_TAGS=new Set([\"address\",\"article\",\"aside\",\"blockquote\",\"details\",\"div\",\"dl\",\"dd\",\"dt\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hr\",\"main\",\"menu\",\"nav\",\"ol\",\"p\",\"pre\",\"section\",\"table\",\"ul\",\"li\"]);// Which currently-open tag gets implicitly closed when `newTag` opens.\nfunction impliesClose(openTag,newTag){if(openTag===\"p\"&&BLOCK_TAGS.has(newTag))return true;if(openTag===\"li\"&&newTag===\"li\")return true;if((openTag===\"dd\"||openTag===\"dt\")&&(newTag===\"dd\"||newTag===\"dt\"))return true;if(openTag===\"option\"&&(newTag===\"option\"||newTag===\"optgroup\"))return true;if((openTag===\"td\"||openTag===\"th\")&&(newTag===\"td\"||newTag===\"th\"||newTag===\"tr\"))return true;if(openTag===\"tr\"&&newTag===\"tr\")return true;return false;}function tokenizeHtml(html){const tokens=[];let i=0;const n=html.length;while(i<n){if(html[i]===\"<\"){if(html.startsWith(\"<!--\",i)){const end=html.indexOf(\"-->\",i+4);const stop=end===-1?n:end+3;tokens.push({type:\"raw\",value:html.slice(i,stop)});i=stop;}else if(html[i+1]===\"!\"||html[i+1]===\"?\"){const end=html.indexOf(\">\",i);const stop=end===-1?n:end+1;tokens.push({type:\"raw\",value:html.slice(i,stop)});i=stop;}else if(html[i+1]===\"/\"){const m=/^<\\/([a-zA-Z][a-zA-Z0-9:-]*)\\s*>/.exec(html.slice(i));if(m){tokens.push({type:\"end\",tag:m[1].toLowerCase()});i+=m[0].length;}else{tokens.push({type:\"text\",value:\"<\"});i++;}}else if(/[a-zA-Z]/.test(html[i+1]||\"\")){let k=i+1;let inQuote=null;while(k<n){const c=html[k];if(inQuote){if(c===inQuote)inQuote=null;k++;continue;}if(c==='\"'||c===\"'\"){inQuote=c;k++;continue;}if(c===\">\")break;k++;}const rawTag=html.slice(i,Math.min(k+1,n));const nameMatch=/^<([a-zA-Z][a-zA-Z0-9:-]*)/.exec(rawTag);const tag=nameMatch?nameMatch[1].toLowerCase():\"\";const selfClosing=/\\/\\s*>$/.test(rawTag);tokens.push({type:\"start\",tag,raw:rawTag,selfClosing});i=k+1;if(RAWTEXT_TAGS.has(tag)&&!selfClosing){const closeRe=new RegExp(\"</\"+tag+\"\\\\s*>\",\"i\");const rest=html.slice(i);const cm=closeRe.exec(rest);if(cm){tokens.push({type:\"raw\",value:rest.slice(0,cm.index)});tokens.push({type:\"end\",tag});i+=cm.index+cm[0].length;}else{tokens.push({type:\"raw\",value:rest});i=n;}}}else{tokens.push({type:\"text\",value:\"<\"});i++;}}else{const next=html.indexOf(\"<\",i);const stop=next===-1?n:next;tokens.push({type:\"text\",value:html.slice(i,stop)});i=stop;}}return tokens;}function processHtml(input){if(!input)return\"\";const stack=[];let out=\"\";for(const t of tokenizeHtml(input)){if(t.type===\"text\"||t.type===\"raw\"){out+=t.value;}else if(t.type===\"start\"){while(stack.length&&impliesClose(stack[stack.length-1],t.tag)){out+=`</${stack.pop()}>`;}out+=t.raw;if(!VOID_TAGS.has(t.tag)&&!t.selfClosing)stack.push(t.tag);}else{// end tag: close down to the nearest matching open element;\n// a stray end tag with no match is dropped.\nconst idx=stack.lastIndexOf(t.tag);if(idx===-1)continue;while(stack.length>idx)out+=`</${stack.pop()}>`;}}while(stack.length)out+=`</${stack.pop()}>`;return out;}/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function TextSlots(props){const{html=\"\",h1,h2,h3,h4,h5,h6,paragraph,gap=16,style}=props;// Off-screen slots we sample styling from (rendered on the client only).\nconst h1Ref=React.useRef(null);const h2Ref=React.useRef(null);const h3Ref=React.useRef(null);const h4Ref=React.useRef(null);const h5Ref=React.useRef(null);const h6Ref=React.useRef(null);const pRef=React.useRef(null);// The visible content container. Its innerHTML is the author's HTML, present\n// in the SSR output for crawlers and identical on server + client so\n// hydration never mismatches.\nconst contentRef=React.useRef(null);const processedHtml=React.useMemo(()=>processHtml(html),[html]);// Render the sampling slots only after mount. On the SSR pass `mounted` is\n// false, so the slots' sample text is NOT emitted into the crawlable HTML\n// (no hidden boilerplate for crawlers to index). Server and client-first\n// render both compute mounted=false, so hydration still matches.\nconst[mounted,setMounted]=React.useState(false);useIsomorphicLayoutEffect(()=>setMounted(true),[]);// Client-only enhancement. We do NOT rebuild the HTML into a React tree\n// (that loses images/tables/ids/etc.). Instead we keep the author markup and\n// layer the sampled preset styling onto it as a DOM side-effect. React does\n// not own these nodes (they came from dangerouslySetInnerHTML), so mutating\n// them causes no hydration warning.\nuseIsomorphicLayoutEffect(()=>{if(typeof window===\"undefined\")return;if(!mounted)return;const container=contentRef.current;if(!container)return;// Reset to pristine markup first so re-runs (e.g. a slot preset edited in\n// the canvas) can't accumulate stale classes / inline styles. React's\n// dangerouslySetInnerHTML value is unchanged here, so it won't fight us.\ncontainer.innerHTML=processedHtml;const applyPreset=(selector,info)=>{// Slot left empty in the editor → no styling info → leave this\n// section as pristine/unstyled author HTML (it was reset above and is\n// simply never touched). We never fall back to another slot's preset.\nif(!slotIsStyled(info))return;container.querySelectorAll(selector).forEach(el=>{if(info.className){el.classList.add(...info.className.split(/\\s+/).filter(Boolean));}if(info.dataStylesPreset){el.setAttribute(\"data-styles-preset\",info.dataStylesPreset);}if(info.inlineStyle){for(const[prop,value]of Object.entries(info.inlineStyle)){if(prop.startsWith(\"--\")){el.style.setProperty(prop,String(value));}else{el.style[prop]=String(value);}}}});};applyPreset(\"h1\",extractSlotInfo(h1Ref.current));applyPreset(\"h2\",extractSlotInfo(h2Ref.current));applyPreset(\"h3\",extractSlotInfo(h3Ref.current));applyPreset(\"h4\",extractSlotInfo(h4Ref.current));applyPreset(\"h5\",extractSlotInfo(h5Ref.current));applyPreset(\"h6\",extractSlotInfo(h6Ref.current));const paragraphInfo=extractSlotInfo(pRef.current);applyPreset(\"p\",paragraphInfo);applyPreset(\"li\",paragraphInfo);// Harden target=_blank links authored without a safe rel (preserve the\n// author's own rel tokens and casing; only append what's missing).\ncontainer.querySelectorAll('a[target=\"_blank\"]').forEach(a=>{const tokens=(a.getAttribute(\"rel\")||\"\").split(/\\s+/).filter(Boolean);const lower=tokens.map(t=>t.toLowerCase());for(const t of[\"noopener\",\"noreferrer\"]){if(!lower.includes(t))tokens.push(t);}if(tokens.length)a.setAttribute(\"rel\",tokens.join(\" \"));});},[mounted,processedHtml,h1,h2,h3,h4,h5,h6,paragraph]);// The \"Add styled text…\" hint is an editor affordance — only show it on the\n// Framer canvas so it never leaks into published HTML / to crawlers.\nconst isCanvas=RenderTarget.current()===RenderTarget.canvas;const flexStyle={display:\"flex\",flexDirection:\"column\",gap:`${gap}px`,width:\"100%\",height:\"100%\"};return /*#__PURE__*/_jsxs(\"div\",{style:{...style,position:\"relative\",width:\"100%\",height:\"100%\"},children:[mounted?/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",left:\"-9999px\",top:\"-9999px\",visibility:\"hidden\",pointerEvents:\"none\"},\"aria-hidden\":true,children:[/*#__PURE__*/_jsx(\"div\",{ref:h1Ref,children:h1}),/*#__PURE__*/_jsx(\"div\",{ref:h2Ref,children:h2}),/*#__PURE__*/_jsx(\"div\",{ref:h3Ref,children:h3}),/*#__PURE__*/_jsx(\"div\",{ref:h4Ref,children:h4}),/*#__PURE__*/_jsx(\"div\",{ref:h5Ref,children:h5}),/*#__PURE__*/_jsx(\"div\",{ref:h6Ref,children:h6}),/*#__PURE__*/_jsx(\"div\",{ref:pRef,children:paragraph})]}):null,html?/*#__PURE__*/_jsx(\"div\",{ref:contentRef,style:flexStyle,dangerouslySetInnerHTML:{__html:processedHtml}}):isCanvas?/*#__PURE__*/_jsx(\"div\",{style:flexStyle,children:/*#__PURE__*/_jsx(Placeholder,{})}):/*#__PURE__*/_jsx(\"div\",{style:flexStyle})]});}function Placeholder(){return /*#__PURE__*/_jsx(\"div\",{style:{padding:16,color:\"#999\",fontSize:14,fontFamily:\"sans-serif\"},children:\"Add styled text components to the slots and provide HTML to render.\"});}// --- Slot style extraction (client-only; called from the layout effect) ---\nfunction findLeafTextElement(root){if(!root)return null;// Match Framer text presets first, then fall back to semantic text tags, so\n// slots whose leaf renders as a styled <div> are still sampled.\nreturn root.querySelector(\"[data-styles-preset], h1, h2, h3, h4, h5, h6, p\");}function toCamelCase(prop){return prop.replace(/-([a-z])/g,(_,char)=>char.toUpperCase());}function extractInlineStyle(leaf){const styleDecl=leaf.style;const inlineStyle={};for(let i=0;i<styleDecl.length;i++){const cssName=styleDecl[i];const value=styleDecl.getPropertyValue(cssName);if(!value)continue;inlineStyle[cssName.startsWith(\"--\")?cssName:toCamelCase(cssName)]=value;}return inlineStyle;}// A slot only counts as \"set\" if it actually yields styling to apply. An empty\n// slot (no component assigned, or a leaf with no class/preset/inline style)\n// returns {} here, which makes applyPreset skip that section entirely.\nfunction slotIsStyled(info){return Boolean(info.className||info.dataStylesPreset||info.inlineStyle);}function extractSlotInfo(container){const leaf=findLeafTextElement(container);if(!leaf)return{};const info={className:leaf.className||undefined,dataStylesPreset:leaf.getAttribute(\"data-styles-preset\")||undefined};const inlineStyle=extractInlineStyle(leaf);if(Object.keys(inlineStyle).length>0)info.inlineStyle=inlineStyle;return info;}// --- Property controls ---\naddPropertyControls(TextSlots,{html:{type:ControlType.String,title:\"HTML\",displayTextArea:true,defaultValue:\"\"},h1:{type:ControlType.ComponentInstance,title:\"H1\"},h2:{type:ControlType.ComponentInstance,title:\"H2\"},h3:{type:ControlType.ComponentInstance,title:\"H3\"},h4:{type:ControlType.ComponentInstance,title:\"H4\"},h5:{type:ControlType.ComponentInstance,title:\"H5\"},h6:{type:ControlType.ComponentInstance,title:\"H6\"},paragraph:{type:ControlType.ComponentInstance,title:\"Paragraph\"},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:16,min:0,max:100,step:1,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextSlots\",\"slots\":[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"paragraph\"],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./HtmlRenderer.map"],"mappings":"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"}