@funhub/platform 0.2.22 → 0.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
 
2
- "use client";import{trackAdClick as e,trackAdImpression as t,trackAdvertising as n}from"../../../../../utils/tracking.mjs";import{Button as r}from"../../../../ui/button.mjs";import{Image as i}from"../../../../ui/image.mjs";import{Box as a}from"../../../../ui/box.mjs";import{Dialog as o,DialogContent as s}from"../../../../ui/dialog.mjs";import c from"../../../../ui/link.mjs";import l from"../../../../common/video-player/index.mjs";import{adaptPopupAdMaterials as u,hasMatchedAds as d}from"../ad-match.mjs";import{useAdProvider as f}from"../ad-provider.mjs";import{useEffect as p,useMemo as m,useRef as h,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";const y=[{id:`popup-ad-1`,title:`弹窗广告标题`,jumpUrl:`/search`,materialUrl:`/static/components-resource/banner.png`,desc:`这里是弹窗广告描述`}];function b(e,t){return Array.isArray(e)&&e.length>0?e:t??[]}function x(e){return Number(e?.advertiseType)===2&&!!e?.videoUrl}function S(e){return e?.resolution||`1080x1920`}function C({items:C,mode:w=`renderer`,pageKey:T=`home`,pageName:E=`首页`}){let D=f(),O=m(()=>d(D?.matchData)?u(D?.matchData):w===`editor`?b(C,y):C??[],[D?.matchData,w,C]),[k,A]=g(0),[j,M]=g(!1),N=h(null),P=D?.matchData?.advertiseLocationCode||`home_popup`;p(()=>{A(0)},[O]),p(()=>{M(!1)},[k,O]),p(()=>()=>{N.current&&window.clearTimeout(N.current)},[]);let F=O[k],I=x(F);p(()=>{F?.id&&t({page_key:T,page_name:E,ad_slot_key:P,ad_slot_name:`弹窗广告`,ad_id:F.id,ad_type:`pop-ups-600800`})},[F?.id,P,T,E]);function L(){A(e=>e+1)}function R(){j||(M(!0),N.current&&window.clearTimeout(N.current),N.current=window.setTimeout(()=>{N.current=null,L()},260))}function z(e){e||R()}function B(){F?.id&&e({page_key:T,page_name:E,ad_slot_key:P,ad_slot_name:`弹窗广告`,ad_id:F.id,ad_type:`pop-ups-600800`})}function V(){F?.id&&(n({event_type:`close`,advertising_key:P,advertising_name:`弹窗广告`,advertising_id:F.id}),R())}return F?_(o,{open:!0,onOpenChange:z,disablePointerDismissal:!0,children:v(s,{showCloseButton:!1,className:`w-[320px] max-w-[calc(100vw-32px)] border-none bg-transparent p-0 shadow-none`,children:[v(a,{className:`flex flex-col items-center gap-[24px]`,style:{animation:j?`funhub-popup-ad-exit 260ms cubic-bezier(0.4, 0, 0.2, 1) both`:`funhub-popup-ad-enter 420ms cubic-bezier(0.2, 0.9, 0.2, 1) both, funhub-popup-ad-float 3.2s ease-in-out 420ms infinite`,transformOrigin:`center bottom`},children:[_(a,{className:`w-full overflow-hidden rounded-[20px] bg-[#434343]`,style:{boxShadow:`0 18px 48px rgba(0, 0, 0, 0.26)`},onClick:B,children:I?_(a,{className:`w-full bg-black`,children:v(a,{className:`relative aspect-[9/16] w-full cursor-pointer overflow-hidden bg-black`,children:[_(l,{plyerId:`popup-ad-${F.id}`,resolution:S(F),poster:F.materialUrl||``,videoUrl:F.videoUrl||``,mergeConfig:{fitVideoSize:`fixWidth`,autoplayMuted:!0,controls:!1}}),_(c,{href:F.jumpUrl,"aria-label":F.title||`跳转广告详情`,className:`absolute inset-0 z-10 block`})]})}):_(c,{href:F.jumpUrl,className:`block w-full overflow-hidden bg-[#434343]`,children:_(a,{className:`w-full overflow-hidden bg-[#434343]`,children:_(i,{src:F.materialUrl,alt:F.title||`弹窗广告`,width:1200,height:1600,className:`block w-full h-auto`,unoptimized:!0})})})}),_(r,{type:`button`,"aria-label":`关闭弹窗广告`,variant:`ghost`,size:`icon-lg`,className:`relative h-[54px] w-[54px] rounded-full border-[3px] border-white bg-transparent p-0 text-white hover:bg-white/8`,onClick:V,style:{animation:j?`funhub-popup-ad-close-exit 260ms ease-out both`:`funhub-popup-ad-close-breathe 2.4s ease-in-out 480ms infinite`},children:v(a,{className:`relative h-[24px] w-[24px]`,children:[_(a,{className:`absolute left-1/2 top-1/2 h-[4px] w-full -translate-x-1/2 -translate-y-1/2 rotate-45 rounded-full bg-current`}),_(a,{className:`absolute left-1/2 top-1/2 h-[4px] w-full -translate-x-1/2 -translate-y-1/2 -rotate-45 rounded-full bg-current`})]})})]},F.id),_(`style`,{children:`
2
+ "use client";import{trackAdClick as e,trackAdImpression as t,trackAdvertising as n}from"../../../../../utils/tracking.mjs";import{Button as r}from"../../../../ui/button.mjs";import{Image as i}from"../../../../ui/image.mjs";import{Box as a}from"../../../../ui/box.mjs";import{Dialog as o,DialogContent as s}from"../../../../ui/dialog.mjs";import c from"../../../../ui/link.mjs";import l from"../../../../common/video-player/index.mjs";import{adaptPopupAdMaterials as u,hasMatchedAds as d}from"../ad-match.mjs";import{useAdProvider as f}from"../ad-provider.mjs";import{useEffect as p,useMemo as m,useRef as h,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";const y=[{id:`popup-ad-1`,title:`弹窗广告标题`,jumpUrl:`/search`,materialUrl:`/static/components-resource/banner.png`,desc:`这里是弹窗广告描述`}];function b(e,t){return Array.isArray(e)&&e.length>0?e:t??[]}function x(e){return Number(e?.advertiseType)===2&&!!e?.videoUrl}function S(e){return e?.resolution||`1080x1920`}function C({items:C,mode:w=`renderer`,pageKey:T=`home`,pageName:E=`首页`}){let D=f(),O=m(()=>d(D?.matchData)?u(D?.matchData):w===`editor`?b(C,y):C??[],[D?.matchData,w,C]),[k,A]=g(0),[j,M]=g(!1),N=h(null),P=D?.matchData?.advertiseLocationCode||`home_popup`;p(()=>{A(0)},[O]),p(()=>{M(!1)},[k,O]),p(()=>()=>{N.current&&window.clearTimeout(N.current)},[]);let F=O[k],I=x(F);p(()=>{F?.id&&t({page_key:T,page_name:E,ad_slot_key:P,ad_slot_name:`弹窗广告`,ad_id:F.id,ad_type:`pop-ups-600800`})},[F?.id,P,T,E]);function L(){A(e=>e+1)}function R(){j||(M(!0),N.current&&window.clearTimeout(N.current),N.current=window.setTimeout(()=>{N.current=null,L()},260))}function z(e){e||R()}function B(){F?.id&&e({page_key:T,page_name:E,ad_slot_key:P,ad_slot_name:`弹窗广告`,ad_id:F.id,ad_type:`pop-ups-600800`})}function V(){F?.id&&(n({event_type:`close`,advertising_key:P,advertising_name:`弹窗广告`,advertising_id:F.id}),R())}return F?_(o,{open:!0,onOpenChange:z,disablePointerDismissal:!0,children:v(s,{showCloseButton:!1,className:`w-[320px] max-w-[calc(100vw-32px)] border-none bg-transparent p-0 shadow-none`,children:[v(a,{className:`flex flex-col items-center gap-[24px]`,style:{animation:j?`funhub-popup-ad-exit 260ms cubic-bezier(0.4, 0, 0.2, 1) both`:`funhub-popup-ad-enter 420ms cubic-bezier(0.2, 0.9, 0.2, 1) both, funhub-popup-ad-float 3.2s ease-in-out 420ms infinite`,transformOrigin:`center bottom`},children:[_(a,{className:`w-full overflow-hidden rounded-[20px] bg-[#434343]`,style:{boxShadow:`0 18px 48px rgba(0, 0, 0, 0.26)`},onClick:B,children:I?_(a,{className:`w-full bg-black`,children:v(a,{className:`relative aspect-[9/16] w-full cursor-pointer overflow-hidden bg-black`,children:[_(l,{plyerId:`popup-ad-${F.id}`,resolution:S(F),poster:F.materialUrl||``,videoUrl:F.videoUrl||``,mergeConfig:{fitVideoSize:`fixWidth`,autoplayMuted:!0,controls:!1}}),_(c,{href:F.jumpUrl,"aria-label":F.title||`跳转广告详情`,className:`absolute inset-0 z-10 block`,children:_(`span`,{className:`sr-only`,children:F.title||`跳转广告详情`})})]})}):_(c,{href:F.jumpUrl,className:`block w-full overflow-hidden bg-[#434343]`,children:_(a,{className:`w-full overflow-hidden bg-[#434343]`,children:_(i,{src:F.materialUrl,alt:F.title||`弹窗广告`,width:1200,height:1600,className:`block w-full h-auto`,unoptimized:!0})})})}),_(r,{type:`button`,"aria-label":`关闭弹窗广告`,variant:`ghost`,size:`icon-lg`,className:`relative h-[54px] w-[54px] rounded-full border-[3px] border-white bg-transparent p-0 text-white hover:bg-white/8`,onClick:V,style:{animation:j?`funhub-popup-ad-close-exit 260ms ease-out both`:`funhub-popup-ad-close-breathe 2.4s ease-in-out 480ms infinite`},children:v(a,{className:`relative h-[24px] w-[24px]`,children:[_(a,{className:`absolute left-1/2 top-1/2 h-[4px] w-full -translate-x-1/2 -translate-y-1/2 rotate-45 rounded-full bg-current`}),_(a,{className:`absolute left-1/2 top-1/2 h-[4px] w-full -translate-x-1/2 -translate-y-1/2 -rotate-45 rounded-full bg-current`})]})})]},F.id),_(`style`,{children:`
3
3
  @keyframes funhub-popup-ad-enter {
4
4
  0% {
5
5
  opacity: 0;
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{pContentGetNewstVideoList as e,pContentGetPopularVideoList as t}from"../../../../../service/generated/client.mjs";import{trackAdClick as n,trackAdImpression as r,trackAppPageView as i,trackPageClick as a,trackRecommendListClick as o}from"../../../../../utils/tracking.mjs";import{Image as s}from"../../../../ui/image.mjs";import{Box as c}from"../../../../ui/box.mjs";import{Text as l}from"../../../../ui/text.mjs";import u from"../../../../ui/loading.mjs";import ee from"../../../../ui/link.mjs";import{useGridFirstRowHeight as d,useWaterfallFirstRowHeight as te}from"../../../../../hooks/use-first-row-height.mjs";import{useMinDurationLoading as ne}from"../../../../../hooks/use-min-duration-loading.mjs";import re from"../../../../../assets/icons/common/right_arrow.mjs";import ie from"../../../../../assets/icons/common/right_arrow_thin.mjs";import ae from"../../../../../assets/icons/detail/video_flag.mjs";import{isFeedAdItem as f}from"../../advertisement/feed-ad/index.mjs";import{RECOMMEND_BADGE_IMAGE_CLASS_NAME as p,RECOMMEND_TOP_LEFT_BADGE_WRAPPER_CLASS_NAME as oe,normalizeRecommendBadgeUrl as m}from"../../../../common/list/waterfall-recommend/recommend-badge-style.mjs";import{WATERFALL_TALL_CARD_ASPECT_RATIO as h,buildWaterfallRecommendLegacyDisplay as se}from"../../../../common/list/waterfall-recommend/waterfall-recommend-display.mjs";import{WaterfallRecommend as g}from"../../../../common/list/waterfall-recommend/waterfall-recommend.mjs";import{HOME_RECOMMEND_DEFAULT_GRID_COLUMNS as ce,HOME_RECOMMEND_DEFAULT_GRID_ROWS as le,HOME_RECOMMEND_DEFAULT_PLAY_COUNT_DELTA as ue,HOME_RECOMMEND_DEFAULT_SHOW_EPISODE as de,HOME_RECOMMEND_DEFAULT_SHOW_PLAY_COUNT as fe,HOME_RECOMMEND_DEFAULT_TITLE as pe,HOME_RECOMMEND_MAX_GRID_COLUMNS as me,HOME_RECOMMEND_MAX_GRID_ROWS as he}from"./home-recommend-default-config.mjs";import{buildHomeRecommendHeatText as _,resolveHomeRecommendBrowseCount as v}from"./home-recommend-play-count.mjs";import{HOME_RECOMMEND_CARD_CONFIG_FIELD as y}from"./home-recommend-preview.mjs";import{isHomeRecommendLatestSortRule as ge}from"./home-recommend-smart-layout.mjs";import{limitPopularVideoPageItems as _e}from"./home-recommend-smart-tag.mjs";import{enrichHomeRecommendItemsWithVideoDetails as ve}from"./home-recommend-video-detail.mjs";import{useCallback as b,useEffect as x,useLayoutEffect as ye,useMemo as S,useRef as C,useState as w}from"react";import{Fragment as be,jsx as T,jsxs as E}from"react/jsx-runtime";const xe={backgroundImage:`var(--gradient-card-mask-medium)`},Se={},Ce={list:[]},D=new Map,O=[];function we(e){if(e)return D.get(e)}function Te(e,t){if(!e||(D.has(e)||O.push(e),D.set(e,{items:[...t.items],cursor:t.cursor}),O.length<=120))return;let n=O.shift();n&&D.delete(n)}function Ee({variant:s,props:ae=Se,data:p=Ce,mode:oe=`renderer`}){let m=oe===`editor`,{list:h,title:se,cursor:_}=p,v=S(()=>Array.isArray(h)?h:[],[h]),y=S(()=>Array.isArray(p.icons)?p.icons:[],[p.icons]),{rows:xe,columns:D,moreLink:O,title:Ee,showPlayCount:Oe,playCountDelta:k,showEpisode:A,enableInfinite:Me,items:j,smartLayout:M}=ae,N=M?.enabled===!0,P=N&&ge(M?.sortRule),F=Me===!0&&N,I=!m&&F&&v.length>=16,L=S(()=>N||!Array.isArray(j)?``:j.map(e=>String(e?.contentId||``).trim()).filter(Boolean).join(`,`),[N,j]),[R,Ne]=w(0),[z,B]=w(v),[Le,Re]=w(y),[ze,V]=w(()=>typeof _==`string`?_:void 0),[Be,Ve]=w(!1),He=C(null),Ue=C(null),We=C(null),Ge=C([]),H=C({left:null,right:null}),Ke=C(null),qe=C(!1),Je=C(new Set),U=C(new Map),Ye=C(!1),W=C(``),{isLoading:Xe,show:Ze,hide:Qe}=ne(600),$e=Ae(xe,le,he),G=Ae(D,ce,me),K=F?16:s===`grid`?$e*G:16,q=S(()=>[s,(()=>{if(!N||!M)return`manual:${L}`;if(P)return`smart:newest:${M.tagIds.join(`,`)}:${M.catIds.join(`,`)}`;let e=String(M.sortRule??``);return`smart:popular:${M.tagIds.join(`,`)}:${M.catIds.join(`,`)}:sr:${e}`})(),String(K)].join(`|`),[N,L,K,M,P,s]);x(()=>{B(v),Re(y),V(typeof _==`string`?_:void 0)},[_,y,v]);let et=$e*G,tt=m&&s===`grid`,J=tt?z.slice(0,et):z,nt=tt?Le.slice(0,et):Le,rt=s===`waterfall`?6:4,it=J.length>0?Math.max(0,J.length-rt):-1,at=!!ze;x(()=>{if(m)return;let e=J.filter(e=>f(e)).map(e=>e.ad?.ad_code||``).filter(Boolean).join(`,`);e&&r({page_key:`home`,page_name:`首页`,ad_slot_key:`home_feed`,ad_slot_name:`信息流广告`,ad_id:e,ad_type:`feed`})},[J.length,m]);let ot=b(e=>{let t=e.ad?.ad_code||``;t&&n({page_key:`home`,page_name:`首页`,ad_slot_key:`home_feed`,ad_slot_name:`信息流广告`,ad_id:t,ad_type:`feed`})},[]),Y=Ee&&Ee.trim()||se||pe;x(()=>{if(m)return;let e=Ke.current;if(!e)return;let t=new IntersectionObserver(e=>{e[0]?.isIntersecting&&!qe.current&&(qe.current=!0,i({page_key:`home`,page_name:`首页`,current_page_key:Y,current_page_name:Y}),t.disconnect())},{threshold:.5});return t.observe(e),()=>{t.disconnect()}},[m,Y,J.length]),x(()=>{let e=U.current;return()=>{e.forEach(e=>e.disconnect()),e.clear()}},[]);let st=b(e=>{let t=e.id||``;!t||Je.current.has(t)||(Je.current.add(t),i({page_key:`home`,page_name:`首页`,current_page_key:t,current_page_name:e.name||``}))},[]),ct=b((e,t)=>{if(f(e)){ot(e);return}o({page_key:`home`,page_name:`首页`,recommend_id:Y}),a(`home`,`首页`,t,e.name||e.id||``)},[ot,Y]);function lt(){o({page_key:`home`,page_name:`首页`,recommend_id:Y,recommend_trace_info:`更多`})}let X=Oe??fe,Z=Number(k??ue),Q=A??de,ut=`flex-1 min-w-0 text-[18px] leading-[24px] font-medium line-clamp-1 text-text2`,dt=s===`grid`?ie:m?re:ie,ft=ke(O),pt=(s===`waterfall`||!F)&&!!ft,mt=pt?ft:``,ht=s===`grid`?`flex size-[24px] shrink-0 items-center justify-center ${m?`opacity-100`:`opacity-50`}`:`ml-[8px] flex size-[24px] shrink-0 items-center justify-center ${m?`opacity-100`:`opacity-50`}`,gt=`size-[16px] text-text1`,_t=d({enabled:!m&&s===`grid`,containerRef:Ue,firstRowItemRef:Ge,columns:G,itemsCount:J.length,deps:[s]}),vt=te({enabled:!m&&s===`waterfall`,containerRef:He,firstRowRef:H,deps:[s,J.length]}),yt=s===`grid`?_t:vt,bt=b(async()=>{if(m||W.current===q)return;let e=we(q);if(e){B(e.items),N&&V(e.cursor);return}if(N||L){W.current=q;try{if(Ze(),!N){if(!L)return;let e=await ve(v);B(e),Te(q,{items:e});return}if(!M)return;let e=await t({page_size:K,tags:M.tagIds.length>0?M.tagIds:void 0,cat_ids:M.catIds.length>0?M.catIds:void 0},{cache:`no-store`}),n=_e(e.data?.videos,K),r=e.data?.cursor;B(n),V(r),Te(q,{items:n,cursor:r})}catch(e){console.error(`推荐位刷新首屏失败(client)`,e)}finally{W.current===q&&(W.current=``),Qe()}}},[Qe,v,m,N,L,q,K,Ze,M]);x(()=>{bt()},[bt]);let xt=b(async()=>{let n=ze;if(!(!I||!n||Ye.current)){Ye.current=!0,Ve(!0);try{if(!M)return;let r={cursor:n,page_size:K,tags:M.tagIds.length>0?M.tagIds:void 0,cat_ids:M.catIds.length>0?M.catIds:void 0},i=P?await e(r):await t(r),a=Array.isArray(i.data?.videos)?i.data.videos:[],o=i.data?.cursor;a.length>0&&B(e=>e.concat(a)),V(e=>{if(!(!a.length||!o))return o===e?void 0:o})}catch(e){console.error(`推荐位加载下一页失败(client)`,e),V(void 0)}finally{Ye.current=!1,Ve(!1)}}},[ze,K,I,M,P]);x(()=>{let e=We.current;if(!e||!I||!at)return;let t=new IntersectionObserver(e=>{!e[0]?.isIntersecting||Be||xt()},{root:null,threshold:0});return t.observe(e),()=>{t.disconnect()}},[xt,at,Be,J.length,K,I,it]),ye(()=>{let e=He.current;if(!e||s!==`waterfall`)return;let t=()=>{let t=e.clientWidth||0;Ne(t>0?(t-15)/2:0)};t();let n=new ResizeObserver(t);return n.observe(e),()=>{n.disconnect()}},[s]);let $=S(()=>s===`waterfall`?Fe(J,nt,R):{left:[],right:[]},[R,nt,J,s]),St=S(()=>s===`waterfall`?{left:$.left.map(e=>Pe(e,X,Z,Q)),right:$.right.map(e=>Pe(e,X,Z,Q))}:{left:[],right:[]},[Z,Q,X,s,$.left,$.right]);if(x(()=>{s===`waterfall`&&($.left.length||(H.current.left=null),$.right.length||(H.current.right=null))},[s,$.left.length,$.right.length]),!J.length)return null;let Ct=!m&&Xe,wt=!m&&Be,Tt=yt>0?yt/2:160;return E(c,{ref:Ke,className:`w-full mt-[16px]`,children:[s===`grid`&&E(c,{className:`flex items-center justify-between no-vw-x-16 mb-[16px]`,children:[T(l,{className:ut,children:Y}),pt&&T(ee,{href:mt,"aria-label":`更多`,className:ht,onClick:lt,children:T(dt,{className:gt})})]}),s===`grid`&&E(c,{ref:Ue,className:`relative flex w-full flex-wrap items-start gap-[16px] no-vw-x-16`,children:[J.map((e,t)=>{let n=nt[t],r=je(e);return T(`div`,{ref:e=>{t===it&&(We.current=e),t<G&&(Ge.current[t]=e)},className:`w-[calc((100%-16px)/2)]`,children:T(De,{item:e,icon:n,index:t,showPlayCount:X&&(r?.showPlayCount??!0),playCountDelta:r?.playCountDelta??Z,showEpisode:r?.showEpisode??Q,widthStyle:{width:`100%`},onContentClick:ct,onContentView:st})},Ie(e,t))}),Ct&&T(c,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),Ct&&T(c,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:Tt},"aria-hidden":!0,children:T(u,{size:`large`,showLabel:!1,className:`text-theme5`})})]}),s===`waterfall`&&T(g,{title:Y,moreHref:mt||void 0,onMoreClick:lt,moreIcon:pt?T(dt,{className:gt}):void 0,titleClassName:ut,moreLinkClassName:ht,columns:St,containerClassName:`relative flex w-full gap-[8px] no-vw-x-16`,getItemRef:({item:e,column:t,columnIndex:n})=>r=>{let{sourceIndex:i}=e;i===it&&(We.current=r),n===0&&(H.current[t]=r);let a=U.current.get(i);if(a&&(a.disconnect(),U.current.delete(i)),r&&!m){let e=J[i];if(e&&!f(e)){let t=new IntersectionObserver(n=>{n[0]?.isIntersecting&&(st(e),t.disconnect(),U.current.delete(i))},{threshold:.5});t.observe(r),U.current.set(i,t)}}},overlay:Ct?E(be,{children:[T(c,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),T(c,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:Tt},"aria-hidden":!0,children:T(u,{size:`large`,showLabel:!1,className:`text-theme5`})})]}):void 0,onItemClick:e=>{let t=J[e.sourceIndex];t&&(f(t)?ot(t):(o({page_key:`home`,page_name:`首页`,recommend_id:Y}),a(`home`,`首页`,null,t.name||t.id||``)))}}),wt&&T(c,{className:`w-full flex justify-center py-[12px]`,children:T(u,{size:`medium`,showLabel:!1,className:`text-theme5`})})]})}function De({item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:s,onContentView:c}){return T(Oe,{item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:s,onContentView:c})}function Oe({item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:u,onContentView:d}){let te=C(null),ne=M(e,j(e)),re=e.name||e?.title||``,ie=e.id?k(e):`#`,g=se({title:re,badgeImageUrl:z(e,t,n),episodeText:I(e,a),heatText:r?_(v(e),i):``,score:P(e.score)}),ce=m(g.topLeftBadgeImageUrl);return x(()=>{let t=te.current;if(!t||!d||f(e))return;let n=new IntersectionObserver(t=>{t[0]?.isIntersecting&&(d(e),n.disconnect())},{threshold:.5});return n.observe(t),()=>{n.disconnect()}},[e,d]),T(ee,{href:ie,className:`block w-full`,onClick:t=>u?.(e,t),style:o,children:E(be,{children:[E(c,{className:`relative w-full overflow-hidden rounded-[8px] bg-bg3`,style:{aspectRatio:h},children:[ne&&T(s,{src:ne,alt:re||`推荐封面`,fill:!0,objectFit:`cover`,className:`object-cover object-top`}),T(c,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:xe,"aria-hidden":!0}),ce&&T(c,{className:oe,children:T(s,{src:ce,alt:`角标`,width:96,height:18,className:p})}),g.topRightScoreText&&T(l,{as:`span`,className:`absolute right-[8px] top-[8px] z-10 shrink-0 text-[14px] leading-[22px] font-semibold text-[#FFC24B]`,children:g.topRightScoreText}),E(c,{className:`absolute left-[8px] right-[8px] bottom-[8px] z-10 flex items-end justify-between gap-[8px]`,children:[T(c,{className:`flex min-w-0 items-center gap-[4px]`,children:g.bottomLeftHeatText&&E(be,{children:[T(ae,{className:`h-[16px] w-[16px] shrink-0 text-white`}),T(l,{as:`span`,className:`min-w-0 truncate text-[14px] leading-[20px] text-white`,children:g.bottomLeftHeatText})]})}),g.bottomRightEpisodeText&&T(l,{as:`span`,className:`shrink-0 text-[14px] leading-[20px] text-white`,children:g.bottomRightEpisodeText})]})]}),T(c,{className:`mt-[8px] h-[44px] overflow-hidden`,children:T(l,{as:`h3`,className:`line-clamp-2 text-[16px] leading-[22px] text-[--color-text-white80]`,children:g.title})})]})})}function k(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id||``}/${t}/episode/1`}function ke(e){return e?e.trim():``}function Ae(e,t,n){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.min(n,Math.floor(r))}function je(e){return e[y]}function A(e){return typeof e==`string`?e:``}function Me(e){return typeof e==`string`?e.trim():``}function j(e){return Me(e.img_type).toLowerCase()===`long`?`short`:`tall`}function M(e,t){return t===`short`?e.img_x||e.img_y||e?.coverUrl:e.img_y||e.img_x||e?.coverUrl}function N(e,t){return(e.tags?.map(e=>e.name).filter(Boolean).join(` · `)??``)||(t?F(e,!0):``)}function P(e){let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return t>10&&t<=100?t/10:Math.min(t,10)}function F(e,t){return t?L(e)||Ne(Number(e.duration||0)):``}function I(e,t){return t?L(e):``}function L(e){if(!R(e))return``;let t=e.update_status===`0`,n=Number(e.episode_cnt||e.links?.length||0);return n>0?`${t?`更新至`:`全`}${n}集`:``}function R(e){if(Number(e.type??0)===2)return!0;let t=Number(e.episode_cnt||e.links?.length||0);return Number.isFinite(t)&&t>1}function Ne(e){if(!Number.isFinite(e)||e<=0)return``;let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`}function z(e,t,n){return A(e.badge_url)||A(t?.material_url)||``}function Pe(e,t,n,r){let i=j(e.item),a=M(e.item,i),o=e.item.name||e.item?.title||``,s=e.item.id?k(e.item):`#`,c=z(e.item,e.icon,e.index),l=F(e.item,r),u=N(e.item,r),ee=t?_(v(e.item),n):``,d=P(e.item.score);return{key:Ie(e.item,e.index),sourceIndex:e.index,href:s,cardKind:i,coverUrl:a,title:o,badgeImageUrl:c,episodeText:l,metaPrimaryText:u,heatText:ee,score:d}}function Fe(e,t,n){let r=[],i=[],a=n<=0,o=0,s=0;return e.forEach((e,c)=>{let l=t[c];if(a){c%2==0?r.push({item:e,icon:l,index:c}):i.push({item:e,icon:l,index:c});return}let u=B(n,e);o<=s?(r.push({item:e,icon:l,index:c}),o+=u):(i.push({item:e,icon:l,index:c}),s+=u)}),{left:r,right:i}}function B(e,t){return e?(j(t)===`tall`?216:142)+16:0}function Ie(e,t){return e.id?`home-recommend-${e.id}-${t}`:`home-recommend-${t}`}export{Ee as default};
2
+ "use client";import{pContentGetNewstVideoList as e,pContentGetPopularVideoList as t}from"../../../../../service/generated/client.mjs";import{trackAdClick as n,trackAdImpression as r,trackAppPageView as i,trackPageClick as a,trackRecommendListClick as o}from"../../../../../utils/tracking.mjs";import{Image as s}from"../../../../ui/image.mjs";import{Box as c}from"../../../../ui/box.mjs";import{Text as l}from"../../../../ui/text.mjs";import u from"../../../../ui/loading.mjs";import ee from"../../../../ui/link.mjs";import{useGridFirstRowHeight as d,useWaterfallFirstRowHeight as te}from"../../../../../hooks/use-first-row-height.mjs";import{useMinDurationLoading as ne}from"../../../../../hooks/use-min-duration-loading.mjs";import re from"../../../../../assets/icons/common/right_arrow.mjs";import ie from"../../../../../assets/icons/common/right_arrow_thin.mjs";import ae from"../../../../../assets/icons/detail/video_flag.mjs";import{isFeedAdItem as f}from"../../advertisement/feed-ad/index.mjs";import{RECOMMEND_BADGE_IMAGE_CLASS_NAME as p,RECOMMEND_TOP_LEFT_BADGE_WRAPPER_CLASS_NAME as oe,normalizeRecommendBadgeUrl as m}from"../../../../common/list/waterfall-recommend/recommend-badge-style.mjs";import{WATERFALL_TALL_CARD_ASPECT_RATIO as h,buildWaterfallRecommendLegacyDisplay as se}from"../../../../common/list/waterfall-recommend/waterfall-recommend-display.mjs";import{WaterfallRecommend as g}from"../../../../common/list/waterfall-recommend/waterfall-recommend.mjs";import{HOME_RECOMMEND_DEFAULT_GRID_COLUMNS as ce,HOME_RECOMMEND_DEFAULT_GRID_ROWS as le,HOME_RECOMMEND_DEFAULT_PLAY_COUNT_DELTA as ue,HOME_RECOMMEND_DEFAULT_SHOW_EPISODE as de,HOME_RECOMMEND_DEFAULT_SHOW_PLAY_COUNT as fe,HOME_RECOMMEND_DEFAULT_TITLE as pe,HOME_RECOMMEND_MAX_GRID_COLUMNS as me,HOME_RECOMMEND_MAX_GRID_ROWS as he}from"./home-recommend-default-config.mjs";import{buildHomeRecommendHeatText as _,resolveHomeRecommendBrowseCount as v}from"./home-recommend-play-count.mjs";import{HOME_RECOMMEND_CARD_CONFIG_FIELD as y}from"./home-recommend-preview.mjs";import{isHomeRecommendLatestSortRule as ge}from"./home-recommend-smart-layout.mjs";import{limitPopularVideoPageItems as _e}from"./home-recommend-smart-tag.mjs";import{enrichHomeRecommendItemsWithVideoDetails as ve}from"./home-recommend-video-detail.mjs";import{useCallback as b,useEffect as x,useLayoutEffect as ye,useMemo as S,useRef as C,useState as w}from"react";import{Fragment as be,jsx as T,jsxs as E}from"react/jsx-runtime";const xe={backgroundImage:`var(--gradient-card-mask-medium)`},Se={},Ce={list:[]},D=new Map,O=[];function we(e){if(e)return D.get(e)}function Te(e,t){if(!e||(D.has(e)||O.push(e),D.set(e,{items:[...t.items],cursor:t.cursor}),O.length<=120))return;let n=O.shift();n&&D.delete(n)}function Ee({variant:s,props:ae=Se,data:p=Ce,mode:oe=`renderer`}){let m=oe===`editor`,{list:h,title:se,cursor:_}=p,v=S(()=>Array.isArray(h)?h:[],[h]),y=S(()=>Array.isArray(p.icons)?p.icons:[],[p.icons]),{rows:xe,columns:D,moreLink:O,title:Ee,showPlayCount:Oe,playCountDelta:k,showEpisode:A,enableInfinite:Me,items:j,smartLayout:M}=ae,N=M?.enabled===!0,P=N&&ge(M?.sortRule),F=Me===!0&&N,I=!m&&F&&v.length>=16,L=S(()=>N||!Array.isArray(j)?``:j.map(e=>String(e?.contentId||``).trim()).filter(Boolean).join(`,`),[N,j]),[R,Ne]=w(0),[z,B]=w(v),[Le,Re]=w(y),[ze,V]=w(()=>typeof _==`string`?_:void 0),[Be,Ve]=w(!1),He=C(null),Ue=C(null),We=C(null),Ge=C([]),H=C({left:null,right:null}),Ke=C(null),qe=C(!1),Je=C(new Set),U=C(new Map),Ye=C(!1),W=C(``),{isLoading:Xe,show:Ze,hide:Qe}=ne(600),$e=Ae(xe,le,he),G=Ae(D,ce,me),K=F?16:s===`grid`?$e*G:16,q=S(()=>[s,(()=>{if(!N||!M)return`manual:${L}`;if(P)return`smart:newest:${M.tagIds.join(`,`)}:${M.catIds.join(`,`)}`;let e=String(M.sortRule??``);return`smart:popular:${M.tagIds.join(`,`)}:${M.catIds.join(`,`)}:sr:${e}`})(),String(K)].join(`|`),[N,L,K,M,P,s]);x(()=>{B(v),Re(y),V(typeof _==`string`?_:void 0)},[_,y,v]);let et=$e*G,tt=m&&s===`grid`,J=tt?z.slice(0,et):z,nt=tt?Le.slice(0,et):Le,rt=s===`waterfall`?6:4,it=J.length>0?Math.max(0,J.length-rt):-1,at=!!ze;x(()=>{if(m)return;let e=J.filter(e=>f(e)).map(e=>e.ad?.ad_code||``).filter(Boolean).join(`,`);e&&r({page_key:`home`,page_name:`首页`,ad_slot_key:`home_feed`,ad_slot_name:`信息流广告`,ad_id:e,ad_type:`feed`})},[J.length,m]);let ot=b(e=>{let t=e.ad?.ad_code||``;t&&n({page_key:`home`,page_name:`首页`,ad_slot_key:`home_feed`,ad_slot_name:`信息流广告`,ad_id:t,ad_type:`feed`})},[]),Y=Ee&&Ee.trim()||se||pe;x(()=>{if(m)return;let e=Ke.current;if(!e)return;let t=new IntersectionObserver(e=>{e[0]?.isIntersecting&&!qe.current&&(qe.current=!0,i({page_key:`home`,page_name:`首页`,current_page_key:Y,current_page_name:Y}),t.disconnect())},{threshold:.5});return t.observe(e),()=>{t.disconnect()}},[m,Y,J.length]),x(()=>{let e=U.current;return()=>{e.forEach(e=>e.disconnect()),e.clear()}},[]);let st=b(e=>{let t=e.id||``;!t||Je.current.has(t)||(Je.current.add(t),i({page_key:`home`,page_name:`首页`,current_page_key:t,current_page_name:e.name||``}))},[]),ct=b((e,t)=>{if(f(e)){ot(e);return}o({page_key:`home`,page_name:`首页`,recommend_id:Y}),a(`home`,`首页`,t,e.name||e.id||``)},[ot,Y]);function lt(){a(`home`,`首页`,null,`recommend_more`,{recommend_id:Y})}let X=Oe??fe,Z=Number(k??ue),Q=A??de,ut=`flex-1 min-w-0 text-[18px] leading-[24px] font-medium line-clamp-1 text-text2`,dt=s===`grid`?ie:m?re:ie,ft=ke(O),pt=(s===`waterfall`||!F)&&!!ft,mt=pt?ft:``,ht=s===`grid`?`flex size-[24px] shrink-0 items-center justify-center ${m?`opacity-100`:`opacity-50`}`:`ml-[8px] flex size-[24px] shrink-0 items-center justify-center ${m?`opacity-100`:`opacity-50`}`,gt=`size-[16px] text-text1`,_t=d({enabled:!m&&s===`grid`,containerRef:Ue,firstRowItemRef:Ge,columns:G,itemsCount:J.length,deps:[s]}),vt=te({enabled:!m&&s===`waterfall`,containerRef:He,firstRowRef:H,deps:[s,J.length]}),yt=s===`grid`?_t:vt,bt=b(async()=>{if(m||W.current===q)return;let e=we(q);if(e){B(e.items),N&&V(e.cursor);return}if(N||L){W.current=q;try{if(Ze(),!N){if(!L)return;let e=await ve(v);B(e),Te(q,{items:e});return}if(!M)return;let e=await t({page_size:K,tags:M.tagIds.length>0?M.tagIds:void 0,cat_ids:M.catIds.length>0?M.catIds:void 0},{cache:`no-store`}),n=_e(e.data?.videos,K),r=e.data?.cursor;B(n),V(r),Te(q,{items:n,cursor:r})}catch(e){console.error(`推荐位刷新首屏失败(client)`,e)}finally{W.current===q&&(W.current=``),Qe()}}},[Qe,v,m,N,L,q,K,Ze,M]);x(()=>{bt()},[bt]);let xt=b(async()=>{let n=ze;if(!(!I||!n||Ye.current)){Ye.current=!0,Ve(!0);try{if(!M)return;let r={cursor:n,page_size:K,tags:M.tagIds.length>0?M.tagIds:void 0,cat_ids:M.catIds.length>0?M.catIds:void 0},i=P?await e(r):await t(r),a=Array.isArray(i.data?.videos)?i.data.videos:[],o=i.data?.cursor;a.length>0&&B(e=>e.concat(a)),V(e=>{if(!(!a.length||!o))return o===e?void 0:o})}catch(e){console.error(`推荐位加载下一页失败(client)`,e),V(void 0)}finally{Ye.current=!1,Ve(!1)}}},[ze,K,I,M,P]);x(()=>{let e=We.current;if(!e||!I||!at)return;let t=new IntersectionObserver(e=>{!e[0]?.isIntersecting||Be||xt()},{root:null,threshold:0});return t.observe(e),()=>{t.disconnect()}},[xt,at,Be,J.length,K,I,it]),ye(()=>{let e=He.current;if(!e||s!==`waterfall`)return;let t=()=>{let t=e.clientWidth||0;Ne(t>0?(t-15)/2:0)};t();let n=new ResizeObserver(t);return n.observe(e),()=>{n.disconnect()}},[s]);let $=S(()=>s===`waterfall`?Fe(J,nt,R):{left:[],right:[]},[R,nt,J,s]),St=S(()=>s===`waterfall`?{left:$.left.map(e=>Pe(e,X,Z,Q)),right:$.right.map(e=>Pe(e,X,Z,Q))}:{left:[],right:[]},[Z,Q,X,s,$.left,$.right]);if(x(()=>{s===`waterfall`&&($.left.length||(H.current.left=null),$.right.length||(H.current.right=null))},[s,$.left.length,$.right.length]),!J.length)return null;let Ct=!m&&Xe,wt=!m&&Be,Tt=yt>0?yt/2:160;return E(c,{ref:Ke,className:`w-full mt-[16px]`,children:[s===`grid`&&E(c,{className:`flex items-center justify-between no-vw-x-16 mb-[16px]`,children:[T(l,{className:ut,children:Y}),pt&&T(ee,{href:mt,"aria-label":`更多`,className:ht,onClick:lt,children:T(dt,{className:gt})})]}),s===`grid`&&E(c,{ref:Ue,className:`relative flex w-full flex-wrap items-start gap-[16px] no-vw-x-16`,children:[J.map((e,t)=>{let n=nt[t],r=je(e);return T(`div`,{ref:e=>{t===it&&(We.current=e),t<G&&(Ge.current[t]=e)},className:`w-[calc((100%-16px)/2)]`,children:T(De,{item:e,icon:n,index:t,showPlayCount:X&&(r?.showPlayCount??!0),playCountDelta:r?.playCountDelta??Z,showEpisode:r?.showEpisode??Q,widthStyle:{width:`100%`},onContentClick:ct,onContentView:st})},Ie(e,t))}),Ct&&T(c,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),Ct&&T(c,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:Tt},"aria-hidden":!0,children:T(u,{size:`large`,showLabel:!1,className:`text-theme5`})})]}),s===`waterfall`&&T(g,{title:Y,moreHref:mt||void 0,onMoreClick:lt,moreIcon:pt?T(dt,{className:gt}):void 0,titleClassName:ut,moreLinkClassName:ht,columns:St,containerClassName:`relative flex w-full gap-[8px] no-vw-x-16`,getItemRef:({item:e,column:t,columnIndex:n})=>r=>{let{sourceIndex:i}=e;i===it&&(We.current=r),n===0&&(H.current[t]=r);let a=U.current.get(i);if(a&&(a.disconnect(),U.current.delete(i)),r&&!m){let e=J[i];if(e&&!f(e)){let t=new IntersectionObserver(n=>{n[0]?.isIntersecting&&(st(e),t.disconnect(),U.current.delete(i))},{threshold:.5});t.observe(r),U.current.set(i,t)}}},overlay:Ct?E(be,{children:[T(c,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),T(c,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:Tt},"aria-hidden":!0,children:T(u,{size:`large`,showLabel:!1,className:`text-theme5`})})]}):void 0,onItemClick:e=>{let t=J[e.sourceIndex];t&&(f(t)?ot(t):(o({page_key:`home`,page_name:`首页`,recommend_id:Y}),a(`home`,`首页`,null,t.name||t.id||``)))}}),wt&&T(c,{className:`w-full flex justify-center py-[12px]`,children:T(u,{size:`medium`,showLabel:!1,className:`text-theme5`})})]})}function De({item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:s,onContentView:c}){return T(Oe,{item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:s,onContentView:c})}function Oe({item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:u,onContentView:d}){let te=C(null),ne=M(e,j(e)),re=e.name||e?.title||``,ie=e.id?k(e):`#`,g=se({title:re,badgeImageUrl:z(e,t,n),episodeText:I(e,a),heatText:r?_(v(e),i):``,score:P(e.score)}),ce=m(g.topLeftBadgeImageUrl);return x(()=>{let t=te.current;if(!t||!d||f(e))return;let n=new IntersectionObserver(t=>{t[0]?.isIntersecting&&(d(e),n.disconnect())},{threshold:.5});return n.observe(t),()=>{n.disconnect()}},[e,d]),T(ee,{href:ie,className:`block w-full`,onClick:t=>u?.(e,t),style:o,children:E(be,{children:[E(c,{className:`relative w-full overflow-hidden rounded-[8px] bg-bg3`,style:{aspectRatio:h},children:[ne&&T(s,{src:ne,alt:re||`推荐封面`,fill:!0,objectFit:`cover`,className:`object-cover object-top`}),T(c,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:xe,"aria-hidden":!0}),ce&&T(c,{className:oe,children:T(s,{src:ce,alt:`角标`,width:96,height:18,className:p})}),g.topRightScoreText&&T(l,{as:`span`,className:`absolute right-[8px] top-[8px] z-10 shrink-0 text-[14px] leading-[22px] font-semibold text-[#FFC24B]`,children:g.topRightScoreText}),E(c,{className:`absolute left-[8px] right-[8px] bottom-[8px] z-10 flex items-end justify-between gap-[8px]`,children:[T(c,{className:`flex min-w-0 items-center gap-[4px]`,children:g.bottomLeftHeatText&&E(be,{children:[T(ae,{className:`h-[16px] w-[16px] shrink-0 text-white`}),T(l,{as:`span`,className:`min-w-0 truncate text-[14px] leading-[20px] text-white`,children:g.bottomLeftHeatText})]})}),g.bottomRightEpisodeText&&T(l,{as:`span`,className:`shrink-0 text-[14px] leading-[20px] text-white`,children:g.bottomRightEpisodeText})]})]}),T(c,{className:`mt-[8px] h-[44px] overflow-hidden`,children:T(l,{as:`h3`,className:`line-clamp-2 text-[16px] leading-[22px] text-[--color-text-white80]`,children:g.title})})]})})}function k(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id||``}/${t}/episode/1`}function ke(e){return e?e.trim():``}function Ae(e,t,n){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.min(n,Math.floor(r))}function je(e){return e[y]}function A(e){return typeof e==`string`?e:``}function Me(e){return typeof e==`string`?e.trim():``}function j(e){return Me(e.img_type).toLowerCase()===`long`?`short`:`tall`}function M(e,t){return t===`short`?e.img_x||e.img_y||e?.coverUrl:e.img_y||e.img_x||e?.coverUrl}function N(e,t){return(e.tags?.map(e=>e.name).filter(Boolean).join(` · `)??``)||(t?F(e,!0):``)}function P(e){let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return t>10&&t<=100?t/10:Math.min(t,10)}function F(e,t){return t?L(e)||Ne(Number(e.duration||0)):``}function I(e,t){return t?L(e):``}function L(e){if(!R(e))return``;let t=e.update_status===`0`,n=Number(e.episode_cnt||e.links?.length||0);return n>0?`${t?`更新至`:`全`}${n}集`:``}function R(e){if(Number(e.type??0)===2)return!0;let t=Number(e.episode_cnt||e.links?.length||0);return Number.isFinite(t)&&t>1}function Ne(e){if(!Number.isFinite(e)||e<=0)return``;let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`}function z(e,t,n){return A(e.badge_url)||A(t?.material_url)||``}function Pe(e,t,n,r){let i=j(e.item),a=M(e.item,i),o=e.item.name||e.item?.title||``,s=e.item.id?k(e.item):`#`,c=z(e.item,e.icon,e.index),l=F(e.item,r),u=N(e.item,r),ee=t?_(v(e.item),n):``,d=P(e.item.score);return{key:Ie(e.item,e.index),sourceIndex:e.index,href:s,cardKind:i,coverUrl:a,title:o,badgeImageUrl:c,episodeText:l,metaPrimaryText:u,heatText:ee,score:d}}function Fe(e,t,n){let r=[],i=[],a=n<=0,o=0,s=0;return e.forEach((e,c)=>{let l=t[c];if(a){c%2==0?r.push({item:e,icon:l,index:c}):i.push({item:e,icon:l,index:c});return}let u=B(n,e);o<=s?(r.push({item:e,icon:l,index:c}),o+=u):(i.push({item:e,icon:l,index:c}),s+=u)}),{left:r,right:i}}function B(e,t){return e?(j(t)===`tall`?216:142)+16:0}function Ie(e,t){return e.id?`home-recommend-${e.id}-${t}`:`home-recommend-${t}`}export{Ee as default};
@@ -1,2 +1,2 @@
1
1
 
