{"version":3,"file":"StructuredData.Dkr4-BaN.mjs","names":["Framer.useRouter"],"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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"}