{"version":3,"file":"TalentRiverLogoStrip.DVAtJs3b.mjs","names":["React.useMemo","Framer.useLocaleInfo"],"sources":["https:/framerusercontent.com/modules/57HXmfQcXfqHIshWGkZL/sDzYy6rqwI7MSClBDgvF/TalentRiverLogoStrip.js"],"sourcesContent":["// TalentRiver, trusted-by strip (drifting band, option 1b)\n//\n// Transcribed from handoff/logo-strip: same markup, same inline styles, same\n// per-logo heights. Three deliberate departures, all documented below.\n//\n// 1. The logo art is the project's own hosted files, not the PNGs in the\n//    handoff. Those were cut out of a screenshot of the live page and are\n//    low-resolution raster; the README says to swap them for the real thing\n//    before launch. The real files were already on framerusercontent, so this\n//    ships with them and there is nothing to swap.\n//\n// 2. All eleven logos are here, not seven. The README left two out because they\n//    were cut off mid-fade in the screenshot it was cropped from, and asked for\n//    their names: they are Knowit (\"ending in wit\") and Detechtiv (\"a detective\n//    figure plus DET\"). Both are live in the current ticker, along with needo\n//    and one mark this build cannot name (see UNKNOWN below). Dropping four\n//    real customers is not a call to make silently, so all eleven stay.\n//\n// 3. Logos are an Array control rather than baked markup, so the list can be\n//    edited without a code change. The code map below is the fallback, because\n//    Framer hands an untouched Array control back as [] and does not carry a\n//    plain URL into an Image slot when it populates rows from defaultValue.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import*as Framer from\"framer\";import{addPropertyControls,ControlType}from\"framer\";const useLocaleInfoSafe=Framer.useLocaleInfo??(()=>({activeLocale:null}));// Named only, never loaded. The site already serves Public Sans through\n// Framer's own font service, and a second @font-face set under the same family\n// name joins the same CSS font family and wins the cascade for every weight it\n// declares, re-cutting type across the whole page.\nconst FONT='\"Public Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif';// Order matches the strip that is live today, so nothing appears to move.\n//\n// The heights for Acigo, Humanit, Jurek, Safemind, Validio, Zerion and Sopra\n// Steria are the designer's, and are deliberately all different: they normalise\n// the wordmarks by cap height rather than by box, so the tall ones stop\n// shouting and the wide ones stop vanishing. Do not replace them with one\n// shared height. Knowit, Detechtiv, needo and the unnamed mark are not in the\n// handoff, so those four heights are this build's own estimate, picked to land\n// each mark near the ~17.5px visible height the designer's seven average.\nconst DEFAULT_LOGOS=[{image:\"https://framerusercontent.com/images/xk1Y9pdx9iJUQ2gEVYIuHUxFr14.png\",alt:\"Acigo\",height:20},{image:\"https://framerusercontent.com/images/HDLMV3aPS73Dyxyu9iJNN0e6n8.webp\",alt:\"Detechtiv\",height:19},{// UNKNOWN: a black stylised \"M\" with a floating dot, no wordmark on the\n// asset, so it cannot be named from the file. Kept because it is live\n// today. Fix the alt text once Tim confirms the company.\nimage:\"https://framerusercontent.com/images/cP5Ijw9oj2DvScunMvNRNwz4PZ4.png\",alt:\"Customer logo\",height:18},{image:\"https://framerusercontent.com/images/O8zPtu9mFhOgP5l2azDIRBmTMUM.webp\",alt:\"needo\",height:20},{image:\"https://framerusercontent.com/images/IRYVhrNbRE7lSvDIPsAGwqsba8.png\",alt:\"Knowit\",height:21},{image:\"https://framerusercontent.com/images/MFOKHTIYA9DU7kCx0E242dQyLLo.png\",alt:\"Humanit\",height:22},{image:\"https://framerusercontent.com/images/y7ala25lbtL2fDcQAjO9rltQgI.png\",alt:\"Jurek\",height:21},{image:\"https://framerusercontent.com/images/3Shzk4z5hteeJPBD1Exyt5Hk81U.webp\",alt:\"Safemind\",height:19},{image:\"https://framerusercontent.com/images/z07ika9nf8RUIjbKHAsjjUOH5s.png\",alt:\"Validio\",height:21},{image:\"https://framerusercontent.com/images/PdfaARCx5mjSFjQTVEdmlZ2XjvE.png\",alt:\"Zerion\",height:20},{image:\"https://framerusercontent.com/images/9Ut1e5zhkD23YFFcmrdfr9uP1PE.png\",alt:\"Sopra Steria\",height:17},{// Added 2026-09-07. The file is cropped to the mark with no padding,\n// so 18 here is 18px of visible wordmark, which is why it is lower\n// than most of the numbers above rather than higher.\nimage:\"https://framerusercontent.com/images/NiG72EpeVcpkVz5gzWDzU6Oc58.png\",alt:\"UrbanUrban\",height:18}];const STYLE_ID=\"tr-logostrip-css\";// Shipped whole, per the README. Two rules: the drift keyframe and one\n// breakpoint. The breakpoint is a CONTAINER query keyed to the wrapper's own\n// width, not the window's. Framer lays every breakpoint variant out side by\n// side inside one wide browser window, so a media query measures that window\n// and never fires inside a 390px phone frame. Do not convert it to @media.\nconst CSS=`\n@keyframes tr-logo-drift {\n  from { transform: translateX(0) }\n  to   { transform: translateX(-50%) }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  [data-logostrip] [data-track] { animation: none !important }\n}\n\n@container logostrip (max-width: 720px) {\n  [data-logostrip] [data-sec]      { padding: 24px 20px !important }\n  [data-logostrip] [data-band]     { flex-direction: column !important; align-items: stretch !important; height: auto !important; gap: 16px !important }\n  [data-logostrip] [data-label]    { padding: 0 20px !important; max-width: none !important; text-align: center !important }\n  [data-logostrip] [data-divider]  { display: none !important }\n  [data-logostrip] [data-track]    { animation-duration: var(--tr-drift-m, 30s) !important }\n  [data-logostrip] [data-viewport] { mask-image: linear-gradient(90deg, transparent 0, #000 32px, #000 calc(100% - 32px), transparent 100%) !important; -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 32px, #000 calc(100% - 32px), transparent 100%) !important }\n}\n`;/** An Image control hands back a string; a ResponsiveImage control an object. */function imageSrc(image){if(!image)return\"\";if(typeof image===\"string\")return image;return image.src||image.url||\"\";}function Run({logos,hidden}){return /*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":hidden?\"true\":undefined,style:{display:\"flex\",alignItems:\"center\",gap:72,padding:\"0 36px\"},children:logos.map((logo,i)=>/*#__PURE__*/_jsx(\"img\",{src:imageSrc(logo.image),alt:hidden?\"\":logo.alt||\"\",style:{height:logo.height||20,width:\"auto\",opacity:.66}},i))});}// One run has to be at least as wide as the viewport or the loop shows a gap\n// at the seam. A run is 36px of padding, then n marks at roughly 110px with a\n// 72px gap between them, so about 182n px; the widest viewport this component\n// gets is the 1280px section less its padding, the label and the divider,\n// which is around 940px. That puts the floor at six marks. Below six the\n// filtered list is repeated until it clears the floor. Eight and twelve are\n// both already past it and are left exactly as they are, which matters: a run\n// that is padded out to a longer list drifts further in the same 42s and so\n// visibly speeds up.\nconst MIN_RUN_LOGOS=6;/**\n * @framerIntrinsicWidth 1280\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n */export default function TalentRiverLogoStrip(props){const{locale=\"auto\",labelEn=\"Trusted by leading recruiters\",labelSv=\"Anlitas av ledande rekryterare\",showOnly=\"\",driftSeconds=42,driftSecondsMobile=30}=props;const{activeLocale}=useLocaleInfoSafe();// Both traps at once: [] for an untouched control, and a row whose Image\n// slot dropped its plain URL.\nconst rows=Array.isArray(props.logos)&&props.logos.length>0?props.logos:DEFAULT_LOGOS;const fromRows=rows.map((l,i)=>({alt:l?.alt??DEFAULT_LOGOS[i]?.alt??\"\",height:l?.height||DEFAULT_LOGOS[i]?.height||20,image:imageSrc(l?.image)||DEFAULT_LOGOS[i]?.image||\"\"}));// Framer baked this instance's logos array when it was placed, so a\n// twelfth entry added to DEFAULT_LOGOS would never reach it: the rows\n// above are all the instance knows about. Any logo the instance is\n// missing is appended from the defaults, matched on alt text. Twelve\n// items is not worth a memo, and a memo here would need the rows\n// serialised as its dependency to be correct.\n// Show only is a comma separated list of company names, matched against\n// each logo's alt text, both trimmed and lowercased, exact match. Same\n// string and same rules as TalentRiverCaseCards and CustomerVideoCarousel,\n// so the blocks that share a page filter together. Unknown names are\n// ignored rather than fatal: a typo in a property field must never blank a\n// section of a live page, so a list that matches nothing shows everything.\nconst only=React.useMemo(()=>String(showOnly||\"\").split(\",\").map(n=>n.trim().toLowerCase()).filter(Boolean),[showOnly]);const seen=new Set(fromRows.map(l=>(l.alt||\"\").trim().toLowerCase()));// The back-fill exists to rescue a logo the instance never baked, and it\n// is skipped while Show only is set: there it would re-append the very\n// logos the filter just took out. The filter runs after the merge as well,\n// so an instance that did bake all twelve is narrowed the same way.\nconst missing=only.length>0?[]:DEFAULT_LOGOS.filter(l=>l.image&&!seen.has(l.alt.trim().toLowerCase()));const merged=missing.length===0?fromRows:fromRows.concat(missing);const picked=only.length===0?merged:merged.filter(l=>only.indexOf((l.alt||\"\").trim().toLowerCase())!==-1);const kept=picked.length>0?picked:merged;// Repeating the list, not the <Run>, keeps the track exactly two identical\n// halves, so the -50% keyframe still lands seamlessly. No layout or\n// keyframe change.\nconst logos=React.useMemo(()=>{if(kept.length===0||kept.length>=MIN_RUN_LOGOS)return kept;const out=[];while(out.length<MIN_RUN_LOGOS)out.push(...kept);return out;},[kept.map(l=>l.alt).join(\"|\"),kept.length]);const sv=React.useMemo(()=>{if(locale!==\"auto\")return locale===\"sv\";const code=activeLocale?.code||activeLocale?.slug||(typeof document!==\"undefined\"?document.documentElement.lang:\"\");return String(code||\"\").slice(0,2).toLowerCase()===\"sv\";},[locale,activeLocale]);React.useEffect(()=>{if(typeof document===\"undefined\")return;if(document.getElementById(STYLE_ID))return;const el=document.createElement(\"style\");el.id=STYLE_ID;el.textContent=CSS;document.head.appendChild(el);},[]);const MASK=\"linear-gradient(90deg, transparent 0, #000 72px, #000 calc(100% - 72px), transparent 100%)\";return /*#__PURE__*/_jsx(\"div\",{\"data-logostrip\":\"true\",style:{width:\"100%\",// Spread, not a plain key: Framer's bundled CSSProperties\n// predates these two and rejects them with TS2353.\n...{containerType:\"inline-size\",containerName:\"logostrip\"},[\"--tr-drift-m\"]:`${driftSecondsMobile}s`},children:/*#__PURE__*/_jsx(\"section\",{\"data-sec\":\"true\",\"data-screen-label\":\"Trusted by\",style:{fontFamily:FONT,padding:40,maxWidth:1280,margin:\"0 auto\",boxSizing:\"border-box\"},children:/*#__PURE__*/_jsxs(\"div\",{\"data-band\":\"true\",style:{display:\"flex\",flexDirection:\"row\",alignItems:\"center\",height:104},children:[/*#__PURE__*/_jsx(\"span\",{\"data-label\":\"true\",style:{flexShrink:0,padding:\"0 28px 0 40px\",maxWidth:190,fontWeight:500,fontSize:12,lineHeight:\"18px\",color:\"rgb(115,118,129)\",...{textWrap:\"pretty\"}},children:sv?labelSv:labelEn}),/*#__PURE__*/_jsx(\"span\",{\"data-divider\":\"true\",style:{flexShrink:0,width:1,height:40,background:\"rgb(236,238,238)\"}}),/*#__PURE__*/_jsx(\"span\",{\"data-viewport\":\"true\",style:{flex:\"1 1 auto\",minWidth:0,overflow:\"hidden\",...{maskImage:MASK,WebkitMaskImage:MASK}},children:/*#__PURE__*/_jsxs(\"span\",{\"data-track\":\"true\",style:{display:\"flex\",width:\"max-content\",animation:`tr-logo-drift ${driftSeconds}s linear infinite`},children:[/*#__PURE__*/_jsx(Run,{logos:logos}),/*#__PURE__*/_jsx(Run,{logos:logos,hidden:true})]})})]})})});}addPropertyControls(TalentRiverLogoStrip,{locale:{type:ControlType.Enum,title:\"Language\",options:[\"auto\",\"en\",\"sv\"],optionTitles:[\"Auto (site language)\",\"English\",\"Svenska\"],defaultValue:\"auto\"},labelEn:{type:ControlType.String,title:\"Label\",defaultValue:\"Trusted by leading recruiters\"},labelSv:{type:ControlType.String,title:\"Label SV\",defaultValue:\"Anlitas av ledande rekryterare\",description:\"Written by Claude, not a native speaker. Worth a read.\"},logos:{type:ControlType.Array,title:\"Logos\",maxCount:20,defaultValue:DEFAULT_LOGOS,control:{type:ControlType.Object,controls:{image:{type:ControlType.Image,title:\"Logo\"},alt:{type:ControlType.String,title:\"Company\",defaultValue:\"\"},height:{type:ControlType.Number,title:\"Height\",min:10,max:40,step:1,defaultValue:20,description:\"Per logo, on purpose. Matches cap height rather than box, so no wordmark shouts.\"}}}},showOnly:{type:ControlType.String,title:\"Show only\",defaultValue:\"\",description:\"Comma separated list of company names: Acigo, Detechtiv, Customer logo, needo, Knowit, Humanit, Jurek, Safemind, Validio, Zerion, Sopra Steria, UrbanUrban. Matching ignores case, so needo works either way. Leave empty for all of them. Unknown names are ignored, and a list that matches nothing shows all of them.\"},driftSeconds:{type:ControlType.Number,title:\"Cycle\",min:10,max:120,step:1,defaultValue:42,description:\"Seconds for one full loop on desktop.\"},driftSecondsMobile:{type:ControlType.Number,title:\"Cycle mobile\",min:10,max:120,step:1,defaultValue:30,description:\"A narrow viewport needs a faster cycle to feel the same.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"TalentRiverLogoStrip\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"1280\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TalentRiverLogoStrip.map"],"mappings":"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"}