{"version":3,"file":"HTMLRenderer.pBfZfmFu.mjs","names":["React.useRef","React.useMemo","React.useState","React.useLayoutEffect","React.useEffect","__esmMin","le","init_ssg_sandbox_shims","_e","de","pe","p","c","init_jsx_runtime","init_npm_react_18_3_1","ce","window","init_framer_BWFVvmND","addPropertyControls","RenderTarget","ControlType","impliesClose","openTag","BLOCK_TAGS","newTag","tokenizeHtml","tokens","i","n","html","end","stop","m","k","inQuote","rawTag","nameMatch","tag","selfClosing","RAWTEXT_TAGS","closeRe","rest","cm","next","processHtml","input","stack","out","t","VOID_TAGS","idx","TextSlots","props","h1Ref","h2Ref","h3Ref","h4Ref","h5Ref","h6Ref","pRef","contentRef","processedHtml","mounted","setMounted","useIsomorphicLayoutEffect","container","applyPreset","slotIsStyled","info","selector","el","prop","value","extractSlotInfo","paragraphInfo","a","lower","h1","h2","h3","h4","h5","h6","paragraph","isCanvas","flexStyle","gap","style","Placeholder","findLeafTextElement","root","toCamelCase","char","extractInlineStyle","styleDecl","leaf","inlineStyle","cssName","init_HTMLRenderer"],"sources":["https:/framerusercontent.com/modules/ahnDZVUZB9M7zro4gtSf/Zal8qtaFkxleysbaRjeQ/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\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./HTMLRenderer.map"],"mappings":"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"}