PageSourceSearch

https://www.hiyoho.com/assets/Home-DZYXfUlm.js

js hiyoho.com collected 2026-10-08 07:06:23 UTC 5,247 bytes, 5 lines download raw bytes

1import{_ as x,o as P,a as l,c as i,b as s,d as a,e as o,w as v,f as c,t as d,F as _,r as p,g as k,h as j,i as h,u as B,j as L,k as y}from"./index-CsDazpOw.js";import{P as N}from"./ProductCard-CLAtRdRf.js";import{T as R}from"./Tag-D-zW_rzZ.js";const V={class:"hero"},F={class:"container hero-inner"},S={class:"hero-text"},T={class:"cta"},$={class:"stats"},H={class:"section container"},I={class:"section-head"},D={class:"grid grid-3"},E={class:"section container"},M={class:"grid grid-4"},O={class:"cap-ico"},q={class:"muted"},A={class:"section container"},G={class:"grid grid-2 news"},J={class:"card news-col"},K={class:"col-title"},Q={key:0},U=["onClick"],W={class:"row"},X={class:"muted"},Y={class:"date"},Z={key:1,class:"muted"},ss={class:"card news-col"},ts={class:"col-title"},es={key:0},ns=["onClick"],os={class:"row"},ls={class:"muted"},is={class:"date"},as={key:1,class:"muted"},ds={class:"section container"},rs={class:"cta-band card"},cs={__name:"Home",setup(us){const g=B(),u=k([]),m=k([]),w=h(()=>{const n=u.value.filter(t=>t.featured);return(n.length?n:u.value).slice(0,3)}),b=h(()=>u.value.map(n=>({name:n.name,id:n.id,...n.changelog&&n.changelog[0]?n.changelog[0]:{version:"",date:"",note:""}})).filter(n=>n.version).slice(0,4)),f=h(()=>m.value.slice(0,4)),C=[{icon:"zap",title:"效率工具开发",desc:"面向创作者与开发者的效率提升工具,macOS / 浏览器 / CLI。"},{icon:"layers",title:"插件与扩展",desc:"Final Cut Pro、VS Code 等平台的深度定制插件。"},{icon:"code",title:"全栈能力",desc:"前端工程化、Node / Python 后端、部署与运维一体化。"},{icon:"sparkles",title:"产品打磨",desc:"从交互细节到视觉规范,注重体验与可用性。"}];return P(async()=>{try{const[n,t]=await Promise.all([fetch("/data/products.json").then(r=>r.json()),fetch("/blog/index.json").then(r=>r.json())]);u.value=n,m.value=t}catch{}}),(n,t)=>{const r=j("RouterLink");return l(),i("div",null,[s("section",V,[s("div",F,[s("div",S,[t[5]||(t[5]=s("span",{class:"eyebrow"},"个人开发者 · 独立产品",-1)),t[6]||(t[6]=s("h1",null,[a("用代码打磨"),s("br"),a("好用的开发者工具")],-1)),t[7]||(t[7]=s("p",{class:"lead"}," 我是 Carl,一名独立开发者。这里汇集我开发的插件与工具产品, 也分享开发过程中的思考与实践。 ",-1)),s("div",T,[o(r,{to:"/products",class:"btn btn-primary"},{default:v(()=>[t[0]||(t[0]=a(" 查看产品 ",-1)),o(c,{name:"arrow",size:16})]),_:1}),o(r,{to:"/about",class:"btn btn-ghost"},{default:v(()=>[...t[1]||(t[1]=[a("关于我",-1)])]),_:1})]),s("div",$,[s("div",null,[s("strong",null,d(u.value.length||"—"),1),t[2]||(t[2]=s("span",null,"产品",-1))]),s("div",null,[s("strong",null,d(m.value.length||"—"),1),t[3]||(t[3]=s("span",null,"文章",-1))]),t[4]||(t[4]=s("div",null,[s("strong",null,"5+"),s("span",null,"年经验")],-1))])]),t[8]||(t[8]=s("div",{class:"hero-art","aria-hidden":"true"},[s("div",{class:"art-card"},[s("div",{class:"dots"},[s("i"),s("i"),s("i")]),s("pre",null,`<dev>
2  build()
3  ship()
4  repeat()
5</dev>`)])],-1))])]),s("section",H,[s("div",I,[t[10]||(t[10]=s("div",null,[s("h2",null,"核心插件产品"),s("span",{class:"sub"},"精选我正在维护与迭代的工具")],-1)),o(r,{to:"/products",class:"more"},{default:v(()=>[t[9]||(t[9]=a("查看全部 ",-1)),o(c,{name:"arrow",size:16})]),_:1})]),s("div",D,[(l(!0),i(_,null,p(w.value,e=>(l(),L(N,{key:e.id,product:e},null,8,["product"]))),128))])]),s("section",E,[t[11]||(t[11]=s("div",{class:"section-head"},[s("div",null,[s("h2",null,"我能做什么"),s("span",{class:"sub"},"技术栈与服务方向")])],-1)),s("div",M,[(l(),i(_,null,p(C,e=>s("div",{key:e.title,class:"card cap"},[s("span",O,[o(c,{name:e.icon,size:24},null,8,["name"])]),s("h3",null,d(e.title),1),s("p",q,d(e.desc),1)])),64))])]),s("section",A,[t[14]||(t[14]=s("div",{class:"section-head"},[s("div",null,[s("h2",null,"最新动态"),s("span",{class:"sub"},"版本更新与技术文章")])],-1)),s("div",G,[s("div",J,[s("h3",K,[o(c,{name:"tag",size:18}),t[12]||(t[12]=a(" 版本更新",-1))]),b.value.length?(l(),i("ul",Q,[(l(!0),i(_,null,p(b.value,e=>(l(),i("li",{key:e.id+e.version,onClick:z=>y(g).push("/product/"+e.id)},[s("div",W,[s("strong",null,d(e.name),1),o(R,{label:"v"+e.version,tone:"primary"},null,8,["label"])]),s("p",X,d(e.note),1),s("span",Y,[o(c,{name:"clock",size:13}),a(" "+d(e.date),1)])],8,U))),128))])):(l(),i("p",Z,"暂无更新"))]),s("div",ss,[s("h3",ts,[o(c,{name:"book",size:18}),t[13]||(t[13]=a(" 最新文章",-1))]),f.value.length?(l(),i("ul",es,[(l(!0),i(_,null,p(f.value,e=>(l(),i("li",{key:e.slug,onClick:z=>y(g).push("/blog/"+e.slug)}
5,[s("div",os,[s("strong",null,d(e.title),1)]),s("p",ls,d(e.excerpt),1),s("span",is,[o(c,{name:"clock",size:13}),a(" "+d(e.date),1)])],8,ns))),128))])):(l(),i("p",as,"暂无文章"))])])]),s("section",ds,[s("div",rs,[t[16]||(t[16]=s("div",null,[s("h2",null,"有项目想一起做?"),s("p",{class:"muted"},"插件定制、技术咨询、商务合作,欢迎随时联系。")],-1)),o(r,{to:"/contact",class:"btn btn-primary"},{default:v(()=>[t[15]||(t[15]=a("联系我 ",-1)),o(c,{name:"send",size:16})]),_:1})])])])}}},ms=x(cs,[["__scopeId","data-v-0f110710"]]);export{ms 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.