PageSourceSearch

https://www.ucan.vn/assets/EcosystemIntroModal-Vj-pgLw4.js

js ucan.vn collected 2026-09-24 13:37:35 UTC 6,103 bytes, 1 lines download raw bytes

1import{a8 as m,x as h,cQ as x,bd as u,j as e,t as c,k as g,at as p}from"./react-vendor-bcN6ZJx6.js";import{D as b,q as f,r as w,v as j,B as v,j as d}from"./index-C8TfN4cr.js";import"./ui-vendor-BA32w1ww.js";import"./supabase-vendor-DNBNrwrO.js";const N=[{id:"ucan-english",name:"Ucan English",url:"https://ucan.vn?utm_source=ecosystem-modal",description:"Nghe chép chính tả, shadowing, flashcards và luyện tập qua video thực tế.",icon:m,gradient:"from-emerald-400 to-teal-600",glow:"shadow-emerald-500/30",isMainApp:!0,ctaText:"Khám phá",stats:"16,900+ câu mẫu"},{id:"ucan-ielts",name:"Ucan IELTS",url:"https://ielts.ucan.vn?utm_source=ecosystem-modal",description:"Cambridge 9-20 đầy đủ — Reading, Listening, Speaking & Writing.",icon:h,gradient:"from-sky-400 to-indigo-600",glow:"shadow-sky-500/30",ctaText:"Luyện IELTS",stats:"144+ passages"},{id:"engdom-toeic",name:"Engdom TOEIC",url:"https://engdom.com?utm_source=ecosystem-modal",description:"Luyện thi TOEIC 4 kỹ năng L/R/S/W và thi thử full test.",icon:x,gradient:"from-amber-400 to-orange-600",glow:"shadow-amber-500/30",ctaText:"Luyện TOEIC",stats:"7 Part đầy đủ"},{id:"ucan-extension",name:"Tiện ích Chrome",url:"https://chromewebstore.google.com/detail/mjpdbcgmfpoglledhpjeohikijclpcag?utm_source=ecosystem-modal",description:"Tra từ điển mọi trang web. Trên YouTube: trích xuất phụ đề & luyện SHADOWING.",icon:u,gradient:"from-violet-400 to-purple-600",glow:"shadow-violet-500/30",isExtension:!0,ctaText:"Cài đặt"}],i={title:"Khám phá hệ sinh thái Ucan",subtitle:"Mua 1 Premium — Dùng tất cả ứng dụng",premiumHighlight:"Premium chia sẻ trên tất cả ứng dụng",premiumDetail:"Đăng ký một lần, trải nghiệm trên web, iOS và Chrome Extension",dismissText:"Đã hiểu",dontShowAgain:"Không hiển thị lại"};function y({app:t,index:n,onStayInApp:l}){const s=t.icon,a=d("group relative overflow-hidden rounded-2xl text-left isolate","bg-gradient-to-br",t.gradient,"shadow-lg hover:shadow-2xl",t.glow,"transition-all duration-300 ease-out","hover:-translate-y-1 active:scale-[0.98]","focus:outline-none focus-visible:ring-4 focus-visible:ring-white/50","animate-in fade-in-0 slide-in-from-bottom-4 fill-mode-both"),r={animationDelay:`${n*80}ms`},o=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"absolute inset-0 opacity-40 mix-blend-overlay bg-[radial-gradient(circle_at_top_right,white,transparent_55%)]"}),e.jsx("div",{className:"absolute -bottom-10 -left-8 w-36 h-36 rounded-full bg-white/15 blur-3xl"}),e.jsx("div",{className:"absolute -top-8 -right-8 w-32 h-32 rounded-full bg-white/10 blur-2xl"}),e.jsx(s,{size:100,weight:"fill",className:"absolute -bottom-4 -right-3 text-white/15 pointer-events-none transition-transform duration-500 group-hover:scale-110 group-hover:rotate-6"}),e.jsxs("div",{className:"relative flex flex-col gap-2 p-3.5 sm:p-4 text-white",children:[e.jsx("div",{className:"w-10 h-10 rounded-xl bg-white/25 backdrop-blur-sm flex items-center justify-center shrink-0 ring-1 ring-white/40 shadow-sm",children:e.jsx(s,{size:20,weight:"fill",className:"text-white"})}),e.jsx("h3",{className:"font-extrabold text-sm sm:text-base leading-tight drop-shadow-sm",children:t.name}),e.jsx("p",{className:"text-[11px] sm:text-xs text-white/85 leading-snug line-clamp-2",children:t.description}),e.jsxs("div",{className:"flex items-center justify-between gap-1 mt-0.5",children:[t.stats?e.jsx("span",{className:"text-[10px] font-bold bg-white/25 backdrop-blur-sm px-2 py-0.5 rounded-full ring-1 ring-white/40",children:t.stats}):e.jsx("span",{className:"text-[10px] font-bold bg-white/25 backdrop-blur-sm px-2 py-0.5 rounded-full ring-1 ring-white/40",children:"Chrome Web Store"}),e.jsxs("span",{className:"inline-flex items-center gap-0.5 text-[11px] font-semibold opacity-90 group-hover:opacity-100 group-hover:underline underline-offset-2",children:[t.ctaText,e.jsx(p,{size:11})]})]})]})]});return t.isMainApp&&l?e.jsx("button",{type:"button",onClick:l,className:d(a,"cursor-pointer w-full"),style:r,children:o}):e.jsx("a",{href:t.url,target:"_blank",rel:"noopener noreferrer",className:a,style:r,children:o})}function S({isOpen:t,onDismiss:n,onDismissPermanently:l}){return e.jsx(b,{open:t,onOpenChange:s=>{s||n()},children:e.jsxs(f,{className:"sm:max-w-xl p-0 overflow-hidden gap-0",hideCloseButton:!0,children:[e.jsxs("div",{className:"relative px-5 pt-5 pb-4 text-center",style:{background:"linear-gradient(135deg, oklch(0.65 0.20 160), oklch(0.72 0.14 245))"},children:[e.jsx("div",{className:"absolute top-2 left-4 h-16 w-16 rounded-full bg-white/10 blur-xl"}),e.jsx("div",{className:"absolute bottom-0 right-6 h-20 w-20 rounded-full bg-white/5 blur-2xl"}),e.jsxs(w,{className:"relative z-10",children:[e.jsxs(j,{className:"text-white text-lg sm:text-xl font-bold flex items-center justify-center gap-2",children:[e.jsx(c,{size:22,weight:"fill"}),i.title]}),e.jsx("p",{className:"text-white/90 text-xs sm:text-sm font-medium mt
1-1",children:i.subtitle})]})]}),e.jsx("div",{className:"px-4 sm:px-5 pt-4 pb-2",children:e.jsx("div",{className:"grid grid-cols-2 gap-3",children:N.map((s,a)=>e.jsx(y,{app:s,index:a,onStayInApp:s.isMainApp?n:void 0},s.id))})}),e.jsxs("div",{className:"mx-4 sm:mx-5 mt-2 mb-1 flex items-center gap-2 rounded-lg bg-amber-50 border border-amber-200 p-2.5 px-3",children:[e.jsx(c,{size:18,weight:"fill",className:"text-amber-500 flex-shrink-0"}),e.jsxs("div",{className:"text-left",children:[e.jsx("p",{className:"text-xs font-semibold text-amber-800",children:i.premiumHighlight}),e.jsx("p",{className:"text-[10px] text-amber-600",children:i.premiumDetail})]})]}),e.jsxs("div",{className:"px-4 sm:px-5 pt-3 pb-4 space-y-2",children:[e.jsxs(v,{className:"w-full h-11 text-sm font-semibold",onClick:n,children:[e.jsx(g,{size:18,weight:"fill"}),i.dismissText]}),e.jsx("button",{className:"w-full text-center text-[11px] text-muted-foreground hover:text-foreground hover:underline transition-colors py-1",onClick:l,children:i.dontShowAgain})]})]})})}export{S as EcosystemIntroModal};

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.