PageSourceSearch

https://www.tcfcanada.ai/assets/AdvantagesSection-BJ18B-0F.js

js tcfcanada.ai collected 2026-10-05 14:37:00 UTC 12,664 bytes, 98 lines download raw bytes

1import{r as n,j as a}from"./react-vendor-Celz-2fn.js";import{u as R,W as C,B as E,X as N,bf as A}from"./index-VzCPatgX.js";import{i as S,H,k as M,aT as W,a_ as $,j as D,C as _,X as B}from"./libs-vendor-CzM8KNR6.js";import"./vendor-S-J9ZazT.js";(function(){try{var r=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};r.SENTRY_RELEASE={id:"b49a520c0c446c72dc60d814870565ed522e908d"};var i=new r.Error().stack;i&&(r._sentryDebugIds=r._sentryDebugIds||{},r._sentryDebugIds[i]="e39b23da-0963-4be8-9563-fa0acd84e1eb",r._sentryDebugIdIdentifier="sentry-dbid-e39b23da-0963-4be8-9563-fa0acd84e1eb")}catch{}})();const o=[{id:"sets",icon:S},{id:"reading",icon:S},{id:"listening",icon:H},{id:"speaking",icon:M},{id:"writing",icon:W},{id:"mistakes",icon:$},{id:"evaluation",icon:D}],e=(r,i,s)=>`/images/showcase/${r}.${i}.${s}.webp`,k={sets:{zh:{light:e("sets","zh","light"),dark:e("sets","zh","dark")},en:{light:e("sets","en","light"),dark:e("sets","en","dark")},fr:{light:e("sets","fr","light"),dark:e("sets","fr","dark")}},reading:{zh:{light:e("reading","zh","light"),dark:e("reading","zh","dark")},en:{light:e("reading","en","light"),dark:e("reading","en","dark")},fr:{light:e("reading","fr","light"),dark:e("reading","fr","dark")}},listening:{zh:{light:e("listening","zh","light"),dark:e("listening","zh","dark")},en:{light:e("listening","en","light"),dark:e("listening","en","dark")},fr:{light:e("listening","fr","light"),dark:e("listening","fr","dark")}},speaking:{zh:{light:e("speaking","zh","light"),dark:e("speaking","zh","dark")},en:{light:e("speaking","en","light"),dark:e("speaking","en","dark")},fr:{light:e("speaking","fr","light"),dark:e("speaking","fr","dark")}},writing:{zh:{light:e("writing","zh","light"),dark:e("writing","zh","dark")},en:{light:e("writing","en","light"),dark:e("writing","en","dark")},fr:{light:e("writing","fr","light"),dark:e("writing","fr","dark")}},mistakes:{zh:{light:e("mistakes","zh","light"),dark:e("mistakes","zh","dark")},en:{light:e("mistakes","en","light"),dark:e("mistakes","en","dark")},fr:{light:e("mistakes","fr","light"),dark:e("mistakes","fr","dark")}},evaluation:{zh:{light:e("evaluation","zh","light"),dark:e("evaluation","zh","dark")},en:{light:e("evaluation","en","light"),dark:e("evaluation","en","dark")},fr:{light:e("evaluation","fr","light"),dark:e("evaluation","fr","dark")}}},F=({tab:r,lang:i,onImageClick:s})=>{const{theme:u}=A(),g=u==="dark"?"dark":"light",v=k[r]?.[i]?.[g]||k[r]?.[i]?.light||k[r]?.en?.[g]||k[r]?.en?.light;return a.jsx("div",{className:"showcase-image-frame",style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"flex-start"},children:a.jsx("div",{className:"showcase-image-soft",children:a.jsx("div",{className:"showcase-image-card",style:{position:"relative",width:"100%",background:"hsl(var(--card))",border:"1px solid hsl(var(--border))",borderRadius:"var(--radius-control)",overflow:"hidden",transition:"border-color 0.3s ease"},children:a.jsx("img",{src:v,alt:"",loading:"lazy",decoding:"async",onClick:()=>s?.(v),style:{display:"block",width:"100%",height:"auto",cursor:s?"zoom-in":"default",transition:"transform 0.5s ease"}})})})})},P=({src:r,onClose:i})=>(n.useEffect(()=>{const s=u=>{u.key==="Escape"&&i()};return document.addEventListener("keydown",s),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",s),document.body.style.overflow=""}},[i]),a.jsxs("div",{onClick:i,style:{position:"fixed",inset:0,zIndex:100,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, 0.88)",backdropFilter:"blur(4px)",padding:"5vh 5vw"},children:[a.jsx("button",{onClick:i,"aria-label":"Close",style:{position:"absolute",top:20,right:20,width:40,height:40,display:"flex",alignItems:"center",justifyContent:"center",background:"transparent",border:"none",color:"hsl(var(--primary-foreground))",cursor:"pointer",padding:0},children:a.jsx(B,{size:28,strokeWidth:1.5})}),a.jsx("img",{src:r,alt:"",onClick:s=>s.stopPropagation(),style:{maxWidth:"90vw",maxHeight:"85vh",width:"auto",height:"auto",objectFit:"contain",borderRadius:4,boxShadow:"0 24px 80px rgba(0,0,0,0.4)"}})]})),G=3e3,Y=()=>{const[r,i]=n.useState("sets"),[s,u]=n.useState(null),{t:g,language:v}=R(),T=v||"en",h=o.findIndex(t=>t.id===r),w=n.useRef(null),f=n.useRef(!1),m=n.useRef(null),y=n.useRef(()=>{}),x=n.useCallback(()=>{m.current&&clearInterval(m.current),m.current=setInterval(()=>{y.current()},G)},[]),p=n.useCallback(t=>{i(t),x()},[x]),j=n.useCallback(()=>{const t=(h+1)%o.length;p(o[t].id)},[h,p]),z=n.useCallback(()=>{const t=(h-1+o.length)%o.length;p(o[t].id)},[h,p]);n.useEffect(()=>{y.current=()=>{f.current||s||i(t=>{const d=(o.findIndex(c=>c.id===t)+1)%o.length;return o[d].id})}},[s]),n.useEffect(()=>(x(),()=>{m.current&&clearInterval(m.current)}),[x]);const b=n.useCallback(t=>{t.key==="ArrowRight"?(t.preventDefault(),j()):t.key==="ArrowLeft"&&(t.preventDefault(),z())},[j,z]);return n.useEffect(()=>{const t=w.current;if(!t)return;const l=()=>{f.current=!0},d=()=>{f.current=!1},c=()=>{f.current=!0},I=L=>{t.contains(L.relatedTarget)||(f.current=!1)};return t.addEventListener("keydown",b),t.addEventListener("mouseenter",l),t.addEventListener("mouseleave",d),t.addEventListener("focusin",c),t.addEventListener("focusout",I),t.setAttribute("tabIndex","-1"),()=>{t.removeEventListener("keydown",b),t.removeEventListener("mouseenter",l),t.removeEventListener("mouseleave",d),t.removeEventListener("focusin",c),t.removeEventListener("focusout",I)}}
1,[b]),a.jsxs(C,{ref:w,id:"avantages",padBottom:"clamp(28px, 3.5vw, 48px)",children:[a.jsx(E,{delay:.05,duration:.5,children:a.jsx(N,{title:g("advantages.title"),subtitle:g("advantages.subtitle"),headingMaxWidth:"none",className:"advantages-title"})}),a.jsx(E,{delay:.1,duration:.5,children:a.jsx("div",{className:"advantages-tabs",role:"tablist",children:o.map(t=>{const l=r===t.id;return a.jsx("button",{role:"tab","aria-selected":l,className:"adv-tab","data-state":l,onClick:()=>p(t.id),style:{flexShrink:0,display:"flex",alignItems:"center",padding:"7px 14px",fontSize:"var(--fs-caption)",fontWeight:600,lineHeight:1.35,color:l?"hsl(var(--foreground))":"hsl(var(--muted-foreground))",borderRadius:"var(--radius-control)",cursor:"pointer",transition:"color 0.2s ease, background 0.2s ease",whiteSpace:"nowrap"},onMouseEnter:d=>{l||(d.currentTarget.style.color="hsl(var(--foreground))")},onMouseLeave:d=>{l||(d.currentTarget.style.color="hsl(var(--muted-foreground))")},children:g(`advantages.${t.id}.label`)},t.id)})})}),a.jsx("div",{style:{overflow:"hidden"},children:a.jsx("div",{style:{display:"flex",transition:"transform 0.5s cubic-bezier(0.4, 0, 0.2, 1)",transform:`translateX(-${h*100}%)`},children:o.map(t=>{const l=t.icon;return a.jsx("div",{style:{flex:"0 0 100%",width:"100%"},children:a.jsxs("div",{className:"advantages-panel",children:[a.jsx("div",{className:"advantages-mockup",children:a.jsx(F,{tab:t.id,lang:T,onImageClick:u})}),a.jsxs("div",{className:"advantages-text",children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:14},children:[a.jsx("span",{"aria-hidden":"true",style:{width:30,height:30,flexShrink:0,display:"grid",placeItems:"center",borderRadius:8,background:"hsl(var(--primary) / 0.12)",color:"hsl(var(--primary))"},children:a.jsx(l,{size:16,strokeWidth:2.2})}),a.jsx("h3",{style:{fontFamily:"var(--font-sans)",fontWeight:800,fontSize:"var(--fs-title)",lineHeight:1.15,letterSpacing:"-0.02em",color:"hsl(var(--foreground))"},children:g(`advantages.${t.id}.title`)})]}),a.jsx("ul",{style:{display:"flex",flexDirection:"column",gap:16,listStyle:"none",padding:0,margin:0},children:[1,2,3].map(d=>a.jsxs("li",{style:{display:"flex",gap:12,fontSize:"var(--fs-body)",lineHeight:1.55,color:"hsl(var(--muted-foreground))"},children:[a.jsx("span",{style:{width:20,height:20,flexShrink:0,display:"grid",placeItems:"center",borderRadius:"50%",background:"hsl(var(--primary) / 0.12)",color:"hsl(var(--primary))",marginTop:2},children:a.jsx(_,{size:12,strokeWidth:3})}),a.jsx("span",{style:{color:"hsl(var(--muted-foreground))"},children:g(`advantages.${t.id}.p${d}`)})]},d))}),a.jsx("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:28},children:a.jsx("div",{style:{display:"flex",alignItems:"center",gap:4,marginLeft:10},children:o.map((d,c)=>a.jsx("button",{type:"button",className:"adv-dot",onClick:()=>p(d.id),"aria-label":`Go to feature ${c+1}`,style:{display:"flex",alignItems:"center",justifyContent:"center",width:22,height:22,borderRadius:"50%",border:"none",padding:0,cursor:"pointer",touchAction:"manipulation",transition:"background 0.2s ease"},children:a.jsx("span",{style:{width:c===h?9:7,height:c===h?9:7,borderRadius:"50%",background:c===h?"hsl(var(--primary))":"hsl(var(--border))",transition:"width 0.2s ease, height 0.2s ease, background 0.2s ease, transform 0.18s ease"}})},d.id))})})]})]})},t.id)})})}),s&&a.jsx(P,{src:s,onClose:()=>u(null)}),a.jsx("style",{children:`
2        .adv-dot:hover span, .adv-dot:focus-visible span { transform: scale(1.35); }
3
4        /* Segmented tab rail — Tailark ToggleGroup surfaces: one recessed
5           track, active item raised on the page surface. */
6        .advantages-tabs {
7          position: relative;
8          display: flex;
9          gap: 4px;
10          /* Hug the items (Tailark's ToggleGroup is w-fit) and center the rail:
11             a left-hugging rail under a centred section heading reads off-axis
12             (user feedback 2026-09-29). */
13          width: fit-content;
14          max-width: 100%;
15          margin-inline: auto;
16          margin-bottom: 32px;
17          overflow-x: auto;
18          padding: 4px;
19          background: hsl(var(--muted));
20          border-radius: calc(var(--radius-control) + 2px);
21        }
22        .advantages-tabs::-webkit-scrollbar { height: 4px; }
23        .advantages-tabs::-webkit-scrollbar-thumb { background: hsl(var(--border)); border-radius: 2px; }
24        .advantages-tabs {
25          mask-image: linear-gradient(to right, black 90%, transparent 100%);
26          -webkit-mask-image: linear-gradient(to right, black 90%, transparent 100%);
27        }
28        .adv-tab[data-state='true'] {
29          background: hsl(var(--background));
30          box-shadow: 0 1px 2px hsl(var(--foreground) / 0.08);
31        }
32        @media (min-width: 1024px) {
33          .advantages-tabs {
34            mask-image: none;
35            -webkit-mask-image: none;
36          }
37        }
38
39        /* Panel — overlapping composition (user feedback 2026-09-29: with
40           image left / text right as two separate columns the seam between
41           them was a dead strip while the eye was drawn to page centre).
42           Mockup and text card share ONE grid cell; the card rides the
43           screenshot's right edge, filling the seam with real content and
44           adding depth. */
45        .advantages-panel {
46          display: grid;
47          grid-template-columns: minmax(0, 1fr);
48          align-items: center;
49        }
50        .advantages-mockup {
51          grid-row: 1;
52          grid-column: 1;
53          /* 留出右侧 200px 叠放区:文字卡骑进截图右缘 ~200px */
54          width: calc(100% - 200px);
55          min-width: 0;
56        }
57        .advantages-text {
58          grid-row: 1;
59          grid-column: 1;
60          justify-self: end;
61          z-index: 1;
62          width: clamp(330px, 34vw, 430px);
63          background: hsl(var(--card));
64          border: 1px solid hsl(var(--border));
65          border-radius: var(--radius-surface);
66          padding: clamp(20px, 2.4vw, 30px);
67          box-shadow:
68            0 1px 2px hsl(var(--shadow-color) / 0.06),
69            0 18px 44px -14px hsl(var(--shadow-color) / 0.26);
70        }
71        .dark .advantages-text {
72          box-shadow:
73            0 0 0 1px hsl(var(--shadow-color) / 0.5),
74            0 18px 44px -14px hsl(0 0% 0% / 0.6);
75        }
76
77        /* Pass-through wrapper around the product shot. Its Tailark "soft"
78           slab fill (bg-muted/55 + 16px padding) was removed — the tinted
79           padding read as a gray outer frame around the screenshot. */
80        .showcase-image-soft {
81          width: 100%;
82        }
83        .showcase-image-card:hover {
84          border-color: hsl(var(--action) / 0.4);
85        }
86
87        @media (max-width: 800px) {
88          .advantages-mockup { width: 100%; }
89          .advantages-text {
90            grid-row: 2;
91            grid-column: 1;
92            justify-self: stretch;
93            width: auto;
94            margin-top: 18px;
95            padding: 18px;
96          }
97        }
98      `})]})};export{Y as default};

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.