PageSourceSearch

https://uni.xyz/chunk-B7IPRDHL.js

js uni.xyz collected 2026-10-01 11:42:41 UTC 33,129 bytes, 15 lines download raw bytes

1import{a as te,b as ne,d as Ie,e as h,f as Le,g as ie,h as ae,j as Be,k as De,l as qe,n as je,o as Ne,p as We,q as Ue}from"./chunk-OXFBOSTI.js";import{v as $}from"./chunk-6ISGQGU2.js";import{b as Fe}from"./chunk-3BWI6KAN.js";import"./chunk-E35X2CZM.js";import{Kd as ze,Lc as Te,Md as Se,Qe as Ae,Td as Re,ce as He}from"./chunk-HIVZMOGT.js";import{b as we,e as xe}from"./chunk-UKNSY7J4.js";import{Ab as _e,Bb as C,Ea as A,Fb as z,Gb as S,Hb as R,Ia as c,Kb as Z,La as ve,Lb as Pe,Lc as G,Mb as d,Nb as I,O as le,Ob as U,Pb as Oe,Pc as ye,S as de,Sa as W,Tc as Ee,Uc as ke,X as j,Yb as V,aa as b,f as se,fa as pe,ga as he,gc as ee,ha as me,ia as ge,ka as fe,kb as F,lb as Ce,mb as _,nb as P,oa as N,pb as Me,qb as Y,r as ce,rb as K,sb as O,tb as o,ub as s,vb as m,ya as ue,zb as be}from"./chunk-L45A6KDO.js";import{a as q,b as re}from"./chunk-6MDQTQU3.js";var Q=class i{http=b(xe);cache$=null;list(){if(this.cache$)return this.cache$;let t=Re("/api/v2/testimonials/"),e=new we().set("page_size","500");return this.cache$=this.http.get(t,{params:e}).pipe(ce(n=>this.shuffle(n.results)),le({bufferSize:1,refCount:!1})),this.cache$}shuffle(t){let e=t.slice();for(let n=e.length-1;n>0;n--){let a=Math.floor(Math.random()*(n+1));[e[n],e[a]]=[e[a],e[n]]}return e}static \u0275fac=function(e){return new(e||i)};static \u0275prov=j({token:i,factory:i.\u0275fac,providedIn:"root"})};function Qe(i,t){if(i&1&&(o(0,"span",11),d(1),s()),i&2){let e=C();c(),I(e.testimonial.organization_name)}}function Je(i,t){if(i&1&&(o(0,"span",16),m(1,"ng-icon",17),d(2),s()),i&2){let e=C();Pe(e.badgeClass(e.testimonial.achievement)),c(2),U(" ",e.testimonial.achievement," ")}}function Xe(i,t){if(i&1&&(o(0,"a",14),m(1,"ng-icon",18),d(2),s()),i&2){let e=C();O("href","/competitions/"+e.testimonial.competition.slug,A)("title",e.testimonial.competition.title),c(2),U(" ",e.testimonial.competition.title," ")}}function Ye(i,t){if(i&1&&(o(0,"a",15),m(1,"ng-icon",19),d(2),s()),i&2){let e=C();O("href",e.testimonial.project_url,A)("title",e.testimonial.project.title),c(2),U(" ",e.testimonial.project.title," ")}}var Ke={Winner:"badge--gold","Runner-up":"badge--silver","Honorable Mention":"badge--bronze","People's Choice":"badge--indigo","Jury Mention":"badge--slate"},J=class i{testimonial;badgeClass(t){return Ke[t]??"badge--slate"}get popoverData(){let t=this.testimonial.user;return{id:t.id,username:t.username,first_name:t.first_name,last_name:t.last_name,avatar_url:t.avatar_url}}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=W({type:i,selectors:[["app-testimonial-card"]],inputs:{testimonial:"testimonial"},features:[V([Ee({phosphorBlueprintFill:Te,phosphorStarFill:ze,phosphorTrophyFill:Se})])],decls:18,vars:17,consts:[[1,"card"],["viewBox","0 0 32 32","aria-hidden","true","focusable","false",1,"quote-mark"],["d","M10.7 6.2c-4.3 2-6.7 5.4-6.7 9.5 0 3.6 2 5.8 4.9 5.8 2.4 0 4.4-1.9 4.4-4.2 0-2.1-1.4-3.7-3.4-3.9 0-2.4 1.5-4.4 4-5.6l-3.2-1.6zM22.1 6.2c-4.3 2-6.7 5.4-6.7 9.5 0 3.6 2 5.8 4.9 5.8 2.4 0 4.4-1.9 4.4-4.2 0-2.1-1.4-3.7-3.4-3.9 0-2.4 1.5-4.4 4-5.6l-3.2-1.6z"],[1,"quote"],["aria-hidden","true",1,"divider"],[1,"meta"],[1,"avatar-link",3,"href","uni-user-avatar-popover"],["avatarShape","circle",1,"avatar",3,"imageUrl","user","alt","size"],[1,"who"],[1,"name-link",3,"href","uni-user-avatar-popover"],[1,"name"],[1,"org"],[1,"tags"],[1,"badge",3,"class"],[1,"comp-chip",3,"href","title"],[1,"project-chip",3,"href","title"],[1,"badge"],["name","phosphorStarFill","size","12","aria-hidden","true",1,"badge-icon"],["name","phosphorTrophyFill","size","13","aria-hidden","true",1,"chip-icon"],["name","phosphorBlueprintFill","size","13","aria-hidden","true",1,"chip-icon"]],template:function(e,n){e&1&&(o(0,"article",0),me(),o(1,"svg",1),m(2,"path",2),s(),ge(),o(3,"blockquote",3),d(4),s(),m(5,"div",4),o(6,"footer",5)(7,"a",6),m(8,"uni-progressive-avatar",7),s(),o(9,"div",8)(10,"a",9)(11,"cite",10),d(12),s()(),_(13,Qe,2,1,"span",11),s()(),o(14,"div",12),_(15,Je,3,3,"span",13),_(16,Xe,3,3,"a",14),_(17,Ye,3,3,"a",15),s()()),e&2&&(F("aria-label","Testimonial by "+n.testimonial.user.first_name+", "+n.testimonial.achievement),c(4),I(n.testimonial.quote),c(3),O("href","/profile/"+n.testimonial.user.username,A)("uni-user-avatar-popover",n.popoverData),F("aria-label","View "+n.testimonial.user.first_name+" "+n.testimonial.user.last_name+" profile"),c(),O("imageUrl",n.testimonial.user.avatar_url)("user",n.testimonial.user)("alt",n.testimonial.user.first_name+" "+n.testimonial.user.last_name)("size",40),c(2),O("href","/profile/"+n.testimonial.user.username,A)("uni-user-avatar-popover",n.popoverData),c(2),Oe("",n.testimonial.user.first_name," ",n.testimonial.user.last_name),c(),P(n.testimonial.organization_name?13:-1),c(2),P(n.testimonial.achievement?15:-1),c(),P(n.testimonial.competition?16:-1),c(),P(n.testimonial.project?17:-1))},dependencies:[G,ke,Ae,Fe],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block;width:100%;font-family:var(--font-sans)}.card[_ngcontent-%COMP%]{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:var(--size-4);padding:var(--size-6);background:#ffffff8c;backdrop-filter:blur(14px) saturate(1.35);-webkit-backdrop-filter:blur(14px) saturate(1.35);border:1px solid rgba(255,255,255,.7);border-radius:var(--size-4);box-shadow:0 1px 2px #0f172a0a,0 8px 24px #0f172a0f,inset 0 1px #fff9;transition:background .28s ease,border-color .28s ease}[data-theme=dark][_nghost-%COMP%]   .card[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .card[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .card[_ngcontent-%COMP%]{background:#ffffff0a;border-color:#ffffff14;box-shadow:0 1px 2px #00000080,0 8px 24px #00000059,inset 0 1px #ffffff0f}.quote-mark[_ngcontent-%COMP%]{position:absolute;top:var(--size-2);left:var(--size-3);width:72px;height:72px;
1fill:var(--primary-500);opacity:.08;z-index:0;pointer-events:none}[data-theme=dark][_nghost-%COMP%]   .quote-mark[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .quote-mark[_ngcontent-%COMP%]{opacity:.14}.quote[_ngcontent-%COMP%]{position:relative;z-index:1;margin:0;padding-top:var(--size-4);font-family:var(--font-sans);font-size:13px;line-height:1.6;color:#0f172ab8;font-weight:var(--font-weight-normal);white-space:pre-wrap;word-break:break-word}[data-theme=dark][_nghost-%COMP%]   .quote[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .quote[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .quote[_ngcontent-%COMP%]{color:#ffffffad}.divider[_ngcontent-%COMP%]{height:1px;width:var(--size-12);background:#0f172a2e;margin:0}[data-theme=dark][_nghost-%COMP%]   .divider[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .divider[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .divider[_ngcontent-%COMP%]{background:#ffffff29}.meta[_ngcontent-%COMP%]{position:relative;z-index:1;display:flex;align-items:center;gap:var(--size-3)}.avatar-link[_ngcontent-%COMP%]{flex:0 0 40px;display:inline-block;width:40px;height:40px;border-radius:999px;line-height:0;text-decoration:none;transition:transform .18s ease}.avatar-link[_ngcontent-%COMP%]:hover{transform:scale(1.05)}.avatar-link[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--primary-500);outline-offset:2px}.avatar[_ngcontent-%COMP%]{display:inline-block;width:40px;height:40px}.name-link[_ngcontent-%COMP%]{text-decoration:none;color:inherit;transition:color .18s ease}.name-link[_ngcontent-%COMP%]:hover   .name[_ngcontent-%COMP%]{color:var(--primary-600)}.name-link[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--primary-500);outline-offset:2px;border-radius:2px}[data-theme=dark][_nghost-%COMP%]   .name-link[_ngcontent-%COMP%]:hover   .name[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .name-link[_ngcontent-%COMP%]:hover   .name[_ngcontent-%COMP%]{color:var(--primary-400)}.who[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0;line-height:1.25}.who[_ngcontent-%COMP%]   .name[_ngcontent-%COMP%]{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--neutral-900);font-style:normal;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.who[_ngcontent-%COMP%]   .org[_ngcontent-%COMP%]{font-size:var(--font-size-xs);color:var(--neutral-500);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;margin-top:2px}[data-theme=dark][_nghost-%COMP%]   .who[_ngcontent-%COMP%]   .name[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .who[_ngcontent-%COMP%]   .name[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .who[_ngcontent-%COMP%]   .name[_ngcontent-%COMP%]{color:var(--neutral-50)}[data-theme=dark][_nghost-%COMP%]   .who[_ngcontent-%COMP%]   .org[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .who[_ngcontent-%COMP%]   .org[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .who[_ngcontent-%COMP%]   .org[_ngcontent-%COMP%]{color:var(--neutral-400)}.tags[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap;gap:var(--size-2);margin-top:auto;padding-top:var(--size-2)}.badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;padding:4px 10px 4px 8px;font-size:var(--font-size-2xs);font-weight:var(--font-weight-semibold);letter-spacing:.05em;text-transform:uppercase;border-radius:999px;line-height:1;white-space:nowrap}.badge[_ngcontent-%COMP%]   .badge-icon[_ngcontent-%COMP%]{display:inline-flex;line-height:1;opacity:.9;color:currentColor}.badge[_ngcontent-%COMP%]   .badge-icon[_ngcontent-%COMP%]     svg{width:12px;height:12px}.badge--gold[_ngcontent-%COMP%]{background:#f59e0b26;color:#b45309}.badge--silver[_ngcontent-%COMP%]{background:#64748b26;color:#475569}.badge--bronze[_ngcontent-%COMP%]{background:#ea580c26;color:#c2410c}.badge--indigo[_ngcontent-%COMP%]{background:#6366f126;color:#4338ca}.badge--slate[_ngcontent-%COMP%]{background:#47556926;color:#334155}[data-theme=dark][_nghost-%COMP%]   .badge--gold[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .badge--gold[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .badge--gold[_ngcontent-%COMP%]{background:#f59e0b38;color:#fbbf24}[data-theme=dark][_nghost-%COMP%]   .badge--silver[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .badge--silver[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .badge--silver[_ngcontent-%COMP%]{background:#94a3b833;color:#cbd5e1}[data-theme=dark][_nghost-%COMP%]   .badge--bronze[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .badge--bronze[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .badge--bronze[_ngcontent-%COMP%]{background:#ea580c42;color:#fb923c}[data-theme=dark][_nghost-%COMP%]   .badge--indigo[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .badge--indigo[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .badge--indigo[_ngcontent-%COMP%]{background:#818cf838;color:#a5b4fc}[data-theme=dark][_nghost-%COMP%]   .badge--slate[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .badge--slate[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .badge--slate[_ngcontent-%COMP%]{background:#64748b42;color:#cbd5e1}.comp-chip[_ngcontent-%COMP%], .project-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;font-size:var(--font-size-2xs);font-weight:var(--font-weight-medium);padding:4px 10px;border-radius:999px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1;text-decoration:none;transition:background .18s ease,color .18s ease}.comp-chip[_ngcontent-%COMP%]{color:var(--neutral-700);background:#0f172a0f}.comp-chip[_ngcontent-%COMP%]:hover{background:rgba(var(--primary-rgb),.12);color:var(--primary-700)}.project-chip[_ngcontent-%COMP%]{color:var(--primary-700);background:rgba(var(--primary-rgb),.08)}.project-chip[_ngcontent-%COMP%]:hover{background:rgba(var(--primary-rgb),.18);color:var(--primary-800)}.chip-icon[_ngcontent-%COMP%]{display:inline-flex;line-height:1;opacity:.9;color:currentColor}.chip-icon[_ngcontent-%COMP%]     svg{width:13px;height:13px}[data-theme=dark][_nghost-%COMP%]   .comp-chip[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .comp-chip[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .comp-chip[_ngcontent-%COMP%]{color:var(--neutral-100);background:#ffffff14}[data-theme=dark][_nghost-%COMP%]   .project-chip[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .project-chip[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .project-chip[_ngcontent-%COMP%]{color:var(--primary-300);background:rgba(var(--primary-rgb),.18)}[data-theme=dark][_nghost-%COMP%]   .project-chip[_ngcontent-%COMP%]:hover, [data-theme=dark]   [_nghost-%COMP%]   .project-chip[_ngcontent-%COMP%]:hover, [data-theme=dark][_ngcontent-%COMP%]   .project-chip[_ngcontent-%COMP%]:hover{background:rgba(var(--primary-rgb),.28);color:var(--primary-200)}'],changeDetection:0})};var Ve={light:{waves:[new h("#ff99b3"),new h("#e8a3d1"),new h("#c79cff"),new h("#9fb0f2"),new h("#7fcbff")],dust:new h("#c7b5f2"),opacityScale:.55},dark:{waves:[new h("#00e5ff"),new h("#00c8ff"),new h("#00a3ff"),new h("#62b8ff"),new h("#a3d9ff")],dust:new h("#62d0ff"),opacityScale:1}},L=class i{renderer;scene;
1camera;canvasEl;clock=new We;rafId=0;running=!1;SAMPLES=240;SPAN=22;V_SPAN=11;MAX_AMP=.13;wavesGroup;waveLines=[];particles;particleBasePositions;particleAttr;particleMat;mouseNDC={x:0,y:0};mouseSmooth={x:0,y:0};resizeHandler=()=>this.onResize();visibilityHandler=()=>this.onVisibilityChange();pointerHandler=t=>this.onPointerMove(t);themeObserver;themeChangeCb;resizeObserver;init(t){this.canvasEl=t.canvas;let e=Ve[t.theme??"light"];this.renderer=new Ue({canvas:this.canvasEl,antialias:!0,alpha:!0,powerPreference:"high-performance"}),this.renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.renderer.setClearColor(0,0),this.scene=new Le,this.camera=new Ne(55,1,.1,100),this.camera.position.set(0,0,10),this.wavesGroup=new Ie,this.scene.add(this.wavesGroup);let n=60,a=[];for(let r=0;r<n;r++){let f=r/(n-1),w=-this.V_SPAN+f*this.V_SPAN*2,k=-8+f*10,u=Math.min(e.waves.length-1,Math.floor((1-Math.abs(f-.5)*2)*e.waves.length)),x=1-Math.abs(f-.5)*1.8,M=Math.max(.18,.5*Math.max(.15,x)),v=[{amp:.55+Math.random()*.25,freq:.18+Math.random()*.18,speed:(Math.random()-.5)*.8,phase:Math.random()*Math.PI*2},{amp:.18+Math.random()*.18,freq:.55+Math.random()*.35,speed:(Math.random()-.5)*1.1,phase:Math.random()*Math.PI*2},{amp:.06+Math.random()*.1,freq:1.2+Math.random()*.6,speed:(Math.random()-.5)*1.3,phase:Math.random()*Math.PI*2}],E=v.reduce((T,H)=>T+H.amp,0),B=this.MAX_AMP/E,X=v.map(T=>re(q({},T),{amp:T.amp*B}));a.push({yBase:w,z:k,harmonics:X,opacity:M,colorIdx:u})}let p=[0];a.forEach(r=>{p.forEach((f,w)=>{let k=new Float32Array(this.SAMPLES*3),u=new ae,x=new ie(k,3);x.setUsage(ne),u.setAttribute("position",x);let M=r.opacity,v=new je({transparent:!0,blending:te,depthWrite:!1,uniforms:{uColor:{value:(e.waves[r.colorIdx]??e.waves[0]).clone()},uOpacity:{value:M*e.opacityScale},uHalfSpan:{value:this.SPAN},uEdgeStart:{value:.55}},vertexShader:`
2            uniform float uHalfSpan;
3            uniform float uEdgeStart;
4            varying float vFade;
5            void main() {
6              float d = clamp(abs(position.x) / uHalfSpan, 0.0, 1.0);
7              vFade = 1.0 - smoothstep(uEdgeStart, 1.0, d);
8              gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
9            }`,fragmentShader:`
10            uniform vec3 uColor;
11            uniform float uOpacity;
12            varying float vFade;
13            void main() {
14              gl_FragColor = vec4(uColor, uOpacity * vFade);
15            }`}),E=new Be(u,v);this.wavesGroup.add(E),this.waveLines.push({positions:k,attr:x,mat:v,spec:r,yShift:f,baseOpacity:M})})});let l=500,g=new Float32Array(l*3);for(let r=0;r<l;r++)g[r*3+0]=(Math.random()-.5)*this.SPAN*2,g[r*3+1]=(Math.random()-.5)*this.V_SPAN*2,g[r*3+2]=(Math.random()-.5)*10;this.particleBasePositions=g.slice();let y=new ae;this.particleAttr=new ie(g,3),this.particleAttr.setUsage(ne),y.setAttribute("position",this.particleAttr),this.particleMat=new De({color:e.dust,size:.04,transparent:!0,opacity:.65,blending:te,depthWrite:!1}),this.particles=new qe(y,this.particleMat),this.scene.add(this.particles),this.onResize(),this.themeObserver=new MutationObserver(()=>{let r=document.documentElement.dataset.theme==="dark"?"dark":"light";this.setTheme(r),this.themeChangeCb?.(r)}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),typeof ResizeObserver<"u"&&this.canvasEl&&(this.resizeObserver=new ResizeObserver(()=>this.onResize()),this.resizeObserver.observe(this.canvasEl)),window.addEventListener("resize",this.resizeHandler),document.addEventListener("visibilitychange",this.visibilityHandler),window.addEventListener("pointermove",this.pointerHandler,{passive:!0}),this.start()}setTheme(t){let e=Ve[t];this.waveLines.forEach(({mat:n,spec:a,baseOpacity:p})=>{let l=e.waves[a.colorIdx]??e.waves[0];n.uniforms.uColor.value.copy(l),n.uniforms.uOpacity.value=p*e.opacityScale}),this.particleMat?.color.copy(e.dust)}onThemeChange(t){this.themeChangeCb=t}onPointerMove(t){let e=t.clientX/window.innerWidth*2-1,n=-(t.clientY/window.innerHeight*2-1);this.mouseNDC.x=e,this.mouseNDC.y=n}updateWaves(t){let e=this.SAMPLES,n=this.SPAN,a=this.mouseSmooth.x*n*.9,p=this.mouseSmooth.y*this.V_SPAN,l=5,g=.18;for(let y of this.waveLines){let{positions:r,attr:f,spec:w,yShift:k}=y;for(let u=0;u<e;u++){let x=u/(e-1),M=-n+x*(n*2),v=w.yBase+k;for(let D of w.harmonics)v+=Math.sin(M*D.freq+t*D.speed+D.phase)*D.amp;let E=M-a,B=w.yBase-p,X=E*E/(l*l)+B*B/(l*l*1.2),T=Math.exp(-X*2.2);v+=Math.sin(E*.6-t*1.2)*T*g;let H=u*3;r[H+0]=M,r[H+1]=v,r[H+2]=w.z}f.needsUpdate=!0}}updateParticles(t){if(!this.particleBasePositions||!this.particleAttr)return;let e=this.particleBasePositions,n=this.particleAttr.array,a=this.mouseSmooth.x*.18,p=this.mouseSmooth.y*.14;for(let l=0;l<n.length;l+=3){let g=e[l+0],y=e[l+1],r=e[l+2],f=Math.sin(t*.25+g*.15+r*.1);n[l+0]=g+f*.2+a*.4,n[l+1]=y+Math.cos(t*.2+y*.15)*.12+p*.35,n[l+2]=r}this.particleAttr.needsUpdate=!0}
15start(){if(this.running)return;this.running=!0;let t=()=>{if(!this.running)return;let e=this.clock.getElapsedTime();this.mouseSmooth.x+=(this.mouseNDC.x-this.mouseSmooth.x)*.08,this.mouseSmooth.y+=(this.mouseNDC.y-this.mouseSmooth.y)*.08,this.updateWaves(e),this.updateParticles(e),this.wavesGroup&&(this.wavesGroup.rotation.z=Math.sin(e*.08)*.02+this.mouseSmooth.x*.008),this.camera&&(this.camera.position.x+=(this.mouseSmooth.x*.25-this.camera.position.x)*.04,this.camera.position.y+=(this.mouseSmooth.y*.18-this.camera.position.y)*.04,this.camera.lookAt(0,0,-2)),this.renderer&&this.scene&&this.camera&&this.renderer.render(this.scene,this.camera),this.rafId=requestAnimationFrame(t)};this.rafId=requestAnimationFrame(t)}stop(){this.running=!1,typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(this.rafId)}onVisibilityChange(){document.visibilityState==="hidden"?this.stop():this.start()}onResize(){if(!this.renderer||!this.camera||!this.canvasEl)return;let t=this.canvasEl.getBoundingClientRect(),e=Math.max(1,Math.round(t.width)),n=Math.max(1,Math.round(t.height));this.renderer.setSize(e,n,!1),this.camera.aspect=e/n,this.camera.updateProjectionMatrix()}destroy(){this.stop(),window.removeEventListener("resize",this.resizeHandler),document.removeEventListener("visibilitychange",this.visibilityHandler),window.removeEventListener("pointermove",this.pointerHandler),this.themeObserver?.disconnect(),this.themeObserver=void 0,this.themeChangeCb=void 0,this.resizeObserver?.disconnect(),this.resizeObserver=void 0,this.scene?.traverse(t=>{t.geometry&&t.geometry.dispose();let e=t.material;Array.isArray(e)?e.forEach(n=>n.dispose()):e?.dispose()}),this.renderer?.dispose(),this.renderer=void 0,this.scene=void 0,this.camera=void 0,this.canvasEl=void 0,this.wavesGroup=void 0,this.waveLines=[],this.particles=void 0,this.particleBasePositions=void 0,this.particleAttr=void 0,this.particleMat=void 0}static \u0275fac=function(e){return new(e||i)};static \u0275prov=j({token:i,factory:i.\u0275fac,providedIn:"any"})};var Ze=["bgCanvas"],et=["heading"],tt=["chipsRef"],nt=["grid"],it=["cardWrap"];function at(i,t){i&1&&m(0,"canvas",6,2)}function ot(i,t){if(i&1){let e=be();o(0,"button",17),_e("click",function(){let a=pe(e).$implicit,p=C();return he(p.setFilter(a))}),o(1,"span",18),d(2),s()()}if(i&2){let e=t.$implicit,n=C();Z("active",n.activeFilter()===e),F("aria-selected",n.activeFilter()===e),c(2),I(e)}}function rt(i,t){i&1&&(o(0,"p",15),d(1,"Loading testimonials\u2026"),s())}function st(i,t){i&1&&(o(0,"p",15),d(1,"No testimonials match this filter."),s())}function ct(i,t){if(i&1&&(o(0,"div",19,4),m(2,"app-testimonial-card",20),s()),i&2){let e=t.$implicit;c(2),O("testimonial",e)}}function lt(i,t){if(i&1&&(o(0,"div",16,3),Y(2,ct,3,1,"div",19,Ce().trackById,!0),s()),i&2){let e=C();c(2),K(e.filtered())}}var Ge=class i{testimonialService=b(Q);three=b(L);platformId=b(ue);doc=b(fe);renderer=b(ve);destroy$=new se;schemaScript;intersection;bgCanvas;heading;chipsEl;gridEl;cardWraps;isBrowser=ye(this.platformId);filters=["All","Winner","Runner-up","Honorable Mention","People's Choice","Jury Mention"];testimonials=N([]);activeFilter=N("All");loading=N(!0);filtered=ee(()=>{let t=this.activeFilter(),e=this.testimonials();return t==="All"?e:e.filter(n=>n.achievement===t)});counts=ee(()=>{let t=this.testimonials();return{All:t.length,Winner:t.filter(e=>e.achievement==="Winner").length,"Runner-up":t.filter(e=>e.achievement==="Runner-up").length,"Honorable Mention":t.filter(e=>e.achievement==="Honorable Mention").length,"People's Choice":t.filter(e=>e.achievement==="People's Choice").length,"Jury Mention":t.filter(e=>e.achievement==="Jury Mention").length}});trackById=(t,e)=>e.id;ngOnInit(){this.testimonialService.list().pipe(de(this.destroy$)).subscribe({next:t=>{this.testimonials.set(t),this.loading.set(!1),this.injectSchema(t)},error:()=>this.loading.set(!1)})}ngAfterViewInit(){if(!this.isBrowser||this.prefersReducedMotion())return;this.bgCanvas&&this.three.init({canvas:this.bgCanvas.nativeElement,theme:this.currentTheme()});let t=new MutationObserver(()=>{});t.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),this.destroy$.subscribe(()=>t.disconnect());let e=$.timeline();e.from(this.heading.nativeElement,{opacity:0,y:24,duration:.8,ease:"power3.out"},.1),e.from(this.chipsEl.nativeElement,{opacity:0,y:12,duration:.5,ease:"power2.out"},.45),this.cardWraps?.changes.subscribe(()=>this.bindReveal()),queueMicrotask(()=>requestAnimationFrame(()=>this.bindReveal()))}bindReveal(){this.cardWraps&&(this.intersection?.disconnect(),this.intersection=new IntersectionObserver(t=>
15{t.forEach(e=>{if(e.isIntersecting){let n=e.target;$.fromTo(n,{opacity:1,y:16},{opacity:1,y:0,duration:.55,ease:"power3.out",clearProps:"transform"}),this.intersection.unobserve(n)}})},{threshold:.08,rootMargin:"0px 0px -40px 0px"}),this.cardWraps.forEach(t=>{let e=t.nativeElement;$.set(e,{opacity:1,y:16}),this.intersection.observe(e)}))}setFilter(t){this.activeFilter.set(t),this.isBrowser&&!this.prefersReducedMotion()&&queueMicrotask(()=>requestAnimationFrame(()=>this.bindReveal()))}currentTheme(){return document.documentElement.dataset.theme==="dark"?"dark":"light"}prefersReducedMotion(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}injectSchema(t){if(!t.length)return;let n={"@context":"https://schema.org","@graph":t.slice(0,50).map(p=>q({"@type":"Review",author:{"@type":"Person",name:`${p.user.first_name} ${p.user.last_name}`.trim()},reviewBody:p.quote},this.reviewedEvent(p)))},a=this.renderer.createElement("script");a.type="application/ld+json",a.text=He(n),this.renderer.appendChild(this.doc.head,a),this.schemaScript=a}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),this.intersection?.disconnect(),this.isBrowser&&this.three.destroy(),this.schemaScript&&(this.renderer.removeChild(this.doc.head,this.schemaScript),this.schemaScript=void 0)}reviewedEvent(t){let e=t.competition;if(!e?.published_at)return{};let n=`https://uni.xyz/competitions/${e.slug}`;return{itemReviewed:{"@type":"Event",name:e.title,url:n,startDate:e.published_at,eventAttendanceMode:"https://schema.org/OnlineEventAttendanceMode",location:{"@type":"VirtualLocation",url:n}}}}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=W({type:i,selectors:[["app-testimonials-page"]],viewQuery:function(e,n){if(e&1&&(z(Ze,5),z(et,7),z(tt,7),z(nt,5),z(it,5)),e&2){let a;S(a=R())&&(n.bgCanvas=a.first),S(a=R())&&(n.heading=a.first),S(a=R())&&(n.chipsEl=a.first),S(a=R())&&(n.gridEl=a.first),S(a=R())&&(n.cardWraps=a)}},features:[V([L])],decls:20,vars:4,consts:[["heading",""],["chipsRef",""],["bgCanvas",""],["grid",""],["cardWrap",""],[1,"wall"],["aria-hidden","true",1,"bg-canvas"],["aria-hidden","true",1,"grain"],[1,"chrome"],[1,"eyebrow"],[1,"display"],[1,"dot"],[1,"lead"],["role","tablist","aria-label","Filter testimonials by achievement",1,"chips"],["type","button","role","tab",1,"chip",3,"active"],[1,"loading"],[1,"grid"],["type","button","role","tab",1,"chip",3,"click"],[1,"chip-label"],[1,"grid-item"],[3,"testimonial"]],template:function(e,n){e&1&&(o(0,"section",5),_(1,at,2,0,"canvas",6),m(2,"div",7),o(3,"header",8)(4,"p",9,0),d(6,"\u2014 the uni community"),s(),o(7,"h1",10),d(8," Voices"),o(9,"span",11),d(10,"."),s()(),o(11,"p",12),d(12," Stories from designers, architects, and creators who took part in UNI competitions. "),s(),o(13,"div",13,1),Y(15,ot,3,4,"button",14,Me),s()(),_(17,rt,2,0,"p",15)(18,st,2,0,"p",15)(19,lt,4,0,"div",16),s()),e&2&&(Z("is-browser",n.isBrowser),c(),P(n.isBrowser?1:-1),c(14),K(n.filters),c(2),P(n.loading()?17:n.filtered().length===0?18:19))},dependencies:[G,J],styles:[`@charset "UTF-8";[_nghost-%COMP%]{display:block;width:100%;font-family:var(--font-sans);color:var(--neutral-900)}.wall[_ngcontent-%COMP%]{position:relative;min-height:calc(100vh - var(--size-13-5));padding:clamp(64px,10vh,120px) 0 var(--size-24);overflow:hidden;isolation:isolate;background:linear-gradient(180deg,#0f172a29,#0f172a05),radial-gradient(ellipse 80% 60% at 78% -10%,rgba(var(--primary-rgb),.18),transparent 70%),radial-gradient(ellipse 60% 50% at 8% 110%,rgba(var(--primary-rgb),.08),transparent 70%),var(--neutral-50)}[data-theme=dark][_nghost-%COMP%]   .wall[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .wall[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .wall[_ngcontent-%COMP%]{background:radial-gradient(ellipse 80% 60% at 78% -10%,rgba(var(--primary-rgb),.22),transparent 70%),radial-gradient(ellipse 60% 50% at 8% 110%,rgba(var(--primary-rgb),.1),transparent 70%),#0a0f1a}.bg-canvas[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:0;pointer-events:none;opacity:.6;display:block}.grain[_ngcontent-%COMP%]{position:absolute;inset:0;pointer-events:none;z-index:1;opacity:.04;mix-blend-mode:multiply;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)' opacity='1'/></svg>")}.chrome[_ngcontent-%COMP%]{position:relative;z-index:3;max-width:1120px;margin:0 auto;padding:0 clamp(var(--size-6),4vw,var(--size-12)) var(--size-16);text-align:left}.eyebrow[_ngcontent-%COMP%]{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);letter-spacing:.14em;text-transform:uppercase;color:var(--primary-600);margin:0 0 var(--size-5);display:inline-block}.display[_ngcontent-%COMP%]{font-size:clamp(72px,12vw,180px);font-weight:800;letter-spacing:-.04em;line-height:.88;margin:0 0 var(--size-6);color:var(--neutral-900)}.display[_ngcontent-%COMP%]   .dot[_ngcontent-%COMP%]{color:var(--primary-500);display:inline-block;transform:translateY(-.02em)}[data-theme=dark][_nghost-%COMP%]   .display[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .display[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .display[_ngcontent-%COMP%]{color:var(--neutral-0)}[data-theme=dark][_nghost-%COMP%]   .lead[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .lead[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .lead[_ngcontent-%COMP%]{color:var(--neutral-400)}[data-theme=dark][_nghost-%COMP%]   .loading[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .loading[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .loading[_ngcontent-%COMP%]{color:var(--neutral-400)}[data-theme=dark][_nghost-%COMP%]   .grain[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .grain[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .grain[_ngcontent-%COMP%]{mix-blend-mode:screen;opacity:.06}.lead[_ngcontent-%COMP%]{font-size:clamp(var(--font-size-base),1.4vw,var(--font-size-lg));line-height:1.55;color:var(--neutral-600);max-width:560px;margin:0 0 var(--size-10);font-weight:var(--font-weight-normal)}.chips[_ngcontent-%COMP%]{display:inline-flex;flex-wrap:wrap;gap:var(--size-2);padding:var(--size-1);background:var(--neutral-0);border:1px solid var(--neutral-200);border-radius:999px;box-shadow:0 1px 2px #0f172a0a}[data-theme=dark][_nghost-%COMP%]   .chips[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .chips[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .chips[_ngcontent-%COMP%]{background:#ffffff0a;border-color:#ffffff1a;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.chip[_ngcontent-%COMP%]{display:inline-flex;align-items:baseline;gap:var(--size-2);border:none;background:transparent;padding:var(--size-2) var(--size-4);border-radius:999px;font:inherit;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--neutral-700);cursor:pointer;transition:background .18s ease,color .18s ease}.chip-count[_ngcontent-%COMP%]{font-size:var(--font-size-2xs);font-weight:var(--font-weight-semibold);color:var(--neutral-500);font-variant-numeric:tabular-nums;padding:2px var(--size-2);border-radius:999px;background:var(--neutral-100);line-height:1}.chip[_ngcontent-%COMP%]:hover:not(.active){background:var(--neutral-100);color:var(--neutral-900)}.chip.active[_ngcontent-%COMP%]{background:var(--neutral-900);color:var(--neutral-0)}.chip.active[_ngcontent-%COMP%]   .chip-count[_ngcontent-%COMP%]{background:#ffffff26;color:var(--neutral-0)}.chip[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--primary-500);outline-offset:2px}[data-theme=dark][_nghost-%COMP%]   .chip[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .chip[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .chip[_ngcontent-%COMP%]{color:var(--neutral-300)}[data-theme=dark][_nghost-%COMP%]   .chip-count[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .chip-count[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .chip-count[_ngcontent-%COMP%]{background:#ffffff14;color:var(--neutral-400)}[data-theme=dark][_nghost-%COMP%]   .chip[_ngcontent-%COMP%]:hover:not(.active), [data-theme=dark]   [_nghost-%COMP%]   .chip[_ngcontent-%COMP%]:hover:not(.active), [data-theme=dark][_ngcontent-%COMP%]   .chip[_ngcontent-%COMP%]:hover:not(.active){background:#ffffff14;color:var(--neutral-0)}[data-theme=dark][_nghost-%COMP%]   .chip.active[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .chip.active[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .chip.active[_ngcontent-%COMP%]{background:var(--primary-500);color:var(--neutral-0)}[data-theme=dark][_nghost-%COMP%]   .chip.active[_ngcontent-%COMP%]   .chip-count[_ngcontent-%COMP%], [data-theme=dark]   [_nghost-%COMP%]   .chip.active[_ngcontent-%COMP%]   .chip-count[_ngcontent-%COMP%], [data-theme=dark][_ngcontent-%COMP%]   .chip.active[_ngcontent-%COMP%]   .chip-count[_ngcontent-%COMP%]{background:#ffffff2e;color:var(--neutral-0)}.loading[_ngcontent-%COMP%]{position:relative;z-index:2;text-align:center;padding:var(--size-20) var(--size-6);color:var(--neutral-500);font-size:var(--font-size-sm)}.grid[_ngcontent-%COMP%]{position:relative;z-index:2;max-width:1120px;margin:0 auto;padding:0 clamp(var(--size-6),4vw,var(--size-12));display:block;column-count:4;column-gap:var(--size-5);column-fill:balance}.grid-item[_ngcontent-%COMP%]{break-inside:avoid;page-break-inside:avoid;-webkit-column-break-inside:avoid;margin-bottom:var(--size-6);display:block}.grid-item[_ngcontent-%COMP%]     app-testimonial-card{display:block;width:100%}@media (max-width: 1280px){.grid[_ngcontent-%COMP%]{column-count:3}}@media (max-width: 1024px){.grid[_ngcontent-%COMP%]{column-count:2;column-gap:var(--size-5)}.grid-item[_ngcontent-%COMP%]{margin-bottom:var(--size-5)}}@media (max-width: 640px){.grid[_ngcontent-%COMP%]{column-count:1}.chrome[_ngcontent-%COMP%]{padding-bottom:var(--size-10)}}@media (prefers-reduced-motion: reduce){.grid-item[_ngcontent-%COMP%]{opacity:1!important;transform:none!important}.bg-canvas[_ngcontent-%COMP%]{display:none}}`],changeDetection:0})};export{Ge as TestimonialsComponent};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.