2
- import{formatCompactCount as e}from"../../../../utils/common.mjs";import{Image as t}from"../../../ui/image.mjs";import{Box as n}from"../../../ui/box.mjs";import{Text as r}from"../../../ui/text.mjs";import i from"../../../ui/link.mjs";import a from"../../../../assets/icons/view.mjs";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";function l(t){let n=Number(t||0);return Number.isNaN(n)||n<=0?``:e(n)}function u({data:e}){return e?s(n,{className:`flex flex-col gap-[12px]`,children:(Array.isArray(e)?e:[e]).map((e,u)=>{if(!e||typeof e!=`object`)return null;let{id:d,title:f,desc:p,cover:m,tagImageUrl:h,showEpisode:g,episodeText:_,showPlayCount:v,play_count:y}=e,b=f||``,x=d?`/video/${d}/${b?encodeURIComponent(b):``}`:`#`,S=_==null?``:String(_).trim(),C=(g??!0)&&S!==``,w=v??!0,T=l(y)||`0`;return s(n,{children:s(i,{href:x,className:`block`,children:c(n,{className:`relative h-[204px] w-full overflow-hidden rounded-[8px] bg-[rgba(6,3,20,0.5)]`,children:[c(n,{className:`relative h-[134px] w-full overflow-hidden rounded-t-[8px]`,children:[m&&s(t,{src:m,alt:b||`封面`,fill:!0,objectFit:`cover`}),h&&String(h).trim()&&s(n,{className:`absolute left-[16px] top-[12px]`,children:s(n,{className:`inline-flex items-center justify-center rounded-[4px] px-[4px] py-[4px]`,style:{background:`linear-gradient(90deg, #CA3FE9 0%, #9756E3 100%)`},children:s(t,{src:String(h),alt:``,width:75,height:14,className:`h-[14px] w-auto object-contain`})})}),c(n,{className:`absolute bottom-[12px] left-[16px] right-[16px] flex items-center justify-between`,children:[s(n,{className:`flex items-center gap-[4px]`,children:w&&c(o,{children:[s(a,{className:`size-[22px] text-white opacity-80`}),s(r,{className:`text-[14px] leading-[20px] text-white`,children:T})]})}),C&&s(r,{className:`text-[14px] leading-[20px] text-white`,children:S})]})]}),s(n,{className:`px-[16px] pt-[12px]`,children:c(n,{className:`flex flex-col gap-[2px]`,children:[s(r,{className:`line-clamp-1 text-[16px] font-medium leading-[22px] text-white`,children:b}),p&&s(r,{className:`line-clamp-1 text-[14px] leading-[20px] text-white/50`,children:p})]})})]})})},d||b||`large-grid-item-${u}`)})}):null}export{u as LargeGridItemClient};
2
+ import{formatCompactCount as e}from"../../../../utils/common.mjs";import{trackRecommendListClick as t}from"../../../../utils/tracking.mjs";import{Image as n}from"../../../ui/image.mjs";import{Box as r}from"../../../ui/box.mjs";import{Text as i}from"../../../ui/text.mjs";import a from"../../../ui/link.mjs";import o from"../../../../assets/icons/view.mjs";import{Fragment as s,jsx as c,jsxs as l}from"react/jsx-runtime";function u(t){let n=Number(t||0);return Number.isNaN(n)||n<=0?``:e(n)}function d({data:e}){return e?c(r,{className:`flex flex-col gap-[12px]`,children:(Array.isArray(e)?e:[e]).map((e,d)=>{if(!e||typeof e!=`object`)return null;let{id:f,title:p,desc:m,cover:h,tagImageUrl:g,showEpisode:_,episodeText:v,showPlayCount:y,play_count:b}=e,x=p||``,S=f?`/video/${f}/${x?encodeURIComponent(x):``}`:`#`,C=v==null?``:String(v).trim(),w=(_??!0)&&C!==``,T=y??!0,E=u(b)||`0`;return c(r,{children:c(a,{href:S,className:`block`,onClick:()=>t({page_key:`home`,page_name:`首页`,recommend_id:f,recommend_trace_info:x}),children:l(r,{className:`relative h-[204px] w-full overflow-hidden rounded-[8px] bg-[rgba(6,3,20,0.5)]`,children:[l(r,{className:`relative h-[134px] w-full overflow-hidden rounded-t-[8px]`,children:[h&&c(n,{src:h,alt:x||`封面`,fill:!0,objectFit:`cover`}),g&&String(g).trim()&&c(r,{className:`absolute left-[16px] top-[12px]`,children:c(r,{className:`inline-flex items-center justify-center rounded-[4px] px-[4px] py-[4px]`,style:{background:`linear-gradient(90deg, #CA3FE9 0%, #9756E3 100%)`},children:c(n,{src:String(g),alt:``,width:75,height:14,className:`h-[14px] w-auto object-contain`})})}),l(r,{className:`absolute bottom-[12px] left-[16px] right-[16px] flex items-center justify-between`,children:[c(r,{className:`flex items-center gap-[4px]`,children:T&&l(s,{children:[c(o,{className:`size-[22px] text-white opacity-80`}),c(i,{className:`text-[14px] leading-[20px] text-white`,children:E})]})}),w&&c(i,{className:`text-[14px] leading-[20px] text-white`,children:C})]})]}),c(r,{className:`px-[16px] pt-[12px]`,children:l(r,{className:`flex flex-col gap-[2px]`,children:[c(i,{className:`line-clamp-1 text-[16px] font-medium leading-[22px] text-white`,children:x}),m&&c(i,{className:`line-clamp-1 text-[14px] leading-[20px] text-white/50`,children:m})]})})]})})},f||x||`large-grid-item-${d}`)})}):null}export{d as LargeGridItemClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{isClient as e}from"../../../../utils/common.mjs";import{pContentBatchGetVideoDetail as t}from"../../../../service/generated/client.mjs";import{Box as n}from"../../../ui/box.mjs";import{Text as r}from"../../../ui/text.mjs";import i from"../../../ui/loading.mjs";import a from"../../../ui/link.mjs";import{useSingleFirstRowHeight as o}from"../../../../hooks/use-first-row-height.mjs";import{useMinDurationLoading as s}from"../../../../hooks/use-min-duration-loading.mjs";import c from"../../../../assets/icons/common/right_arrow.mjs";import{isFeedAdItem as l}from"../advertisement/feed-ad/index.mjs";import{LargeGridItemClient as u}from"./card-item.mjs";import{largeFeatureGridInspectorDefaultProps as d}from"./schema.mjs";import{useEffect as f,useMemo as p,useRef as m,useState as h}from"react";import{jsx as g,jsxs as _}from"react/jsx-runtime";const v=[],y=d.data??[];function b(e){return e==null}function x(e,t){return b(e)?t:e}function S(e){return typeof e==`string`?e.trim():``}function C(e){return S(e)}function w(e){let t=Number(e);if(!(!Number.isFinite(t)||t<0))return t}function T(e){let t=e,n=S(e.update_status)===`0`,r=(Array.isArray(t.episodes)?t.episodes.length:0)||(Array.isArray(e.video_episodes)?e.video_episodes.length:0)||(Array.isArray(e.links)?e.links.length:0)||(w(e.episode_cnt)??0);return!Number.isFinite(r)||r<=0?``:`${n?`更新至`:`全`}${Math.floor(r)}集`}function E(e,t){return t?{...e,...t,id:x(t.id,e.id),cover:x(t.cover,e.cover),title:x(t.title,e.title),desc:x(t.desc,e.desc),play_count:x(t.play_count,e.play_count),showPlayCount:t.showPlayCount??e.showPlayCount,episodeText:x(t.episodeText,e.episodeText),showEpisode:t.showEpisode??e.showEpisode,useContentCover:t.useContentCover??e.useContentCover,tagImageUrl:x(t.tagImageUrl,e.tagImageUrl)}:e}function D(e,t){if(!t)return e;let n=e.items;return{...e,...t,title:x(t.title,e.title),moreUrl:x(t.moreUrl,e.moreUrl),moreLinkType:t.moreLinkType??e.moreLinkType,items:n?E(n,t.items):t.items}}function O({mode:d=`renderer`,data:b=v}){let x=d===`editor`,E=b??v,O=Array.isArray(E)&&E.length>0,k=p(()=>O?[D(y[0],E[0])]:y,[O,E]),[A,j]=h(k),M=m(``),N=m(null),{isLoading:P,show:F,hide:I,cancel:L}=s(500);f(()=>{j(k)},[k]);let R=o({enabled:!x,containerRef:N,itemRef:N,deps:[A.length]}),z=p(()=>{if(x||!O)return``;let e=k.map(e=>C(e?.items?.id)).filter(Boolean);return Array.from(new Set(e)).join(`,`)},[O,x,k]);if(f(()=>{if(x||!e()||!z||M.current===z)return;M.current=z;let n=!1;async function r(){try{F();let e=await t({ids:z.split(`,`).filter(Boolean)},{cache:`no-store`}),r=Array.isArray(e.data?.videos)?e.data.videos:[],i=new Map;if(r.forEach(e=>{let t=C(e.video_id||e.id||e.mid);t&&i.set(t,e)}),n)return;j(e=>e.map(e=>{let t=e.items;if(!t||l(t))return e;let n=C(t.id),r=n?i.get(n):void 0;if(!r)return e;let a=w(r.play_count)??w(r.browse_count)??w(r.view_count),o=T(r),s=S(r.name),c=S(r.description||r.content_description),u=t.useContentCover?S(r.img_x||r.img_y):``;return{...e,items:{...t,title:s||t.title,desc:c||t.desc,...u?{cover:u}:{},play_count:a??t.play_count,episodeText:o||t.episodeText}}}))}catch(e){console.error(`大图推荐刷新首屏失败(client)`,e)}finally{n||I()}}return r(),()=>{n=!0,L()}},[L,z,I,x,F]),!A||A.length===0)return null;let B=A[0],V=B?.title,H=B?.moreUrl,U=R>0?R/2:160,W=!x&&P;return _(n,{className:`py-4 no-vw-x-16`,children:[_(n,{className:`flex items-center justify-between mb-[10px] h-[24px]`,children:[V&&g(r,{as:`h2`,className:`text-[18px] font-bold text-text1 line-clamp-1 flex-1 min-w-0 mr-[12px]`,children:V}),H&&_(a,{href:H,className:`flex items-center text-[14px] text-text2 ml-auto`,children:[`更多`,g(c,{className:`ml-[2px] h-[12px] w-[12px] text-text2`})]})]}),_(n,{className:`relative`,children:[A.map((e,t)=>{let{items:r}=e;return r?g(n,{ref:t===0?N:void 0,className:t>0?`mt-3`:``,children:g(u,{data:r})},`large-feature-grid-items-${t}`):null}),W&&g(n,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),W&&g(n,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:U},"aria-hidden":!0,children:g(i,{size:`large`,showLabel:!1,className:`text-theme5`})})]})]})}export{O as LargeFeatureGridClient};
2
+ "use client";import{isClient as e}from"../../../../utils/common.mjs";import{pContentBatchGetVideoDetail as t}from"../../../../service/generated/client.mjs";import{trackAppPageView as n}from"../../../../utils/tracking.mjs";import{Box as r}from"../../../ui/box.mjs";import{Text as i}from"../../../ui/text.mjs";import a from"../../../ui/loading.mjs";import o from"../../../ui/link.mjs";import{useSingleFirstRowHeight as s}from"../../../../hooks/use-first-row-height.mjs";import{useMinDurationLoading as c}from"../../../../hooks/use-min-duration-loading.mjs";import l from"../../../../assets/icons/common/right_arrow.mjs";import{isFeedAdItem as u}from"../advertisement/feed-ad/index.mjs";import{LargeGridItemClient as d}from"./card-item.mjs";import{largeFeatureGridInspectorDefaultProps as f}from"./schema.mjs";import{useEffect as p,useMemo as m,useRef as h,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";const y=[],b=f.data??[];function x(e){return e==null}function S(e,t){return x(e)?t:e}function C(e){return typeof e==`string`?e.trim():``}function w(e){return C(e)}function T(e){let t=Number(e);if(!(!Number.isFinite(t)||t<0))return t}function E(e){let t=e,n=C(e.update_status)===`0`,r=(Array.isArray(t.episodes)?t.episodes.length:0)||(Array.isArray(e.video_episodes)?e.video_episodes.length:0)||(Array.isArray(e.links)?e.links.length:0)||(T(e.episode_cnt)??0);return!Number.isFinite(r)||r<=0?``:`${n?`更新至`:`全`}${Math.floor(r)}集`}function D(e,t){return t?{...e,...t,id:S(t.id,e.id),cover:S(t.cover,e.cover),title:S(t.title,e.title),desc:S(t.desc,e.desc),play_count:S(t.play_count,e.play_count),showPlayCount:t.showPlayCount??e.showPlayCount,episodeText:S(t.episodeText,e.episodeText),showEpisode:t.showEpisode??e.showEpisode,useContentCover:t.useContentCover??e.useContentCover,tagImageUrl:S(t.tagImageUrl,e.tagImageUrl)}:e}function O(e,t){if(!t)return e;let n=e.items;return{...e,...t,title:S(t.title,e.title),moreUrl:S(t.moreUrl,e.moreUrl),moreLinkType:t.moreLinkType??e.moreLinkType,items:n?D(n,t.items):t.items}}function k({mode:f=`renderer`,data:x=y}){let S=f===`editor`,D=x??y,k=Array.isArray(D)&&D.length>0,A=m(()=>k?[O(b[0],D[0])]:b,[k,D]),[j,M]=g(A),N=h(``),P=h(null),F=h(null),I=h(!1),{isLoading:L,show:R,hide:z,cancel:B}=c(500);p(()=>{M(A)},[A]);let V=s({enabled:!S,containerRef:P,itemRef:P,deps:[j.length]}),H=m(()=>{if(S||!k)return``;let e=A.map(e=>w(e?.items?.id)).filter(Boolean);return Array.from(new Set(e)).join(`,`)},[k,S,A]);if(p(()=>{if(S||!e()||!H||N.current===H)return;N.current=H;let n=!1;async function r(){try{R();let e=await t({ids:H.split(`,`).filter(Boolean)},{cache:`no-store`}),r=Array.isArray(e.data?.videos)?e.data.videos:[],i=new Map;if(r.forEach(e=>{let t=w(e.video_id||e.id||e.mid);t&&i.set(t,e)}),n)return;M(e=>e.map(e=>{let t=e.items;if(!t||u(t))return e;let n=w(t.id),r=n?i.get(n):void 0;if(!r)return e;let a=T(r.play_count)??T(r.browse_count)??T(r.view_count),o=E(r),s=C(r.name),c=C(r.description||r.content_description),l=t.useContentCover?C(r.img_x||r.img_y):``;return{...e,items:{...t,title:s||t.title,desc:c||t.desc,...l?{cover:l}:{},play_count:a??t.play_count,episodeText:o||t.episodeText}}}))}catch(e){console.error(`大图推荐刷新首屏失败(client)`,e)}finally{n||z()}}return r(),()=>{n=!0,B()}},[B,H,z,S,R]),p(()=>{if(S)return;let e=F.current;if(!e)return;let t=new IntersectionObserver(e=>{if(e[0]?.isIntersecting&&!I.current){I.current=!0;let e=j[0]?.title||``;n({page_key:`home`,page_name:`首页`,current_page_key:e,current_page_name:e}),t.disconnect()}},{threshold:.5});return t.observe(e),()=>{t.disconnect()}},[S,j]),!j||j.length===0)return null;let U=j[0],W=U?.title,G=U?.moreUrl,K=V>0?V/2:160,q=!S&&L;return v(r,{ref:F,className:`py-4 no-vw-x-16`,children:[v(r,{className:`flex items-center justify-between mb-[10px] h-[24px]`,children:[W&&_(i,{as:`h2`,className:`text-[18px] font-bold text-text1 line-clamp-1 flex-1 min-w-0 mr-[12px]`,children:W}),G&&v(o,{href:G,className:`flex items-center text-[14px] text-text2 ml-auto`,children:[`更多`,_(l,{className:`ml-[2px] h-[12px] w-[12px] text-text2`})]})]}),v(r,{className:`relative`,children:[j.map((e,t)=>{let{items:n}=e;return n?_(r,{ref:t===0?P:void 0,className:t>0?`mt-3`:``,children:_(d,{data:n})},`large-feature-grid-items-${t}`):null}),q&&_(r,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),q&&_(r,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:K},"aria-hidden":!0,children:_(a,{size:`large`,showLabel:!1,className:`text-theme5`})})]})]})}export{k as LargeFeatureGridClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{trackPageLifecycle as e}from"../../../utils/tracking.mjs";import{usePathname as t}from"next/navigation";import{useEffect as n,useRef as r}from"react";const i=[`zh-CN`,`en`];function a(e){for(let t of i){if(e===`/${t}`)return`/`;if(e.startsWith(`/${t}/`))return e.slice(t.length+1)}return e}function o(e){if(e===`/`||e.startsWith(`/category/`)||e.startsWith(`/domain/`))return{key:`page_home`,name:`首页`,path:e};if(e.startsWith(`/video/`))return{key:`page_video_detail`,name:`详情页`,path:e};if(e.startsWith(`/post/`))return{key:`page_post_detail`,name:`详情页`,path:e};if(e.startsWith(`/search-result`))return{key:`page_search_result`,name:`搜索结果`,path:e};if(e.startsWith(`/search`))return{key:`page_search`,name:`搜索`,path:e};if(e.startsWith(`/profile/`))return{key:`page_user`,name:`个人中心`,path:e};if(e===`/settings`)return{key:`page_settings`,name:`设置`,path:e};if(e===`/edit`)return{key:`page_edit_profile`,name:`编辑资料`,path:e};if(e===`/publish`)return{key:`page_publish`,name:`发布`,path:e};if(e.startsWith(`/feed-series/`))return{key:`page_feed_series`,name:`短剧`,path:e};if(e===`/feedback`)return{key:`page_feedback`,name:`意见反馈`,path:e};if(e===`/collection/add`)return{key:`page_collection_add`,name:`添加到合集`,path:e};if(e===`/collection/create`)return{key:`page_collection_create`,name:`创建合集`,path:e};if(e.startsWith(`/collection/`))return{key:`page_collection_detail`,name:`合集详情`,path:e};if(e===`/fans`)return{key:`page_fans`,name:`粉丝`,path:e};if(e===`/followed`)return{key:`page_followed`,name:`关注`,path:e};if(e===`/user/follow`)return{key:`page_user_follow`,name:`关注`,path:e};if(e===`/user/mine`)return{key:`page_mine`,name:`我的`,path:e};if(e===`/user/message`)return{key:`page_message`,name:`消息`,path:e};if(e.startsWith(`/video-list`))return{key:`page_video_list`,name:`视频列表`,path:e};if(e.startsWith(`/feed-series`))return{key:`page_feed_series`,name:`短剧`,path:e};if(e===`/hot`)return{key:`page_hot`,name:`热门`,path:e};if(e===`/ranking`)return{key:`page_ranking`,name:`排行榜`,path:e};if(e.startsWith(`/tag/`))return{key:`page_tag`,name:`标签`,path:e};let t=e.split(`/`)[1]||`unknown`;return{key:`page_${t}`,name:t,path:e}}function s(){let i=a(t()??`/`),s=r(Date.now()),c=r(null),l=r(!0);return n(()=>{let t=Date.now(),n=c.current,r=o(i);if(n&&n.key!==r.key){let r=Math.floor((t-s.current)/1e3);e({lifecycle_status:`hide`,page_key:n.key,page_name:n.name,page_path:n.path,duration:r})}c.current=r,s.current=t,l.current=typeof document<`u`?document.visibilityState!==`hidden`:!0,e({lifecycle_status:`show`,page_key:r.key,page_name:r.name,page_path:r.path,duration:0});let a=setInterval(()=>{if(!l.current)return;let t=c.current;if(!t)return;let n=Math.floor((Date.now()-s.current)/1e3);e({lifecycle_status:`show`,page_key:t.key,page_name:t.name,page_path:t.path,duration:n})},6*1e3);return()=>clearInterval(a)},[i]),n(()=>{function t(){if(!l.current)return;l.current=!1;let t=c.current;if(!t)return;let n=Math.floor((Date.now()-s.current)/1e3);e({lifecycle_status:`hide`,page_key:t.key,page_name:t.name,page_path:t.path,duration:n})}function n(){if(l.current)return;l.current=!0,s.current=Date.now();let t=c.current;t&&e({lifecycle_status:`show`,page_key:t.key,page_name:t.name,page_path:t.path,duration:0})}function r(){document.visibilityState===`hidden`?t():n()}return document.addEventListener(`visibilitychange`,r),window.addEventListener(`pagehide`,t),()=>{document.removeEventListener(`visibilitychange`,r),window.removeEventListener(`pagehide`,t)}},[]),null}export{s as default};
2
+ "use client";import{trackPageLifecycle as e}from"../../../utils/tracking.mjs";import{usePathname as t}from"next/navigation";import{useEffect as n,useRef as r}from"react";const i=[`zh-CN`,`en`];function a(e){for(let t of i){if(e===`/${t}`)return`/`;if(e.startsWith(`/${t}/`))return e.slice(t.length+1)}return e}function o(e){if(e===`/`||e.startsWith(`/category/`)||e.startsWith(`/domain/`))return{key:`page_home`,name:`首页`,path:e};if(e.startsWith(`/video/`))return{key:`page_video_detail`,name:`详情页`,path:e};if(e.startsWith(`/post/`))return{key:`page_post_detail`,name:`详情页`,path:e};if(e.startsWith(`/search-result`))return{key:`page_search_result`,name:`搜索结果`,path:e};if(e.startsWith(`/search`))return{key:`page_search`,name:`搜索`,path:e};if(e.startsWith(`/profile/`))return{key:`page_user`,name:`个人中心`,path:e};if(e===`/settings`)return{key:`page_settings`,name:`设置`,path:e};if(e===`/edit`)return{key:`page_edit_profile`,name:`编辑资料`,path:e};if(e===`/publish`)return{key:`page_publish`,name:`发布`,path:e};if(e.startsWith(`/feed-series/`))return{key:`page_feed_series`,name:`短剧`,path:e};if(e===`/feedback`)return{key:`page_feedback`,name:`意见反馈`,path:e};if(e===`/collection/add`)return{key:`page_collection_add`,name:`添加到合集`,path:e};if(e===`/collection/create`)return{key:`page_collection_create`,name:`创建合集`,path:e};if(e.startsWith(`/collection/`))return{key:`page_collection_detail`,name:`合集详情`,path:e};if(e===`/fans`)return{key:`page_fans`,name:`粉丝`,path:e};if(e===`/followed`)return{key:`page_followed`,name:`关注`,path:e};if(e===`/user/follow`)return{key:`page_user_follow`,name:`关注`,path:e};if(e===`/user/mine`)return{key:`page_mine`,name:`我的`,path:e};if(e===`/user/message`)return{key:`page_message`,name:`消息`,path:e};if(e.startsWith(`/video-list`))return{key:`page_video_list`,name:`视频列表`,path:e};if(e.startsWith(`/feed-series`))return{key:`page_feed_series`,name:`短剧`,path:e};if(e===`/hot`)return{key:`page_hot`,name:`热门`,path:e};if(e===`/ranking`)return{key:`page_ranking`,name:`排行榜`,path:e};if(e.startsWith(`/tag/`))return{key:`page_tag`,name:`标签`,path:e};let t=e.split(`/`)[1]||`unknown`;return{key:`page_${t}`,name:t,path:e}}function s(){let i=a(t()??`/`),s=r(Date.now()),c=r(null),l=r(!0);return n(()=>{let t=Date.now(),n=c.current,r=o(i);if(n&&n.key!==r.key){let r=Math.floor((t-s.current)/1e3);e({lifecycle_status:`hide`,page_key:n.key,page_name:n.name,page_path:n.path,duration:r})}c.current=r,s.current=t,l.current=typeof document<`u`?document.visibilityState!==`hidden`:!0,e({lifecycle_status:`show`,page_key:r.key,page_name:r.name,page_path:r.path,duration:0});let a=setInterval(()=>{if(!l.current)return;let t=c.current;if(!t)return;let n=Math.floor((Date.now()-s.current)/1e3);e({lifecycle_status:`show`,page_key:t.key,page_name:t.name,page_path:t.path,duration:n})},600*1e3);return()=>clearInterval(a)},[i]),n(()=>{function t(){if(!l.current)return;l.current=!1;let t=c.current;if(!t)return;let n=Math.floor((Date.now()-s.current)/1e3);e({lifecycle_status:`hide`,page_key:t.key,page_name:t.name,page_path:t.path,duration:n})}function n(){if(l.current)return;l.current=!0,s.current=Date.now();let t=c.current;t&&e({lifecycle_status:`show`,page_key:t.key,page_name:t.name,page_path:t.path,duration:0})}function r(){document.visibilityState===`hidden`?t():n()}return document.addEventListener(`visibilitychange`,r),window.addEventListener(`pagehide`,t),()=>{document.removeEventListener(`visibilitychange`,r),window.removeEventListener(`pagehide`,t)}},[]),null}export{s as default};
@@ -6,7 +6,7 @@ import * as class_variance_authority_types0 from "class-variance-authority/types
6
6
  //#region components/ui/badge.d.ts
7
7
  /** badgeVariants 工具定义。 */
8
8
  declare const badgeVariants: (props?: ({
9
- variant?: "link" | "default" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
9
+ variant?: "default" | "destructive" | "secondary" | "outline" | "ghost" | "link" | null | undefined;
10
10
  } & class_variance_authority_types0.ClassProp) | undefined) => string;
11
11
  /** Badge 组件。 */
12
12
  declare function Badge({
@@ -7,8 +7,8 @@ import * as class_variance_authority_types0 from "class-variance-authority/types
7
7
  //#region components/ui/button.d.ts
8
8
  /** buttonVariants 工具定义。 */
9
9
  declare const buttonVariants: (props?: ({
10
- variant?: "link" | "default" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
11
- size?: "icon" | "default" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
10
+ variant?: "default" | "destructive" | "secondary" | "outline" | "ghost" | "link" | null | undefined;
11
+ size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
12
12
  } & class_variance_authority_types0.ClassProp) | undefined) => string;
13
13
  /** Button 组件属性。 */
14
14
  type ButtonProps = Button.Props & VariantProps<typeof buttonVariants> & {
@@ -34,7 +34,7 @@ type EmptyStateProps = React.ComponentProps<'div'> & {
34
34
  };
35
35
  /** emptyMediaVariants 工具定义。 */
36
36
  declare const emptyMediaVariants: (props?: ({
37
- variant?: "icon" | "default" | null | undefined;
37
+ variant?: "default" | "icon" | null | undefined;
38
38
  } & class_variance_authority_types0.ClassProp) | undefined) => string;
39
39
  /** EmptyMedia 组件。 */
40
40
  declare function EmptyMedia({
@@ -82,7 +82,7 @@ declare function Item({
82
82
  }: ItemProps): React.ReactElement;
83
83
  /** itemMediaVariants 工具定义。 */
84
84
  declare const itemMediaVariants: (props?: ({
85
- variant?: "icon" | "default" | "image" | null | undefined;
85
+ variant?: "default" | "icon" | "image" | null | undefined;
86
86
  } & class_variance_authority_types0.ClassProp) | undefined) => string;
87
87
  /** ItemMedia 组件。 */
88
88
  declare function ItemMedia({
@@ -6,10 +6,10 @@ type InspectorFieldOption<T> = Omit<T, 'type'>;
6
6
  declare const stringInspectorFieldSchema: z.ZodObject<{
7
7
  type: z.ZodLiteral<"string">;
8
8
  fieldType: z.ZodOptional<z.ZodEnum<{
9
- select: "select";
10
9
  input: "input";
11
10
  textarea: "textarea";
12
11
  color: "color";
12
+ select: "select";
13
13
  }>>;
14
14
  defaultValue: z.ZodOptional<z.ZodString>;
15
15
  label: z.ZodOptional<z.ZodString>;
@@ -68,10 +68,10 @@ type ObjectInspectorFieldOption = InspectorFieldOption<z.infer<typeof objectInsp
68
68
  declare const componentInspectorFieldMetaSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
69
69
  type: z.ZodLiteral<"string">;
70
70
  fieldType: z.ZodOptional<z.ZodEnum<{
71
- select: "select";
72
71
  input: "input";
73
72
  textarea: "textarea";
74
73
  color: "color";
74
+ select: "select";
75
75
  }>>;
76
76
  defaultValue: z.ZodOptional<z.ZodString>;
77
77
  label: z.ZodOptional<z.ZodString>;
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";function e(e,t,n,r,i){if(typeof window>`u`)return;console.log(`trackPageClick${r}`);let a=n?.pageX??0,o=n?.pageY??0,s=window.innerWidth||1,c=window.innerHeight||1,l={page_key:e,page_name:t,element_name:r,click_page_x:Math.round(a),click_page_y:Math.round(o),click_x_percent:Math.round(a/s*100),click_y_percent:Math.round(o/c*100),screen_width:window.screen.width,screen_height:window.screen.height,recommend_trace_id:``,...i};window.WebSDK?.track?.({event:`page_click`,payload:l}),window.sensors?.track?.(`page_click`,l)}function t(e){if(console.log(`trackrecommend_list_click`,e.page_name),typeof window>`u`)return;let t={recommend_trace_id:``,recommend_id:``,recommend_trace_info:``,...e};window.WebSDK?.track?.({event:`recommend_list_click`,payload:t}),window.sensors?.track?.(`recommend_list_click`,t)}const n=new Set;function r(e){if(typeof window>`u`)return;let t=e.ad_id.split(`,`).map(e=>e.trim()).filter(Boolean),r=(e.creative_id??``).split(`,`).map(e=>e.trim()),i=t.reduce((t,r,i)=>(n.has(`${e.ad_slot_key}::${r}`)||t.push(i),t),[]);if(i.length===0)return;for(let r of i)n.add(`${e.ad_slot_key}::${t[r]}`);let a={...e,ad_id:i.map(e=>t[e]).join(`,`),creative_id:i.map(e=>r[e]??``).join(`,`)};console.log(`[trackAdImpression]`,a.ad_slot_key,a.ad_id),window.WebSDK?.track?.({event:`ad_impression`,payload:a}),window.sensors?.track?.(`ad_impression`,a)}function i(e){typeof window>`u`||(console.log(`[trackAdvertising]`,e.advertising_key,e.event_type),window.WebSDK?.track?.({event:`advertising`,payload:e}),window.sensors?.track?.(`advertising`,e))}function a(e){typeof window>`u`||(console.log(`navigaition`,e.navigation_name),window.WebSDK?.track?.({event:`navigation`,payload:e}),window.sensors?.track?.(`navigation`,e))}function o(e){typeof window>`u`||(console.log(`[trackVideoEvent]`,e.video_behavior_key,e.video_id),window.WebSDK?.track?.({event:`video_event`,payload:e}),window.sensors?.track?.(`video_event`,e))}function s(e){typeof window>`u`||(console.log(`keywordclick`,e.keyword),window.WebSDK?.track?.({event:`keyword_click`,payload:e}),window.sensors?.track?.(`keyword_click`,e))}function c(e){if(typeof window>`u`)return;let t={creative_id:``,...e};console.log(`[trackAdClick]`,t.ad_slot_key,t.ad_id),window.WebSDK?.track?.({event:`ad_click`,payload:t}),window.sensors?.track?.(`ad_click`,t)}function l(e){if(console.log(`trackPageView`,e.page_name),typeof window>`u`)return;let t={user_type:`normal`,referrer_page_key:``,referrer_page_name:``,page_load_time:0,recommend_trace_id:``,...e};window.WebSDK?.track?.({event:`app_page_view`,payload:t}),window.sensors?.track?.(`app_page_view`,t)}function u(e){typeof window>`u`||(console.log(`[trackPageLifecycle]`,e.page_name,e.duration,e.lifecycle_status),window.WebSDK?.track?.({event:`page_lifecycle`,payload:e}),window.sensors?.track?.(`page_lifecycle`,e))}export{c as trackAdClick,r as trackAdImpression,i as trackAdvertising,l as trackAppPageView,s as trackKeywordClick,a as trackNavigation,e as trackPageClick,u as trackPageLifecycle,t as trackRecommendListClick,o as trackVideoEvent};
2
+ "use client";function e(e,t,n,r,i){if(typeof window>`u`)return;let a=n?.pageX??0,o=n?.pageY??0,s=window.innerWidth||1,c=window.innerHeight||1,l={page_key:e,page_name:t,element_name:r,click_page_x:Math.round(a),click_page_y:Math.round(o),click_x_percent:Math.round(a/s*100),click_y_percent:Math.round(o/c*100),screen_width:window.screen.width,screen_height:window.screen.height,recommend_trace_id:``,...i};window.WebSDK?.track?.({event:`page_click`,payload:l}),window.sensors?.track?.(`page_click`,l)}function t(e){if(typeof window>`u`)return;let t={recommend_trace_id:``,recommend_id:``,recommend_trace_info:``,...e};window.WebSDK?.track?.({event:`recommend_list_click`,payload:t}),window.sensors?.track?.(`recommend_list_click`,t)}const n=new Set;function r(e){if(typeof window>`u`)return;let t=e.ad_id.split(`,`).map(e=>e.trim()).filter(Boolean),r=(e.creative_id??``).split(`,`).map(e=>e.trim()),i=t.reduce((t,r,i)=>(n.has(`${e.ad_slot_key}::${r}`)||t.push(i),t),[]);if(i.length===0)return;for(let r of i)n.add(`${e.ad_slot_key}::${t[r]}`);let a={...e,ad_id:i.map(e=>t[e]).join(`,`),creative_id:i.map(e=>r[e]??``).join(`,`)};window.WebSDK?.track?.({event:`ad_impression`,payload:a}),window.sensors?.track?.(`ad_impression`,a)}function i(e){typeof window>`u`||(window.WebSDK?.track?.({event:`advertising`,payload:e}),window.sensors?.track?.(`advertising`,e))}function a(e){typeof window>`u`||(window.WebSDK?.track?.({event:`navigation`,payload:e}),window.sensors?.track?.(`navigation`,e))}function o(e){typeof window>`u`||(window.WebSDK?.track?.({event:`video_event`,payload:e}),window.sensors?.track?.(`video_event`,e))}function s(e){typeof window>`u`||(window.WebSDK?.track?.({event:`keyword_click`,payload:e}),window.sensors?.track?.(`keyword_click`,e))}function c(e){if(typeof window>`u`)return;let t={creative_id:``,...e};window.WebSDK?.track?.({event:`ad_click`,payload:t}),window.sensors?.track?.(`ad_click`,t)}function l(e){if(typeof window>`u`)return;let t={user_type:`normal`,referrer_page_key:``,referrer_page_name:``,page_load_time:0,recommend_trace_id:``,...e};window.WebSDK?.track?.({event:`app_page_view`,payload:t}),window.sensors?.track?.(`app_page_view`,t)}function u(e){typeof window>`u`||(window.WebSDK?.track?.({event:`page_lifecycle`,payload:e}),window.sensors?.track?.(`page_lifecycle`,e))}export{c as trackAdClick,r as trackAdImpression,i as trackAdvertising,l as trackAppPageView,s as trackKeywordClick,a as trackNavigation,e as trackPageClick,u as trackPageLifecycle,t as trackRecommendListClick,o as trackVideoEvent};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@funhub/platform",
3
3
  "type": "module",
4
- "version": "0.2.22",
4
+ "version": "0.2.23",
5
5
  "private": false,
6
6
  "sideEffects": [
7
7
  "**/*.css"