{"version":3,"file":"StructuredData.DbJlFGuG.mjs","names":["Framer.useRouter","__esmMin","init_jsx_runtime","c","addPropertyControls","useRouter","init_framer_CaDWdxiz","RenderTarget","ControlType","youTubeId","url","match","isoDuration","text","part","re","h","m","sec","titleCase","segment","usePageLocation","router","useFramerRouter","origin","FALLBACK_ORIGIN","path","parents","routes","routeId","route","vars","key","known","r","segments","i","parentPath","name","props","base","buildGraph","description","abs","p","orgId","imageUrl","image","graph","page","schemaType","videoId","datePublished","category","showBreadcrumbs","items","StructuredData","json","init_StructuredData"],"sources":["https:/framerusercontent.com/modules/6bKcBBRPPThBEKn8ekSQ/FXQTO99OwIuknsyFB9r9/StructuredData.js"],"sourcesContent":["// Page-level structured data (JSON-LD): WebPage / AboutPage / ContactPage /\n// CollectionPage / Article, plus a BreadcrumbList.\n//\n// Dynamic by default:\n// - URL and domain come from Framer's router (current route + CMS slug, canonical domain).\n// - Breadcrumbs are derived from the URL: every parent path that is a real page\n//   becomes a crumb (e.g. Home > Newsroom > article).\n// - On CMS templates, bind Name / Description / Image / Published / Category to CMS fields.\n//   Newsroom items with a YouTube link (Video) output VideoObject instead of Article.\n//   On product pages it sits inside a 1-item Products collection list, bound the same way.\n// Path / Slug / Section are only fallbacks for when the router isn't available.\n//\n// Organization + WebSite come from the Site Schema component in the global layout\n// template; these entities reference them by @id.\nimport{jsx as _jsx}from\"react/jsx-runtime\";import*as Framer from\"framer\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";// Used only if Framer's router isn't available.\nconst FALLBACK_ORIGIN=\"https://www.revealtech.ai\";// Framer's runtime router (not in the public typings). Falls back to null.\nconst useFramerRouter=Framer.useRouter??(()=>null);function youTubeId(url){if(!url)return null;const match=String(url).match(/(?:youtube\\.com\\/(?:watch\\?(?:.*&)?v=|embed\\/|shorts\\/|live\\/)|youtu\\.be\\/)([A-Za-z0-9_-]{11})/);return match?match[1]:null;}// \"58min\", \"1h 3min\", \"45 sec\" -> ISO 8601 duration (\"PT58M\", \"PT1H3M\"). Empty if zero/unknown.\nfunction isoDuration(text){if(!text)return undefined;const part=re=>Number((text.match(re)||[])[1]||0);const h=part(/(\\d+)\\s*h/i);const m=part(/(\\d+)\\s*m(?!s)/i);const sec=part(/(\\d+)\\s*s/i);if(!h&&!m&&!sec)return undefined;return`PT${h?h+\"H\":\"\"}${m?m+\"M\":\"\"}${sec?sec+\"S\":\"\"}`;}function titleCase(segment){return decodeURIComponent(segment).replace(/[-_]+/g,\" \").replace(/\\b\\w/g,c=>c.toUpperCase());}// Resolves origin, current path and parent crumbs from Framer's router,\n// falling back to the Path / Slug / Section props.\nfunction usePageLocation(props){const router=useFramerRouter();const origin=String(router?.siteCanonicalURL||FALLBACK_ORIGIN).replace(/\\/+$/,\"\");let path;let parents;const routes=router?.routes;const routeId=router?.currentRouteId;const route=routeId?router?.getRoute?.(routeId)??routes?.[routeId]:undefined;if(route?.path){const vars=router?.currentPathVariables??{};path=String(route.path).replace(/:([A-Za-z0-9_-]+)/g,(m,key)=>vars[key]!=null?String(vars[key]):m);if(/:[A-Za-z]/.test(path))path=undefined// unresolved slug\n;if(path&&routes){const known=new Set(Object.values(routes).map(r=>r?.path).filter(Boolean));const segments=path.split(\"/\").filter(Boolean);parents=[];for(let i=1;i<segments.length;i++){const parentPath=\"/\"+segments.slice(0,i).join(\"/\");if(!known.has(parentPath))continue;const name=props.sectionName&&(props.sectionPath||\"\")===parentPath?props.sectionName:titleCase(segments[i-1]);parents.push({name,path:parentPath});}}}if(!path){const base=(props.path||\"/\").replace(/\\/+$/,\"\");path=props.slug?`${base}/${props.slug}`:base||\"/\";}if(!parents){parents=props.sectionName?[{name:props.sectionName,path:props.sectionPath||\"/\"}]:[];}return{origin,path,parents};}function buildGraph(props,origin,path,parents){const{schemaType,image,datePublished,showBreadcrumbs}=props;const name=(props.name||\"\").trim();const description=(props.description||\"\").trim();const abs=p=>`${origin}${p.startsWith(\"/\")?\"\":\"/\"}${p}`;const url=abs(path===\"/\"?\"/\":path);const orgId=`${origin}/#organization`;const imageUrl=image?.src?image.src.split(\"?\")[0]:undefined;const graph=[];const page={\"@type\":schemaType===\"Article\"?\"WebPage\":schemaType,\"@id\":`${url}#webpage`,url,name,description:description||undefined,isPartOf:{\"@id\":`${origin}/#website`},publisher:{\"@id\":orgId},primaryImageOfPage:imageUrl?{\"@type\":\"ImageObject\",url:imageUrl}:undefined};graph.push(page);const videoId=youTubeId(props.video);if(schemaType===\"Article\"&&videoId){// Video episode (Goat Rodeo, BattleLab): the embedded YouTube video is the main content\npage.mainEntity={\"@id\":`${url}#video`};graph.push({\"@type\":\"VideoObject\",\"@id\":`${url}#video`,name,description:description||name,thumbnailUrl:[`https://i.ytimg.com/vi/${videoId}/maxresdefault.jpg`,`https://i.ytimg.com/vi/${videoId}/hqdefault.jpg`],uploadDate:datePublished||undefined,duration:isoDuration(props.duration),embedUrl:`https://www.youtube.com/embed/${videoId}`,url,genre:(props.category||\"\").trim()||undefined,publisher:{\"@id\":orgId}});}else if(schemaType===\"Article\"){// CMS category drives the type: \"News\" items are NewsArticles\nconst category=(props.category||\"\").trim();graph.push({\"@type\":/^news$/i.test(category)?\"NewsArticle\":\"Article\",\"@id\":`${url}#article`,headline:name,description:description||undefined,image:imageUrl?[imageUrl]:undefined,datePublished:datePublished||undefined,dateModified:datePublished||undefined,articleSection:category||undefined,author:{\"@id\":orgId},publisher:{\"@id\":orgId},mainEntityOfPage:{\"@id\":`${url}#webpage`}});}if(showBreadcrumbs&&path!==\"/\"){const items=[{name:\"Home\",path:\"/\"},...parents,{name,path}];page.breadcrumb={\"@id\":`${url}#breadcrumb`};graph.push({\"@type\":\"BreadcrumbList\",\"@id\":`${url}#breadcrumb`,itemListElement:items.map((c,i)=>({\"@type\":\"ListItem\",position:i+1,name:c.name,item:abs(c.path)}))});}return{\"@context\":\"https://schema.org\",\"@graph\":graph};}/**\n * Structured Data\n *\n * @framerIntrinsicWidth 1\n * @framerIntrinsicHeight 1\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export default function StructuredData(props){const{origin,path,parents}=usePageLocation(props);if(RenderTarget.current()===RenderTarget.canvas){return /*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\",width:\"100%\",height:\"100%\"}});}const json=JSON.stringify(buildGraph(props,origin,path,parents)).replace(/</g,\"\\\\u003c\");return /*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\",width:0,height:0},children:/*#__PURE__*/_jsx(\"script\",{type:\"application/ld+json\",dangerouslySetInnerHTML:{__html:json}})});}addPropertyControls(StructuredData,{schemaType:{type:ControlType.Enum,title:\"Type\",options:[\"WebPage\",\"AboutPage\",\"ContactPage\",\"CollectionPage\",\"Article\"],defaultValue:\"WebPage\"},name:{type:ControlType.String,title:\"Name\",description:\"Page name or article headline. Bind to a CMS field where possible.\",defaultValue:\"Page name\"},description:{type:ControlType.String,title:\"Description\",displayTextArea:true,defaultValue:\"\"},image:{type:ControlType.ResponsiveImage,title:\"Image\"},datePublished:{type:ControlType.Date,title:\"Published\",optional:true,hidden:props=>props.schemaType!==\"Article\"},category:{type:ControlType.String,title:\"Category\",description:'Article category (bind to the CMS category). \"News\" → NewsArticle.',defaultValue:\"\",hidden:props=>props.schemaType!==\"Article\"},video:{type:ControlType.Link,title:\"Video\",description:\"YouTube link (bind to the CMS link). When set, outputs VideoObject instead of Article.\",hidden:props=>props.schemaType!==\"Article\"},duration:{type:ControlType.String,title:\"Duration\",description:\"e.g. 58min or 1h 3min (bind to the CMS Read Time).\",defaultValue:\"\",hidden:props=>props.schemaType!==\"Article\"},showBreadcrumbs:{type:ControlType.Boolean,title:\"Breadcrumbs\",defaultValue:true},path:{type:ControlType.String,title:\"Fallback Path\",description:\"Only used if the URL can't be read from the router.\",defaultValue:\"/\"},slug:{type:ControlType.String,title:\"Fallback Slug\",defaultValue:\"\"},sectionName:{type:ControlType.String,title:\"Section Name\",description:\"Optional label for the parent crumb (default: from the URL).\",defaultValue:\"\",hidden:props=>!props.showBreadcrumbs},sectionPath:{type:ControlType.String,title:\"Section Path\",defaultValue:\"\",hidden:props=>!props.showBreadcrumbs||!props.sectionName}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"StructuredData\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"fixed\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"1\",\"framerIntrinsicWidth\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./StructuredData.map"],"mappings":"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"}