@funhub/platform 0.1.36 → 0.1.37

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.
Files changed (72) hide show
  1. package/dist/components/biz/business/detail/detail-operate.mjs +1 -1
  2. package/dist/components/biz/business/detail/materials/editor-preview.mjs +2 -0
  3. package/dist/components/biz/business/detail/materials/registry.d.mts +1 -1
  4. package/dist/components/biz/business/detail/materials/video-detail-actions/client.mjs +1 -1
  5. package/dist/components/biz/business/detail/materials/video-detail-info/client.d.mts +1 -1
  6. package/dist/components/biz/business/detail/materials/video-detail-info/client.mjs +1 -1
  7. package/dist/components/biz/business/detail/materials/video-detail-info/material.mjs +1 -1
  8. package/dist/components/biz/business/detail/materials/video-detail-info/schema.d.mts +2 -2
  9. package/dist/components/biz/business/detail/materials/video-detail-info/server.d.mts +1 -1
  10. package/dist/components/biz/business/detail/materials/video-detail-info-title/client.d.mts +1 -1
  11. package/dist/components/biz/business/detail/materials/video-detail-info-title/client.mjs +1 -1
  12. package/dist/components/biz/business/detail/materials/video-detail-info-title/material.mjs +1 -1
  13. package/dist/components/biz/business/detail/materials/video-detail-info-title/schema.d.mts +2 -2
  14. package/dist/components/biz/business/detail/materials/video-detail-info-title/server.d.mts +1 -1
  15. package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/client.d.mts +1 -1
  16. package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/client.mjs +1 -1
  17. package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/material.mjs +1 -1
  18. package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/schema.d.mts +2 -2
  19. package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/server.d.mts +1 -1
  20. package/dist/components/biz/business/detail/materials/video-detail-player/client.mjs +1 -1
  21. package/dist/components/biz/business/detail/materials/video-detail-recommend/client.mjs +1 -1
  22. package/dist/components/biz/business/detail/materials/video-detail-recommend/material.d.mts +1 -1
  23. package/dist/components/biz/business/detail/materials/video-detail-recommend/material.mjs +1 -1
  24. package/dist/components/biz/business/detail/materials/video-detail-recommend/schema.d.mts +1 -1
  25. package/dist/components/biz/business/detail/materials/video-detail-recommend/schema.mjs +1 -1
  26. package/dist/components/biz/business/detail/video-hero.mjs +1 -1
  27. package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
  28. package/dist/components/biz/business/home-recommend/shared/home-recommend-preview.mjs +2 -0
  29. package/dist/components/biz/business/home-recommend/variants/home-recommend-grid/inspector-schema.d.mts +4 -0
  30. package/dist/components/biz/business/home-recommend/variants/home-recommend-grid/inspector-schema.mjs +1 -1
  31. package/dist/components/biz/business/home-recommend/variants/home-recommend-grid/material.d.mts +2 -0
  32. package/dist/components/biz/business/home-recommend/variants/home-recommend-grid/material.mjs +1 -1
  33. package/dist/components/biz/business/home-recommend/variants/home-recommend-grid/runtime/client.mjs +1 -1
  34. package/dist/components/biz/business/home-recommend/variants/home-recommend-grid/schema/component.mjs +1 -1
  35. package/dist/components/biz/business/home-recommend/variants/home-recommend-grid/server.mjs +1 -1
  36. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/defaults/default-props.d.mts +1 -3
  37. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/defaults/default-props.mjs +1 -1
  38. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/inspector-schema.d.mts +4 -2
  39. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/inspector-schema.mjs +1 -1
  40. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/material.d.mts +2 -1
  41. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/material.mjs +1 -1
  42. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/runtime/client.mjs +1 -1
  43. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/schema/component.mjs +1 -1
  44. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/schema/props.schema.mjs +1 -1
  45. package/dist/components/biz/business/home-recommend/variants/home-recommend-waterfall/server.mjs +1 -1
  46. package/dist/components/biz/business/large-feature-grid/client.mjs +1 -1
  47. package/dist/components/biz/business/large-feature-grid/material.d.mts +4 -3
  48. package/dist/components/biz/business/large-feature-grid/material.mjs +1 -1
  49. package/dist/components/biz/business/large-feature-grid/schema.mjs +1 -1
  50. package/dist/components/biz/business/marquee/material.d.mts +1 -1
  51. package/dist/components/biz/business/marquee/schema.d.mts +1 -1
  52. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.mjs +1 -1
  53. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/server.mjs +1 -1
  54. package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.mjs +1 -1
  55. package/dist/components/biz/business/profile/profile-main/tabs/history-tab/server.mjs +1 -1
  56. package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.mjs +1 -1
  57. package/dist/components/biz/business/profile/profile-main/tabs/like-tab/server.mjs +1 -1
  58. package/dist/components/biz/business/search-history/client.mjs +1 -1
  59. package/dist/components/biz/business/shortcut-grid/material.d.mts +1 -1
  60. package/dist/components/biz/business/shortcut-grid/schema.d.mts +1 -1
  61. package/dist/components/biz/business/shortcut-grid/schema.mjs +1 -1
  62. package/dist/components/common/list/collection-list/collection-list-item.d.mts +1 -0
  63. package/dist/components/common/list/collection-list/collection-list-item.mjs +1 -1
  64. package/dist/components/ui/badge.d.mts +1 -1
  65. package/dist/components/ui/button.d.mts +1 -1
  66. package/dist/components/ui/image.d.mts +4 -4
  67. package/dist/utils/schema/material.d.mts +1 -1
  68. package/package.json +1 -1
  69. package/dist/components/biz/business/large-feature-grid/client.d.mts +0 -15
  70. package/dist/components/biz/business/large-feature-grid/default.mjs +0 -2
  71. package/dist/components/biz/business/large-feature-grid/server.d.mts +0 -13
  72. package/dist/components/biz/business/large-feature-grid/types.d.mts +0 -53
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useUserStore as e}from"../../../../store/modules/user-store.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{useDeleteRequest as r}from"../../../../hooks/query/use-query.mjs";import{useLoginModalStore as i}from"../../../../store/modules/login-modal-store.mjs";import{debounceFun as a}from"../../../../utils/tools.mjs";import o from"../../../common/interaction-animations.module.mjs";import s from"../../../common/collection-popup/index.mjs";import{useContentOperate as c}from"../../../../hooks/use-content-operate.mjs";import l from"../../../../assets/icons/detail/check-ok.mjs";import u from"../../../../assets/icons/detail/collect_nor.mjs";import d from"../../../../assets/icons/detail/collect_sel.mjs";import f from"../../../../assets/icons/detail/give_like.mjs";import p from"../../../../assets/icons/detail/give_like_sel.mjs";import m from"../../../../assets/icons/detail/share.mjs";import{useCallback as h,useMemo as g,useRef as _,useState as v}from"react";import{jsx as y,jsxs as b}from"react/jsx-runtime";import{toast as x}from"sonner";import{useTranslations as S}from"next-intl";function C({information:C,onUpdate:E}){let D=S(`components.biz.business.detail`),[O,k]=v(!1),[A,j]=v(!1),M=_(0),N=e(e=>e.userId),P=e(e=>e.isLogin),F=r(),I=h(()=>{N&&(F([`user-profile`,`mine`,N,`user-like-video`]),F([`user-profile`,`mine`,N,`user-like-post`]),F([`user-profile`,`mine`,N,`user-collect-video`,N]),F([`user-profile`,`mine`,N,`user-collect-post`,N]))},[F,N]),{likeAnimation:L,handleLikeOperate:R,handleDefaultCollectionOperate:z,handleShareOperate:B}=c({id:C.id,isLike:C.like||!1,isDislike:C.dislike||!1,isCollect:C.collect||!1,likeCnt:T(C.static?.like_cnt),dislikeCnt:T(C.static?.dislike_cnt),contentType:C.content_type,prefetchDefaultCollection:!0,animationClasses:{like:o.likeShakeAnimation,dislike:o.dislikeShakeAnimation}}),V=h(e=>{E?.({...e})},[E]),H=h(async()=>{if(O)return;if(!P){i.getState().open();return}let e=Date.now();if(e-M.current<300)return;M.current=e,k(!0);let t=C.like||!1,n=C.dislike||!1,r=T(C.static?.like_cnt),a=T(C.static?.dislike_cnt),o=!t,s=Math.max(0,r+(o?1:-1)),c=o?!1:n,l=o&&n?Math.max(0,a-1):a;V({like:o,dislike:c,static:{...C.static,like_cnt:s,dislike_cnt:l}});try{let e=await R();if(!e){V({like:t,dislike:n,static:{...C.static,like_cnt:r,dislike_cnt:a}});return}V({like:e.isLike,dislike:e.isDislike??c,static:{...C.static,like_cnt:e.likeCnt,dislike_cnt:e.dislikeCnt??l}}),I(),window.sensors?.track?.(`detail_like_click`,{object_id:C.id,action:e.isLike?`点赞`:`取消点赞`,like_count:e.likeCnt})}catch(e){console.error(`点赞操作失败:`,e),x.error(D(`detailOperate.operateFailed`))}finally{k(!1)}},[R,C,I,O,P,D,V]),U=g(()=>C.id,[C.id]),W=h(()=>{B(({isCollect:e})=>{V({collect:e})},U)},[B,U,V]);async function G(e){return await new Promise(e=>setTimeout(e,300)),e}let K=h(()=>{s.show({mode:`select`,onCollect:async e=>{try{await G({contentId:C.id,collectionId:e}),V({collect:!0}),I(),x.success(D(`detailOperate.modifyCollectionSuccess`))}catch(e){console.error(`修改收藏夹失败:`,e),x.error(D(`detailOperate.collectFailed`))}}})},[C.id,I,D,V]),q=h(e=>{let t=e||D(`detailOperate.defaultCollection`);x.custom(e=>b(`div`,{className:`flex items-center justify-between gap-[16px] px-[16px] py-[12px] rounded-[12px] bg-black text-white shadow-lg min-w-[280px]`,children:[b(`div`,{className:`flex items-center gap-[10px]`,children:[y(`div`,{className:`w-[24px] h-[24px] rounded-full bg-white flex items-center justify-center`,children:y(l,{className:`w-[14px] h-[14px]`})}),b(`div`,{className:`flex items-center gap-[6px]`,children:[y(`span`,{className:`text-[14px] leading-[20px]`,children:D(`detailOperate.collectAdded`)}),y(`span`,{className:`text-[14px] leading-[20px] font-semibold`,children:t})]})]}),y(`button`,{type:`button`,className:`text-[14px] text-theme5 font-semibold`,onClick:()=>{x.dismiss(e),K()},children:D(`detailOperate.modifyCollection`)})]}))},[K,D]),J=h(async()=>{if(A)return;if(!P){i.getState().open();return}let e=C.collect||!1;j(!0),window.sensors?.track?.(`detail_fav_click`,{object_id:C.id,action:e?`取消收藏`:`收藏`});try{let t=await z({currentCollect:e,onUpdate:({isCollect:e})=>{V({collect:e})}});if(!t?.success){x.error(t?.message||D(`detailOperate.collectFailed`));return}I(),window.sensors?.track?.(`detail_fav_click`,{object_id:C.id,action:t.isCollect?`收藏`:`取消收藏`}),!e&&t.isCollect&&q(t.collectionTitle)}catch(e){console.error(`收藏操作失败:`,e),x.error(e?.message||D(`detailOperate.collectFailed`))}finally{j(!1)}},[z,C.collect,C.id,I,A,P,q,D,V]),Y=g(()=>a(J,300),[J]);return b(t,{className:`w-full h-[42px] mt-[16px] flex items-center justify-between`,children:[b(t,{className:`w-[25%] h-full flex flex-col items-center justify-center ${O?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:H,children:[C.like?y(p,{className:`w-[20px] h-[20px] ${L.animationClass}`}):y(f,{className:`w-[20px] h-[20px] text-text2`}),y(n,{className:`text-[12px] text-text2 leading-[20px]`,children:C.static?C.static.like_cnt===0?D(`detailOperate.like`):w(C.static?.like_cnt):D(`detailOperate.like`)})]}),b(t,{className:`w-[25%] h-full flex flex-col items-center justify-center ${A?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:Y,children:[C.collect?y(d,{className:`w-[20px] h-[20px]`}):y(u,{className:`w-[20px] h-[20px] text-text2`}),y(n,{className:`text-[12px] text-text2 leading-[20px]`,children:D(`detailOperate.collection`)})]}),b(t,{className:`w-[25%] h-full flex flex-col items-center justify-center cursor-pointer`,onClick:W,children:[y(m,{className:`w-[20px] h-[20px] text-text2`}),y(n,{className:`text-[12px] text-text2 leading-[20px]`,children:D(`detailOperate.share`)})]})]})}function w(e){let t=Number(e||0);return Number.isNaN(t)||t<=0?`0`:t>=1e4?`${(t/1e4).toFixed(1)}w`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function T(e){if(e==null)return 0;if(typeof e==`number`)return e;let t=Number(e);return Number.isNaN(t)?0:t}export{C as DetailOperate};
2
+ "use client";import{useUserStore as e}from"../../../../store/modules/user-store.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{useDeleteRequest as r}from"../../../../hooks/query/use-query.mjs";import{useAppContext as i}from"../../../../hooks/use-app-context/index.mjs";import{useLoginModalStore as a}from"../../../../store/modules/login-modal-store.mjs";import{debounceFun as o}from"../../../../utils/tools.mjs";import s from"../../../common/interaction-animations.module.mjs";import c from"../../../common/collection-popup/index.mjs";import{useContentOperate as l}from"../../../../hooks/use-content-operate.mjs";import u from"../../../../assets/icons/detail/check-ok.mjs";import d from"../../../../assets/icons/detail/collect_nor.mjs";import f from"../../../../assets/icons/detail/collect_sel.mjs";import p from"../../../../assets/icons/detail/give_like.mjs";import m from"../../../../assets/icons/detail/give_like_sel.mjs";import h from"../../../../assets/icons/detail/share.mjs";import{useCallback as g,useMemo as _,useRef as v,useState as y}from"react";import{jsx as b,jsxs as x}from"react/jsx-runtime";import{toast as S}from"sonner";import{useTranslations as C}from"next-intl";function w({information:w,onUpdate:D}){let O=i()===`editor`||!w?.id||w.id.startsWith(`preview-`),k=C(`components.biz.business.detail`),[A,j]=y(!1),[M,N]=y(!1),P=v(0),F=e(e=>e.userId),I=e(e=>e.isLogin),L=r(),R=g(()=>{F&&(L([`user-profile`,`mine`,F,`user-like-video`]),L([`user-profile`,`mine`,F,`user-like-post`]),L([`user-profile`,`mine`,F,`user-collect-video`,F]),L([`user-profile`,`mine`,F,`user-collect-post`,F]))},[L,F]),{likeAnimation:z,handleLikeOperate:B,handleDefaultCollectionOperate:V,handleShareOperate:H}=l({id:w.id,isLike:w.like||!1,isDislike:w.dislike||!1,isCollect:w.collect||!1,likeCnt:E(w.static?.like_cnt),dislikeCnt:E(w.static?.dislike_cnt),contentType:w.content_type,prefetchDefaultCollection:!O,animationClasses:{like:s.likeShakeAnimation,dislike:s.dislikeShakeAnimation}}),U=g(e=>{D?.({...e})},[D]),W=g(async()=>{if(A)return;if(!I){a.getState().open();return}let e=Date.now();if(e-P.current<300)return;P.current=e,j(!0);let t=w.like||!1,n=w.dislike||!1,r=E(w.static?.like_cnt),i=E(w.static?.dislike_cnt),o=!t,s=Math.max(0,r+(o?1:-1)),c=o?!1:n,l=o&&n?Math.max(0,i-1):i;U({like:o,dislike:c,static:{...w.static,like_cnt:s,dislike_cnt:l}});try{let e=await B();if(!e){U({like:t,dislike:n,static:{...w.static,like_cnt:r,dislike_cnt:i}});return}U({like:e.isLike,dislike:e.isDislike??c,static:{...w.static,like_cnt:e.likeCnt,dislike_cnt:e.dislikeCnt??l}}),R(),window.sensors?.track?.(`detail_like_click`,{object_id:w.id,action:e.isLike?`点赞`:`取消点赞`,like_count:e.likeCnt})}catch(e){console.error(`点赞操作失败:`,e),S.error(k(`detailOperate.operateFailed`))}finally{j(!1)}},[B,w,R,A,I,k,U]),G=_(()=>w.id,[w.id]),K=g(()=>{H(({isCollect:e})=>{U({collect:e})},G)},[H,G,U]);async function q(e){return await new Promise(e=>setTimeout(e,300)),e}let J=g(()=>{c.show({mode:`select`,onCollect:async e=>{try{await q({contentId:w.id,collectionId:e}),U({collect:!0}),R(),S.success(k(`detailOperate.modifyCollectionSuccess`))}catch(e){console.error(`修改收藏夹失败:`,e),S.error(k(`detailOperate.collectFailed`))}}})},[w.id,R,k,U]),Y=g(e=>{let t=e||k(`detailOperate.defaultCollection`);S.custom(e=>x(`div`,{className:`flex items-center justify-between gap-[16px] px-[16px] py-[12px] rounded-[12px] bg-black text-white shadow-lg min-w-[280px]`,children:[x(`div`,{className:`flex items-center gap-[10px]`,children:[b(`div`,{className:`w-[24px] h-[24px] rounded-full bg-white flex items-center justify-center`,children:b(u,{className:`w-[14px] h-[14px]`})}),x(`div`,{className:`flex items-center gap-[6px]`,children:[b(`span`,{className:`text-[14px] leading-[20px]`,children:k(`detailOperate.collectAdded`)}),b(`span`,{className:`text-[14px] leading-[20px] font-semibold`,children:t})]})]}),b(`button`,{type:`button`,className:`text-[14px] text-theme5 font-semibold`,onClick:()=>{S.dismiss(e),J()},children:k(`detailOperate.modifyCollection`)})]}))},[J,k]),X=g(async()=>{if(M)return;if(!I){a.getState().open();return}let e=w.collect||!1;N(!0),window.sensors?.track?.(`detail_fav_click`,{object_id:w.id,action:e?`取消收藏`:`收藏`});try{let t=await V({currentCollect:e,onUpdate:({isCollect:e})=>{U({collect:e})}});if(!t?.success){S.error(t?.message||k(`detailOperate.collectFailed`));return}R(),window.sensors?.track?.(`detail_fav_click`,{object_id:w.id,action:t.isCollect?`收藏`:`取消收藏`}),!e&&t.isCollect&&Y(t.collectionTitle)}catch(e){console.error(`收藏操作失败:`,e),S.error(e?.message||k(`detailOperate.collectFailed`))}finally{N(!1)}},[V,w.collect,w.id,R,M,I,Y,k,U]),Z=_(()=>o(X,300),[X]);return x(t,{className:`w-full h-[42px] mt-[16px] flex items-center justify-between ${O?`pointer-events-none`:``}`,children:[x(t,{className:`w-[25%] h-full flex flex-col items-center justify-center ${A?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:W,children:[w.like?b(m,{className:`w-[20px] h-[20px] ${z.animationClass}`}):b(p,{className:`w-[20px] h-[20px] text-text2`}),b(n,{className:`text-[12px] text-text2 leading-[20px]`,children:w.static?w.static.like_cnt===0?k(`detailOperate.like`):T(w.static?.like_cnt):k(`detailOperate.like`)})]}),x(t,{className:`w-[25%] h-full flex flex-col items-center justify-center ${M?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:Z,children:[w.collect?b(f,{className:`w-[20px] h-[20px]`}):b(d,{className:`w-[20px] h-[20px] text-text2`}),b(n,{className:`text-[12px] text-text2 leading-[20px]`,children:k(`detailOperate.collection`)})]}),x(t,{className:`w-[25%] h-full flex flex-col items-center justify-center cursor-pointer`,onClick:K,children:[b(h,{className:`w-[20px] h-[20px] text-text2`}),b(n,{className:`text-[12px] text-text2 leading-[20px]`,children:k(`detailOperate.share`)})]})]})}function T(e){let t=Number(e||0);return Number.isNaN(t)||t<=0?`0`:t>=1e4?`${(t/1e4).toFixed(1)}w`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function E(e){if(e==null)return 0;if(typeof e==`number`)return e;let t=Number(e);return Number.isNaN(t)?0:t}export{w as DetailOperate};
@@ -0,0 +1,2 @@
1
+
2
+ const e=`/static/components-thumb/video_player.png`,t=[{id:`tag-1`,name:`标签`,group:`类型`},{id:`tag-2`,name:`标签`,group:`类型`},{id:`tag-3`,name:`标签`,group:`类型`}],n=Array.from({length:6}).map((e,t)=>({id:`episode-${t+1}`,name:`第${t+1}集`,preview_m3u8_url:``,m3u8_url:``})),r={id:`preview-detail`,mid:`preview-detail`,name:`电影名称电影名称电影名称电影名称电影名称`,img_x:e,img_y:e,preview_images:[e],description:`简介文案,简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案。`,score:`9.6`,is_more_link:`y`,update_status:`1`,tags:t,links:n,content_type:0,play_count:123,episode_cnt:n.length,like:!1,dislike:!1,collect:!1,static:{like_cnt:0,dislike_cnt:0}};function i(e=6){let t=Math.max(1,Math.floor(e));return Array.from({length:t}).map((e,t)=>({...r,id:`preview-recommend-${t+1}`,name:`猜你喜欢 ${t+1}`,play_count:8e3+t*873}))}export{i as buildEditorPreviewRecommendList,r as editorPreviewInformation};
@@ -48,8 +48,8 @@ declare const videoDetailMaterials: MaterialMap<readonly [DefineMaterialOption<t
48
48
  }>>;
49
49
  coverUrl: z$1.ZodOptional<z$1.ZodString>;
50
50
  titleMode: z$1.ZodOptional<z$1.ZodEnum<{
51
- custom: "custom";
52
51
  content: "content";
52
+ custom: "custom";
53
53
  }>>;
54
54
  title: z$1.ZodOptional<z$1.ZodString>;
55
55
  showPlayCount: z$1.ZodOptional<z$1.ZodBoolean>;
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useAppContext as e}from"../../../../../../hooks/use-app-context/index.mjs";import{DetailOperate as t}from"../../detail-operate.mjs";import{jsx as n}from"react/jsx-runtime";function r({information:r,onUpdate:i}){return e()===`editor`?n(`div`,{children:`占位`}):n(t,{information:r,onUpdate:i})}export{r as VideoDetailActionsClient};
2
+ "use client";import{useAppContext as e}from"../../../../../../hooks/use-app-context/index.mjs";import{DetailOperate as t}from"../../detail-operate.mjs";import{editorPreviewInformation as n}from"../editor-preview.mjs";import{jsx as r}from"react/jsx-runtime";function i({information:i,onUpdate:a}){let o=e()===`editor`||!i;return r(`div`,{className:o?`pointer-events-none`:void 0,children:r(t,{information:o?n:i,onUpdate:o?e=>{}:a})})}export{i as VideoDetailActionsClient};
@@ -4,7 +4,7 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region components/biz/business/detail/materials/video-detail-info/client.d.ts
6
6
  /**
7
- * 视频详情信息模块客户端组件。
7
+ * 媒体信息-简介&选集物料客户端组件。
8
8
  */
9
9
  declare function VideoDetailInfoClient({
10
10
  information,
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useAppContext as e}from"../../../../../../hooks/use-app-context/index.mjs";import{SeriesEpisodes as t}from"../../../../../common/series-episodes/index.mjs";import{DetailIntroduction as n}from"../../detail-introduction.mjs";import{Fragment as r,jsx as i,jsxs as a}from"react/jsx-runtime";function o({information:o,currentSeriesNum:s,onEpisodeChange:c,showTags:l=!1,showEpisodes:u=!1,isShow:d=!0}){let f=e(),p=o?.is_more_link===`y`&&(o?.links?.length??0)>0;return f===`editor`?i(`div`,{children:`占位`}):a(r,{children:[i(n,{information:o,isShow:d,showTags:l}),u&&p&&i(t,{mode:`detail`,series_num:s,information:o,onEpisodeChange:c})]})}export{o as VideoDetailInfoClient};
2
+ "use client";import{useAppContext as e}from"../../../../../../hooks/use-app-context/index.mjs";import{SeriesEpisodes as t}from"../../../../../common/series-episodes/index.mjs";import{DetailIntroduction as n}from"../../detail-introduction.mjs";import{editorPreviewInformation as r}from"../editor-preview.mjs";import{jsx as i,jsxs as a}from"react/jsx-runtime";function o({information:o,currentSeriesNum:s,onEpisodeChange:c,showTags:l=!1,showEpisodes:u=!1,isShow:d=!0}){let f=e()===`editor`||!o,p=f?r:o,m=Math.max(1,Number(s||1)),h=f?e=>{}:c,g=p?.is_more_link===`y`&&(p?.links?.length??0)>0;return a(`div`,{className:f?`pointer-events-none`:void 0,children:[i(n,{information:p,isShow:d,showTags:l}),u&&g&&i(t,{mode:`detail`,series_num:m,information:p,onEpisodeChange:h})]})}export{o as VideoDetailInfoClient};
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{VideoDetailInfoClient as t}from"./client.mjs";import{videoDetailInfoInspectorPropsSchema as n}from"./schema.mjs";import{VideoDetailInfo as r}from"./server.mjs";const i=e({type:`video-detail-info`,name:`详情信息`,icon:`/static/components-thumb/media_info_description_episode.png`,category:`内容组件`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as videoDetailInfoMaterial};
2
+ import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{VideoDetailInfoClient as t}from"./client.mjs";import{videoDetailInfoInspectorPropsSchema as n}from"./schema.mjs";import{VideoDetailInfo as r}from"./server.mjs";const i=e({type:`video-detail-info`,name:`专辑信息样式2`,icon:`/static/components-thumb/media_info_description_episode.png`,category:`内容组件`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as videoDetailInfoMaterial};
@@ -7,14 +7,14 @@ import * as zod_v4_core0 from "zod/v4/core";
7
7
 
8
8
  //#region components/biz/business/detail/materials/video-detail-info/schema.d.ts
9
9
  /**
10
- * 信息模块物料暂不对外开放配置。
10
+ * 媒体信息-简介&选集物料暂不对外开放配置。
11
11
  */
12
12
  declare const videoDetailInfoInspectorPropsSchema: zod.ZodObject<{
13
13
  showTags: zod.ZodBoolean & SchemaHasDefaultValue;
14
14
  showEpisodes: zod.ZodBoolean & SchemaHasDefaultValue;
15
15
  }, zod_v4_core0.$strip>;
16
16
  type VideoDetailInfoInspectorProps = InferSchemaProps<typeof videoDetailInfoInspectorPropsSchema>;
17
- /** 视频详情信息模块物料 props。 */
17
+ /** 媒体信息-简介&选集物料 props。 */
18
18
  type VideoDetailInfoProps = VideoDetailInfoInspectorProps & {
19
19
  /** 视频详情信息。 */information: SafeInformationType; /** 当前选集数。 */
20
20
  currentSeriesNum: number; /** 选集变更回调。 */
@@ -4,7 +4,7 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region components/biz/business/detail/materials/video-detail-info/server.d.ts
6
6
  /**
7
- * 视频详情信息模块服务端组件。
7
+ * 媒体信息-简介&选集物料服务端组件。
8
8
  */
9
9
  declare function VideoDetailInfo(props: VideoDetailInfoProps): react_jsx_runtime0.JSX.Element;
10
10
  //#endregion
@@ -4,7 +4,7 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region components/biz/business/detail/materials/video-detail-info-title/client.d.ts
6
6
  /**
7
- * 标题变体物料客户端组件。
7
+ * 媒体信息物料客户端组件。
8
8
  */
9
9
  declare function VideoDetailInfoTitleClient({
10
10
  information
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Box as e}from"../../../../../ui/box.mjs";import{useAppContext as t}from"../../../../../../hooks/use-app-context/index.mjs";import{useCardDecoration as n}from"../../../../../../hooks/use-card-decoration.mjs";import{DetailInfoTitle as r}from"../../detail-info-title.mjs";import{jsx as i}from"react/jsx-runtime";function a({information:a}){let o=t(),{getTitleText:s}=n();if(o===`editor`)return i(`div`,{children:`占位`});let c=s(a);return c?i(e,{className:`w-full mt-[16px] px-[12px]`,children:i(r,{title:c})}):null}export{a as VideoDetailInfoTitleClient};
2
+ "use client";import{Box as e}from"../../../../../ui/box.mjs";import{useAppContext as t}from"../../../../../../hooks/use-app-context/index.mjs";import{useCardDecoration as n}from"../../../../../../hooks/use-card-decoration.mjs";import{DetailInfoTitle as r}from"../../detail-info-title.mjs";import{editorPreviewInformation as i}from"../editor-preview.mjs";import{jsx as a}from"react/jsx-runtime";function o({information:o}){let s=t()===`editor`||!o?i:o,{getTitleText:c}=n(),l=c(s);return l?a(e,{className:`w-full mt-[16px] px-[12px]`,children:a(r,{title:l})}):null}export{o as VideoDetailInfoTitleClient};
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{VideoDetailInfoTitleClient as t}from"./client.mjs";import{videoDetailInfoTitleInspectorPropsSchema as n}from"./schema.mjs";import{VideoDetailInfoTitle as r}from"./server.mjs";const i=e({type:`video-detail-info-title`,name:`标题`,icon:`/static/components-thumb/media_info_basic.png`,category:`内容组件`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as videoDetailInfoTitleMaterial};
2
+ import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{VideoDetailInfoTitleClient as t}from"./client.mjs";import{videoDetailInfoTitleInspectorPropsSchema as n}from"./schema.mjs";import{VideoDetailInfoTitle as r}from"./server.mjs";const i=e({type:`video-detail-info-title`,name:`专辑信息样式1`,icon:`/static/components-thumb/media_info_basic.png`,category:`内容组件`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as videoDetailInfoTitleMaterial};
@@ -7,11 +7,11 @@ import * as zod_v4_core0 from "zod/v4/core";
7
7
 
8
8
  //#region components/biz/business/detail/materials/video-detail-info-title/schema.d.ts
9
9
  /**
10
- * 标题变体物料暂不对外开放配置。
10
+ * 媒体信息物料暂不对外开放配置。
11
11
  */
12
12
  declare const videoDetailInfoTitleInspectorPropsSchema: zod.ZodObject<{}, zod_v4_core0.$strip>;
13
13
  type VideoDetailInfoTitleInspectorProps = InferSchemaProps<typeof videoDetailInfoTitleInspectorPropsSchema>;
14
- /** 标题变体物料 props。 */
14
+ /** 媒体信息物料 props。 */
15
15
  type VideoDetailInfoTitleProps = VideoDetailInfoTitleInspectorProps & {
16
16
  /** 视频详情信息。 */information: SafeInformationType;
17
17
  };
@@ -4,7 +4,7 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region components/biz/business/detail/materials/video-detail-info-title/server.d.ts
6
6
  /**
7
- * 标题变体物料服务端组件。
7
+ * 媒体信息物料服务端组件。
8
8
  */
9
9
  declare function VideoDetailInfoTitle(props: VideoDetailInfoTitleProps): react_jsx_runtime0.JSX.Element;
10
10
  //#endregion
@@ -4,7 +4,7 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region components/biz/business/detail/materials/video-detail-info-title-tags-episodes/client.d.ts
6
6
  /**
7
- * 标题+标签+选集变体物料客户端组件。
7
+ * 媒体信息-选集物料客户端组件。
8
8
  */
9
9
  declare function VideoDetailInfoTitleTagsEpisodesClient({
10
10
  information,
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Box as e}from"../../../../../ui/box.mjs";import{useAppContext as t}from"../../../../../../hooks/use-app-context/index.mjs";import{useCardDecoration as n}from"../../../../../../hooks/use-card-decoration.mjs";import{SeriesEpisodes as r}from"../../../../../common/series-episodes/index.mjs";import{DetailInfoTags as i}from"../../detail-info-tags.mjs";import{DetailInfoTitle as a}from"../../detail-info-title.mjs";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c({information:c,currentSeriesNum:l,onEpisodeChange:u,showTags:d=!0,showEpisodes:f=!0}){let p=t(),{getTitleText:m}=n();if(p===`editor`)return o(`div`,{children:`占位`});let h=m(c),g=c?.is_more_link===`y`&&(c?.links?.length??0)>0,_=d&&(c.tags?.length??0)>0,v=f&&g;return!h&&!_&&!v?null:s(e,{className:`w-full mt-[16px]`,children:[s(e,{className:`px-[12px]`,children:[h&&o(a,{title:h}),_&&o(i,{tags:c.tags||[],className:`mt-[12px]`})]}),v&&o(r,{mode:`detail`,series_num:l,information:c,onEpisodeChange:u})]})}export{c as VideoDetailInfoTitleTagsEpisodesClient};
2
+ "use client";import{Box as e}from"../../../../../ui/box.mjs";import{useAppContext as t}from"../../../../../../hooks/use-app-context/index.mjs";import{useCardDecoration as n}from"../../../../../../hooks/use-card-decoration.mjs";import{SeriesEpisodes as r}from"../../../../../common/series-episodes/index.mjs";import{DetailInfoTags as i}from"../../detail-info-tags.mjs";import{DetailInfoTitle as a}from"../../detail-info-title.mjs";import{editorPreviewInformation as o}from"../editor-preview.mjs";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({information:l,currentSeriesNum:u,onEpisodeChange:d,showTags:f=!0,showEpisodes:p=!0}){let m=t()===`editor`||!l,h=m?o:l,g=Math.max(1,Number(u||1)),_=m?e=>{}:d,{getTitleText:v}=n(),y=v(h),b=h?.is_more_link===`y`&&(h?.links?.length??0)>0,x=f&&(h.tags?.length??0)>0,S=p&&b;return!y&&!x&&!S?null:c(e,{className:`w-full mt-[16px] ${m?`pointer-events-none`:``}`,children:[c(e,{className:`px-[12px]`,children:[y&&s(a,{title:y}),x&&s(i,{tags:h.tags||[],className:`mt-[12px]`})]}),S&&s(r,{mode:`detail`,series_num:g,information:h,onEpisodeChange:_})]})}export{l as VideoDetailInfoTitleTagsEpisodesClient};
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{VideoDetailInfoTitleTagsEpisodesClient as t}from"./client.mjs";import{videoDetailInfoTitleTagsEpisodesInspectorPropsSchema as n}from"./schema.mjs";import{VideoDetailInfoTitleTagsEpisodes as r}from"./server.mjs";const i=e({type:`video-detail-info-title-tags-episodes`,name:`标题 + 标签 + 选集`,icon:`/static/components-thumb/media_info_episode_list.png`,category:`内容组件`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as videoDetailInfoTitleTagsEpisodesMaterial};
2
+ import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{VideoDetailInfoTitleTagsEpisodesClient as t}from"./client.mjs";import{videoDetailInfoTitleTagsEpisodesInspectorPropsSchema as n}from"./schema.mjs";import{VideoDetailInfoTitleTagsEpisodes as r}from"./server.mjs";const i=e({type:`video-detail-info-title-tags-episodes`,name:`专辑信息样式3`,icon:`/static/components-thumb/media_info_episode_list.png`,category:`内容组件`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as videoDetailInfoTitleTagsEpisodesMaterial};
@@ -7,14 +7,14 @@ import * as zod_v4_core0 from "zod/v4/core";
7
7
 
8
8
  //#region components/biz/business/detail/materials/video-detail-info-title-tags-episodes/schema.d.ts
9
9
  /**
10
- * 标题+标签+选集变体物料暂不对外开放配置。
10
+ * 媒体信息-选集物料暂不对外开放配置。
11
11
  */
12
12
  declare const videoDetailInfoTitleTagsEpisodesInspectorPropsSchema: zod.ZodObject<{
13
13
  showTags: zod.ZodBoolean & SchemaHasDefaultValue;
14
14
  showEpisodes: zod.ZodBoolean & SchemaHasDefaultValue;
15
15
  }, zod_v4_core0.$strip>;
16
16
  type VideoDetailInfoTitleTagsEpisodesInspectorProps = InferSchemaProps<typeof videoDetailInfoTitleTagsEpisodesInspectorPropsSchema>;
17
- /** 标题+标签+选集变体物料 props。 */
17
+ /** 媒体信息-选集物料 props。 */
18
18
  type VideoDetailInfoTitleTagsEpisodesProps = VideoDetailInfoTitleTagsEpisodesInspectorProps & {
19
19
  /** 视频详情信息。 */information: SafeInformationType; /** 当前选集数。 */
20
20
  currentSeriesNum: number; /** 选集变更回调。 */
@@ -4,7 +4,7 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region components/biz/business/detail/materials/video-detail-info-title-tags-episodes/server.d.ts
6
6
  /**
7
- * 标题+标签+选集变体物料服务端组件。
7
+ * 媒体信息-选集物料服务端组件。
8
8
  */
9
9
  declare function VideoDetailInfoTitleTagsEpisodes(props: VideoDetailInfoTitleTagsEpisodesProps): react_jsx_runtime0.JSX.Element;
10
10
  //#endregion
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useAppContext as e}from"../../../../../../hooks/use-app-context/index.mjs";import{DetailHero as t}from"../../video-hero.mjs";import{jsx as n}from"react/jsx-runtime";function r({information:r,episodeIndex:i,resumeProgressSeconds:a}){return e()===`editor`?n(`div`,{children:`占位`}):n(t,{isVideo:!0,information:r,episodeIndex:i,resumeProgressSeconds:a})}export{r as VideoDetailPlayerClient};
2
+ "use client";import{useAppContext as e}from"../../../../../../hooks/use-app-context/index.mjs";import{editorPreviewInformation as t}from"../editor-preview.mjs";import{DetailHero as n}from"../../video-hero.mjs";import{jsx as r}from"react/jsx-runtime";function i({information:i,episodeIndex:a,resumeProgressSeconds:o}){let s=e()===`editor`||!i,c=s?{...t,id:``,mid:``}:i;return r(`div`,{className:s?`pointer-events-none`:void 0,children:r(n,{isVideo:!0,information:c,episodeIndex:s?0:a,resumeProgressSeconds:s?0:o})})}export{i as VideoDetailPlayerClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{gContentGetGuessYouLikeVideos as e}from"../../../../../../service/generated/client.mjs";import{Box as t}from"../../../../../ui/box.mjs";import{Text as n}from"../../../../../ui/text.mjs";import{useRequest as r}from"../../../../../../hooks/query/use-query.mjs";import{useAppContext as i}from"../../../../../../hooks/use-app-context/index.mjs";import a from"../../../../../../assets/icons/detail/video_flag.mjs";import{MiniThreeCard as o}from"../../../../../common/cards/mini-three-card.mjs";import{useCardDecoration as s}from"../../../../../../hooks/use-card-decoration.mjs";import{applyPlayCountDelta as c,buildEpisodeLabel as l,clampColumns as u,mergeManualAndPool as d,mockPagedList as f,resolveRows as p}from"./utils.mjs";import{useEffect as m,useMemo as h,useRef as g,useState as _}from"react";import{jsx as v,jsxs as y}from"react/jsx-runtime";import{useTranslations as b}from"next-intl";function x({detailId:x,rows:w,columns:T,smartTagEnabled:E,smartTagIds:D,title:O,showPlayCount:k,playCountDelta:A,showEpisode:j,enableInfinite:M,items:N}){let P=i()===`editor`,te=b(`components.biz.business.detail`),{getVerticalHoCoverImageUrl:F,getTitleText:I}=s(),[L,R]=_(1),z=g(null),B=h(()=>D??[],[D]),V=h(()=>N??[],[N]),{data:H}=r([`video-detail-recommend`,x],async()=>!x||P?null:await e(),{enabled:!P&&!!x}),U=h(()=>{let e=H?.data?.videos;return Array.isArray(e)?e.map(e=>S(e)).filter(e=>!x||!e.id||e.id!==x):[]},[H?.data?.videos,x]),W=p(w,M),G=u(T),K=W*G,q=h(()=>new Set(V.map(e=>e.contentId)),[V]),J=h(()=>{let e=U.filter(e=>!q.has(e.id));if(!E||B.length===0)return e;let t=new Set(B.map(String));return e.filter(e=>(Array.isArray(e.source_tags)?e.source_tags:String(e.source_tags||``).split(`,`).filter(Boolean)).some(e=>t.has(String(e?.id??e))))},[q,U,E,B]),Y=h(()=>{if(!V.length)return[];let e=new Map(J.map(e=>[e.id,e]));return V.map(t=>{let n=e.get(t.contentId);if(!n)return null;let r=t.titleMode===`custom`?t.title:I(n),i=t.coverMode===`upload`?t.coverUrl:F(n);return{info:{...n,name:r||n.name,img_y:i||n.img_y,img_x:i||n.img_x},config:{showPlayCount:t.showPlayCount,playCountDelta:t.playCountDelta,showEpisode:t.showEpisode}}}).filter(Boolean)},[J,I,F,V]),X=h(()=>J.map(e=>({info:e})),[J]),Z=h(()=>d(Y,X,K),[Y,K,X]),Q=h(()=>{if(!M)return Z;let e=f(X,L,K,5);return L===1?Z:Z.concat(e)},[Z,M,L,K,X]),$=M&&L<5&&X.length>0;return m(()=>{M&&R(1)},[x,M]),m(()=>{if(!M)return;let e=z.current;if(!e||!$)return;let t=new IntersectionObserver(e=>{e[0]?.isIntersecting&&R(e=>Math.min(e+1,5))});return t.observe(e),()=>{t.disconnect()}},[M,$]),P?v(`div`,{children:`占位`}):Q.length?y(t,{className:`w-full mt-[16px]`,children:[v(n,{className:`block pl-[12px] mb-[8px] text-text1 text-[18px] leading-[26px] font-bold`,children:O||te(`detailGuessLike.title`)}),v(t,{className:`w-full flex flex-wrap px-[12px]`,children:Q.map((e,t)=>{let n=e.config?.showPlayCount??k,r=e.config?.playCountDelta??A,i=e.config?.showEpisode??j,s=C(c(e.info.play_count||0,r)),u=l(Number(e.info.update_status)===1?`done`:`updating`,e.info.episode_cnt||e.info.links?.length,e.info.episode_cnt||e.info.links?.length),d=Number.isFinite(G)&&G>0?`${100/G}%`:`33.333333%`;return v(o,{url:F(e.info),text:I(e.info),style:{width:d},bottomLeftChild:n?y(`div`,{className:`h-[20px] leading-[20px] text-[#fff] text-[12px] px-[4px] rounded-[4px] bg-[#333] ml-[4px] flex items-center`,children:[v(a,{className:`w-[16px] h-[auto] text-[#fff] mr-[4px]`}),s]}):null,bottomRightChild:i&&u?v(`div`,{className:`text-[#F59E0B] text-[12px] font-bold leading-[20px] pr-[8px]`,children:u}):null,linkPath:ee(e.info)},`guess-like-${t}`)})}),M&&v(`div`,{ref:z,className:`h-[1px] w-full`})]}):null}function S(e){return{id:e.video_id||``,mid:``,name:e.name||``,cat_id:``,cat_name:``,status:`1`,status_text:``,create_time:``,content_type:0,episode_cnt:e.episode_count||0,show_at:e.show_at??``,position:``,img_type:e.img_type??``,img_x:e.img_x??``,img_y:e.img_y??``,img_width:``,img_height:``,play_count:e.play_count,preview_images:[],duration:String(e.duration??``),score:String(e.score??``),is_more_link:e.is_more_link?`y`:`n`,update_status:String(e.update_status??``),description:e.description??``,language:``,director:``,actor:``,area:``,issue_date:``,publisher:``,series:``,number:``,tags:[],source_tags:e.source_tags??``,source_actor:[],links:Array.isArray(e.episodes)?e.episodes.map(e=>({id:e.id??``,name:e.name??``,preview_m3u8_url:e.preview_m3u8_url??``,m3u8_url:e.m3u8_url??``})):[],money:``,up_user:``,source_username:``,task_id:``,file_status:``}}function C(e){let t=Number(e||`0`);return Number.isNaN(t)||t<=0?`0`:t>=1e4?`${(t/1e4).toFixed(1)}w`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function ee(e){if(e.content_type===0){let t=encodeURIComponent(e.name||``);return`/video/${e.id}/${t}/episode/1`}return`/post/${e.id}`}export{x as VideoDetailRecommendClient};
2
+ "use client";import{gContentGetGuessYouLikeVideos as e}from"../../../../../../service/generated/client.mjs";import{Box as t}from"../../../../../ui/box.mjs";import{Text as n}from"../../../../../ui/text.mjs";import{useRequest as r}from"../../../../../../hooks/query/use-query.mjs";import{useAppContext as i}from"../../../../../../hooks/use-app-context/index.mjs";import a from"../../../../../../assets/icons/detail/video_flag.mjs";import{MiniThreeCard as o}from"../../../../../common/cards/mini-three-card.mjs";import{useCardDecoration as s}from"../../../../../../hooks/use-card-decoration.mjs";import{buildEditorPreviewRecommendList as c}from"../editor-preview.mjs";import{applyPlayCountDelta as ee,buildEpisodeLabel as l,clampColumns as u,mergeManualAndPool as d,mockPagedList as f,resolveRows as p}from"./utils.mjs";import{useEffect as m,useMemo as h,useRef as g,useState as te}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import{useTranslations as y}from"next-intl";function b({detailId:b,rows:re,columns:ie,smartTagEnabled:C,smartTagIds:w,title:T,showPlayCount:E,playCountDelta:D,showEpisode:O,enableInfinite:k,items:A}){let j=i()===`editor`,M=j||!b,ae=y(`components.biz.business.detail`),{getVerticalHoCoverImageUrl:N,getTitleText:P}=s(),[F,I]=te(1),L=g(null),R=h(()=>w??[],[w]),z=h(()=>A??[],[A]),B=!!k&&!j,V=p(re,B),H=u(ie),U=V*H,W=h(()=>c(U),[U]),{data:G}=r([`video-detail-recommend`,b],async()=>!b||M?null:await e(),{enabled:!M&&!!b}),K=h(()=>{if(M)return W;let e=G?.data?.videos;return Array.isArray(e)?e.map(e=>x(e)).filter(e=>!b||!e.id||e.id!==b):[]},[G?.data?.videos,b,W,M]),q=h(()=>new Set(z.map(e=>e.contentId)),[z]),J=h(()=>{if(M)return K;let e=K.filter(e=>!q.has(e.id));if(!C||R.length===0)return e;let t=new Set(R.map(String));return e.filter(e=>(Array.isArray(e.source_tags)?e.source_tags:String(e.source_tags||``).split(`,`).filter(Boolean)).some(e=>t.has(String(e?.id??e))))},[M,q,K,C,R]),Y=h(()=>{if(!z.length)return[];let e=new Map(J.map(e=>[e.id,e]));return z.map((t,n)=>{let r=W[n%Math.max(1,W.length)],i=e.get(t.contentId)??(M?{...r,id:t.contentId||r.id||`preview-manual-${n+1}`,name:r.name||`猜你喜欢 ${n+1}`}:null);if(!i)return null;let a=t.titleMode===`custom`?t.title:P(i),o=t.coverMode===`upload`?t.coverUrl:N(i);return{info:{...i,name:a||i.name,img_y:o||i.img_y,img_x:o||i.img_x},config:{showPlayCount:t.showPlayCount,playCountDelta:t.playCountDelta,showEpisode:t.showEpisode}}}).filter(Boolean)},[W,J,P,N,M,z]),X=h(()=>J.map(e=>({info:e})),[J]),Z=h(()=>d(Y,X,U),[Y,U,X]),Q=h(()=>{if(!B)return Z;let e=f(X,F,U,5);return F===1?Z:Z.concat(e)},[Z,F,U,X,B]),$=B&&F<5&&X.length>0;return m(()=>{B&&I(1)},[b,B]),m(()=>{if(!B)return;let e=L.current;if(!e||!$)return;let t=new IntersectionObserver(e=>{e[0]?.isIntersecting&&I(e=>Math.min(e+1,5))});return t.observe(e),()=>{t.disconnect()}},[$,B]),Q.length?v(t,{className:`w-full mt-[16px] ${M?`pointer-events-none`:``}`,children:[_(n,{className:`block pl-[12px] mb-[8px] text-text1 text-[18px] leading-[26px] font-bold`,children:T||ae(`detailGuessLike.title`)}),_(t,{className:`w-full flex flex-wrap px-[12px]`,children:Q.map((e,t)=>{let n=e.config?.showPlayCount??E,r=e.config?.playCountDelta??D,i=e.config?.showEpisode??O,s=S(ee(e.info.play_count||0,r)),c=l(Number(e.info.update_status)===1?`done`:`updating`,e.info.episode_cnt||e.info.links?.length,e.info.episode_cnt||e.info.links?.length),u=Number.isFinite(H)&&H>0?`${100/H}%`:`33.333333%`;return _(o,{url:N(e.info),text:P(e.info),style:{width:u},bottomLeftChild:n?v(`div`,{className:`h-[20px] leading-[20px] text-[#fff] text-[12px] px-[4px] rounded-[4px] bg-[#333] ml-[4px] flex items-center`,children:[_(a,{className:`w-[16px] h-[auto] text-[#fff] mr-[4px]`}),s]}):null,bottomRightChild:i&&c?_(`div`,{className:`text-[#F59E0B] text-[12px] font-bold leading-[20px] pr-[8px]`,children:c}):null,linkPath:M?``:ne(e.info)},`guess-like-${t}`)})}),B&&_(`div`,{ref:L,className:`h-[1px] w-full`})]}):null}function x(e){return{id:e.video_id||``,mid:``,name:e.name||``,cat_id:``,cat_name:``,status:`1`,status_text:``,create_time:``,content_type:0,episode_cnt:e.episode_count||0,show_at:e.show_at??``,position:``,img_type:e.img_type??``,img_x:e.img_x??``,img_y:e.img_y??``,img_width:``,img_height:``,play_count:e.play_count,preview_images:[],duration:String(e.duration??``),score:String(e.score??``),is_more_link:e.is_more_link?`y`:`n`,update_status:String(e.update_status??``),description:e.description??``,language:``,director:``,actor:``,area:``,issue_date:``,publisher:``,series:``,number:``,tags:[],source_tags:e.source_tags??``,source_actor:[],links:Array.isArray(e.episodes)?e.episodes.map(e=>({id:e.id??``,name:e.name??``,preview_m3u8_url:e.preview_m3u8_url??``,m3u8_url:e.m3u8_url??``})):[],money:``,up_user:``,source_username:``,task_id:``,file_status:``}}function S(e){let t=Number(e||`0`);return Number.isNaN(t)||t<=0?`0`:t>=1e4?`${(t/1e4).toFixed(1)}w`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function ne(e){if(e.content_type===0){let t=encodeURIComponent(e.name||``);return`/video/${e.id}/${t}/episode/1`}return`/post/${e.id}`}export{b as VideoDetailRecommendClient};
@@ -26,8 +26,8 @@ declare const videoDetailRecommendMaterial: DefineMaterialOption<typeof VideoDet
26
26
  }>>;
27
27
  coverUrl: zod.ZodOptional<zod.ZodString>;
28
28
  titleMode: zod.ZodOptional<zod.ZodEnum<{
29
- custom: "custom";
30
29
  content: "content";
30
+ custom: "custom";
31
31
  }>>;
32
32
  title: zod.ZodOptional<zod.ZodString>;
33
33
  showPlayCount: zod.ZodOptional<zod.ZodBoolean>;
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{VideoDetailRecommendClient as t}from"./client.mjs";import{videoDetailRecommendInspectorPropsSchema as n}from"./schema.mjs";import{VideoDetailRecommend as r}from"./server.mjs";const i=e({type:`video-detail-recommend`,name:`猜你喜欢`,icon:`/static/components-thumb/search_recommend_media.png`,category:`内容组件`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as videoDetailRecommendMaterial};
2
+ import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{VideoDetailRecommendClient as t}from"./client.mjs";import{videoDetailRecommendInspectorPropsSchema as n}from"./schema.mjs";import{VideoDetailRecommend as r}from"./server.mjs";const i=e({type:`video-detail-recommend`,name:`详情页-推荐模块`,icon:`/static/components-thumb/video_guess_you_like.png`,category:`详情页`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as videoDetailRecommendMaterial};
@@ -22,8 +22,8 @@ declare const videoDetailRecommendInspectorPropsSchema: z$1.ZodObject<{
22
22
  }>>;
23
23
  coverUrl: z$1.ZodOptional<z$1.ZodString>;
24
24
  titleMode: z$1.ZodOptional<z$1.ZodEnum<{
25
- custom: "custom";
26
25
  content: "content";
26
+ custom: "custom";
27
27
  }>>;
28
28
  title: z$1.ZodOptional<z$1.ZodString>;
29
29
  showPlayCount: z$1.ZodOptional<z$1.ZodBoolean>;
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineComponentPropsSchema as e,defineNumberPropSchema as t,defineSwitchPropSchema as n,defineTextPropSchema as r,getSchemaDefaultProps as i}from"../../../../../../utils/schema/schema.mjs";import a from"zod";const o=e({rows:t({label:`行数`,defaultValue:2}),columns:t({label:`列数`,defaultValue:3}),smartTagEnabled:n({label:`智能铺设`,defaultValue:!1}),title:r({label:`推荐位名称`,defaultValue:`猜你喜欢`}),showPlayCount:n({label:`显示播放量`,defaultValue:!0}),playCountDelta:t({label:`播放量浮动`,defaultValue:0}),showEpisode:n({label:`显示集数`,defaultValue:!0}),enableInfinite:n({label:`无限下拉`,defaultValue:!1}),smartTagIds:a.array(a.string()).optional(),items:a.array(a.object({contentId:a.string(),coverMode:a.enum([`upload`,`content`]).optional(),coverUrl:a.string().optional(),titleMode:a.enum([`custom`,`content`]).optional(),title:a.string().optional(),showPlayCount:a.boolean().optional(),playCountDelta:a.number().optional(),showEpisode:a.boolean().optional()})).optional()});({...i(o)});export{o as videoDetailRecommendInspectorPropsSchema};
2
+ import{defineComponentPropsSchema as e,defineNumberPropSchema as t,defineSwitchPropSchema as n,defineTextPropSchema as r,getSchemaDefaultProps as i}from"../../../../../../utils/schema/schema.mjs";import a from"zod";const o=e({rows:t({label:`行数`,defaultValue:1}),columns:t({label:`列数`,defaultValue:2}),smartTagEnabled:n({label:`智能铺设`,defaultValue:!1}),title:r({label:`推荐位名称`,defaultValue:`猜你喜欢`}),showPlayCount:n({label:`显示播放量`,defaultValue:!0}),playCountDelta:t({label:`播放量浮动`,defaultValue:0}),showEpisode:n({label:`显示集数`,defaultValue:!0}),enableInfinite:n({label:`无限下拉`,defaultValue:!1}),smartTagIds:a.array(a.string()).optional(),items:a.array(a.object({contentId:a.string(),coverMode:a.enum([`upload`,`content`]).optional(),coverUrl:a.string().optional(),titleMode:a.enum([`custom`,`content`]).optional(),title:a.string().optional(),showPlayCount:a.boolean().optional(),playCountDelta:a.number().optional(),showEpisode:a.boolean().optional()})).optional()});({...i(o)});export{o as videoDetailRecommendInspectorPropsSchema};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{cn as e}from"../../../../utils/cn.mjs";import{pxToVw as t}from"../../../../utils/helper.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{useBrowseReport as a}from"../../../../hooks/use-browse-report.mjs";import{MediaPreview as o,useMediaPreview as s}from"../../../common/media-preview/index.mjs";import c from"../../../common/video-player/index.mjs";import{UserActivityMediaGrid as l}from"../../../common/list/user-activity-list/user-activity-list-item.mjs";import{memo as u,useCallback as d,useEffect as f,useMemo as p,useRef as m}from"react";import{Fragment as h,jsx as g,jsxs as _}from"react/jsx-runtime";import{useTranslations as v}from"next-intl";const y=u(({information:t,isVideo:n,episodeIndex:a=0,resumeProgressSeconds:c=0,className:u=``})=>{let d=p(()=>({id:t.id,name:t.name,preview_images:t.preview_images,img_y:t.img_y,img_x:t.img_x}),[t.id,t.name,t.preview_images,t.img_y,t.img_x]),f=p(()=>{let e=t?.medias,n=Array.isArray(e)?e.filter(Boolean):[];return n.length>0?n:(d.preview_images?.length?d.preview_images:[d.img_y||d.img_x||``].filter(Boolean)).filter(Boolean).map(e=>({media_url:e,is_video:!1,cover_image:``}))},[d.img_x,d.img_y,d.preview_images,t]),m=s(),h=p(()=>f.filter(Boolean).map(e=>{let n=e?.is_video?`video`:`image`,r=String(e?.media_url||``),i=e?.cover_image||t.img_y||t.img_x;return{src:r,type:n,...i?{cover:String(i)}:{}}}).filter(e=>!!e.src),[t.img_x,t.img_y,f]);return n?g(b,{information:t,episodeIndex:a,resumeProgressSeconds:c}):_(`div`,{className:e(`w-full`,u),children:[_(r,{className:`mt-3 px-[12px] space-y-1`,children:[g(i,{as:`p`,className:`break-all`,dangerouslySetInnerHTML:{__html:t.description}}),g(l,{medias:f,onItemClick:e=>{h.length&&m.open(h,e)}})]}),g(o,{})]})});y.displayName=`DetailHero`;const b=u(({information:e,episodeIndex:t,resumeProgressSeconds:n})=>{let r=p(()=>({id:e.id,mid:e.mid,img_width:e.img_width,img_height:e.img_height,img_y:e.img_y,img_x:e.img_x,preview_images:e.preview_images}),[e.id,e.mid,e.img_width,e.img_height,e.img_y,e.img_x,e.preview_images]);return g(x,{information:{...e,...r},episodeIndex:t,resumeProgressSeconds:n})},(e,t)=>{let n=e.information,r=t.information;return n.id===r.id&&n.mid===r.mid&&n.img_width===r.img_width&&n.img_height===r.img_height&&n.img_y===r.img_y&&n.img_x===r.img_x&&e.resumeProgressSeconds===t.resumeProgressSeconds&&e.episodeIndex===t.episodeIndex});b.displayName=`StableDetailPlayerBox`;function x({information:e,episodeIndex:i,resumeProgressSeconds:o}){let s=v(`components.biz.business.detail`),l=m(0),u=m(0),y=Math.max(0,Number(i)||0),b=y+1,x=p(()=>e?.id,[e?.id]),T=p(()=>({id:e.id,mid:e.mid,img_width:e.img_width,img_height:e.img_height,img_y:e.img_y,img_x:e.img_x,preview_images:e.preview_images,links:e.links}),[e.id,e.mid,e.img_width,e.img_height,e.img_y,e.img_x,e.preview_images,e.links]),E=p(()=>T.mid||T.id,[T.id,T.mid]),D=p(()=>{let e=T.links?.[y]?.id;return e?String(e):`ep-${y+1}`},[y,T.links]),O=p(()=>`__reportData_detail_page__${T.id}:${D}`,[D,T.id]),k=p(()=>{if(typeof window>`u`)return 0;try{let e=sessionStorage.getItem(O);if(!e)return 0;let t=JSON.parse(e),n=Number(t.currentTime||0),r=Number(t.duration||0);if(!Number.isFinite(n)||!Number.isFinite(r))return 0;if(n>0&&r>0)return n}catch(e){console.error(`读取 sessionStorage 数据失败:`,e)}return 0},[O]),A=p(()=>{let e=Number(o||0);return Number.isFinite(e)&&e>0?e:0},[o]),j=p(()=>A>0?A:k,[A,k]),M=p(()=>{let t=w(e),n=t[t.length?Math.max(0,Math.min(y,t.length-1)):0]?.url||``,r=!!t.length;if(!r)return{hasVideo:!1,hlsList:[],videoUrl:``,width:1,height:1,resolution:`0x0`,aspectRatio:1,poster:``};let i=Number(T.img_width||0)||1,a=Number(T.img_height||0)||1;return{hasVideo:r,hlsList:t,videoUrl:n,width:i,height:a,resolution:S(i,a),aspectRatio:(i||1)/(a||1),poster:T.img_y||T.img_x||T.preview_images?.[0]||``}},[e.id,e.links,y,T.img_width,T.img_height,T.img_y,T.img_x,T.preview_images]),N=d((e,t)=>{l.current=e,u.current=t},[]),P=p(()=>M.videoUrl.endsWith(`m3u8`)?{startTimeSeconds:j,preload:`none`}:{startTimeSeconds:j},[j,M.videoUrl]);f(()=>{l.current=0,u.current=0},[x,y]);let F=a({contentId:x,browseEpisode:b,contentType:1,enabled:!!x,intervalMs:60*1e3,getCurrentTimeSeconds:()=>l.current,getDurationSeconds:()=>u.current});if(f(()=>{let e=()=>{if(!(typeof window>`u`)&&!(l.current<=0||u.current<=0))try{sessionStorage.setItem(O,JSON.stringify({episodeId:D,currentTime:l.current,duration:u.current}))}catch(e){console.error(`写入 sessionStorage 失败:`,e)}},t=()=>{e()},n=()=>{document.visibilityState===`hidden`&&e()},r=()=>{e()};return window.addEventListener(`beforeunload`,t),document.addEventListener(`visibilitychange`,n),window.addEventListener(`popstate`,r),()=>{window.removeEventListener(`beforeunload`,t),document.removeEventListener(`visibilitychange`,n),window.removeEventListener(`popstate`,r),e()}},[D,O]),!M.hasVideo)return g(`div`,{className:`mt-3 rounded-xl bg-bg1 px-3 py-10 text-center text-text3`,children:s(`videoHero.noVideos`)});let I=C(430,M.aspectRatio,242),L=I.height>0?t(I.height):`auto`,R=t(242);return _(h,{children:[g(r,{suppressHydrationWarning:!0,className:`w-full`,style:{height:L,maxWidth:`100%`,maxHeight:R}}),_(r,{className:`w-full relative bg-bg2 !fixed !top-[44px] !left-0 z-[10]`,children:[M.poster&&_(`div`,{className:`w-full h-full bg-bg2 absolute top-0 left-0 z-[1] overflow-hidden`,style:{height:L},children:[g(n,{src:M.poster,alt:s(`videoHero.coverAlt`),fill:!0,className:`object-cover`,priority:!0}),g(`div`,{className:`w-full h-full absolute top-0 left-0 z-[1] bg-[rgba(255,255,255,0.2)] backdrop-blur-[4px]`})]}),g(r,{suppressHydrationWarning:!0,"data-aspect-ratio":M.resolution,className:`w-full overflow-hidden flex justify-center relative z-[2]`,style:{height:L,maxWidth:`100%`,maxHeight:R,backdropFilter:`blur(0)`,WebkitBackdropFilter:`blur(0)`},children:g(c,{plyerId:`detail-player-${T.id}-${y}`,parentId:E,resolution:M.resolution||`0x0`,videoUrl:M.videoUrl,poster:M.poster,mergeConfig:P,onProgressUpdate:N,onPlay:F.handlePlay,onPause:F.handlePause,onEnded:F.handleEnded},`stable-player-${T.id}-${y}`)})]})]})}function S(e,t){return!e||!t?``:`${e}x${t}`}function C(e,t,n){let r=e/t;return r<=n?{width:e,height:r}:{width:n*t,height:n}}function w(e){let t=e.links||[];return t.length>0?t.map((e,t)=>({text:e.name||String(t+1),url:e.m3u8_url||e.preview_m3u8_url||``,definition:``,isDefault:t===0})).filter(e=>e.url):[]}export{y as DetailHero};
2
+ "use client";import{cn as e}from"../../../../utils/cn.mjs";import{pxToVw as t}from"../../../../utils/helper.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{useAppContext as a}from"../../../../hooks/use-app-context/index.mjs";import{useBrowseReport as o}from"../../../../hooks/use-browse-report.mjs";import{MediaPreview as s,useMediaPreview as c}from"../../../common/media-preview/index.mjs";import l from"../../../common/video-player/index.mjs";import{UserActivityMediaGrid as u}from"../../../common/list/user-activity-list/user-activity-list-item.mjs";import{memo as d,useCallback as f,useEffect as p,useMemo as m,useRef as h}from"react";import{Fragment as g,jsx as _,jsxs as v}from"react/jsx-runtime";import{useTranslations as y}from"next-intl";const b=d(({information:t,isVideo:n,episodeIndex:o=0,resumeProgressSeconds:l=0,className:d=``})=>{let p=a()===`editor`,h=m(()=>({id:t.id,name:t.name,preview_images:t.preview_images,img_y:t.img_y,img_x:t.img_x}),[t.id,t.name,t.preview_images,t.img_y,t.img_x]),g=m(()=>{let e=t?.medias,n=Array.isArray(e)?e.filter(Boolean):[];return n.length>0?n:(h.preview_images?.length?h.preview_images:[h.img_y||h.img_x||``].filter(Boolean)).filter(Boolean).map(e=>({media_url:e,is_video:!1,cover_image:``}))},[h.img_x,h.img_y,h.preview_images,t]),y=c(),b=m(()=>g.filter(Boolean).map(e=>{let n=e?.is_video?`video`:`image`,r=String(e?.media_url||``),i=e?.cover_image||t.img_y||t.img_x;return{src:r,type:n,...i?{cover:String(i)}:{}}}).filter(e=>!!e.src),[t.img_x,t.img_y,g]),S=f(e=>{p||!b.length||y.open(b,e)},[p,y,b]);return p?_(`img`,{src:`/static/components-thumb/video_player.png`,alt:`video-preview`,className:`w-full block`}):n?_(x,{information:t,episodeIndex:o,resumeProgressSeconds:l,isEditor:p}):v(`div`,{className:e(`w-full`,d),children:[v(r,{className:`mt-3 px-[12px] space-y-1`,children:[_(i,{as:`p`,className:`break-all`,dangerouslySetInnerHTML:{__html:t.description}}),_(u,{medias:g,onItemClick:S})]}),_(s,{})]})});b.displayName=`DetailHero`;const x=d(({information:e,episodeIndex:t,resumeProgressSeconds:n,isEditor:r})=>{let i=m(()=>({id:e.id,mid:e.mid,img_width:e.img_width,img_height:e.img_height,img_y:e.img_y,img_x:e.img_x,preview_images:e.preview_images}),[e.id,e.mid,e.img_width,e.img_height,e.img_y,e.img_x,e.preview_images]);return _(S,{information:{...e,...i},episodeIndex:t,resumeProgressSeconds:n,isEditor:r})},(e,t)=>{let n=e.information,r=t.information;return n.id===r.id&&n.mid===r.mid&&n.img_width===r.img_width&&n.img_height===r.img_height&&n.img_y===r.img_y&&n.img_x===r.img_x&&e.resumeProgressSeconds===t.resumeProgressSeconds&&e.episodeIndex===t.episodeIndex&&e.isEditor===t.isEditor});x.displayName=`StableDetailPlayerBox`;function S({information:e,episodeIndex:i,resumeProgressSeconds:a,isEditor:s}){let c=y(`components.biz.business.detail`),u=h(0),d=h(0),b=Math.max(0,Number(i)||0),x=b+1,S=m(()=>e?.id,[e?.id]),E=m(()=>({id:e.id,mid:e.mid,img_width:e.img_width,img_height:e.img_height,img_y:e.img_y,img_x:e.img_x,preview_images:e.preview_images,links:e.links}),[e.id,e.mid,e.img_width,e.img_height,e.img_y,e.img_x,e.preview_images,e.links]),D=m(()=>E.mid||E.id,[E.id,E.mid]),O=m(()=>{let e=E.links?.[b]?.id;return e?String(e):`ep-${b+1}`},[b,E.links]),k=m(()=>`__reportData_detail_page__${E.id}:${O}`,[O,E.id]),A=m(()=>{if(s||typeof window>`u`)return 0;try{let e=sessionStorage.getItem(k);if(!e)return 0;let t=JSON.parse(e),n=Number(t.currentTime||0),r=Number(t.duration||0);if(!Number.isFinite(n)||!Number.isFinite(r))return 0;if(n>0&&r>0)return n}catch(e){console.error(`读取 sessionStorage 数据失败:`,e)}return 0},[s,k]),j=m(()=>{let e=Number(a||0);return Number.isFinite(e)&&e>0?e:0},[a]),M=m(()=>j>0?j:A,[j,A]),N=m(()=>{let t=T(e),n=t[t.length?Math.max(0,Math.min(b,t.length-1)):0]?.url||``,r=!!t.length;if(!r)return{hasVideo:!1,hlsList:[],videoUrl:``,width:1,height:1,resolution:`0x0`,aspectRatio:1,poster:``};let i=Number(E.img_width||0)||1,a=Number(E.img_height||0)||1;return{hasVideo:r,hlsList:t,videoUrl:n,width:i,height:a,resolution:C(i,a),aspectRatio:(i||1)/(a||1),poster:E.img_y||E.img_x||E.preview_images?.[0]||``}},[e.id,e.links,b,E.img_width,E.img_height,E.img_y,E.img_x,E.preview_images]),P=f((e,t)=>{u.current=e,d.current=t},[]),F=m(()=>N.videoUrl.endsWith(`m3u8`)?{startTimeSeconds:M,preload:`none`}:{startTimeSeconds:M},[M,N.videoUrl]);p(()=>{u.current=0,d.current=0},[S,b]);let I=o({contentId:S,browseEpisode:x,contentType:1,enabled:!s&&!!S,intervalMs:60*1e3,getCurrentTimeSeconds:()=>u.current,getDurationSeconds:()=>d.current});if(p(()=>{if(s)return;let e=()=>{if(!(typeof window>`u`)&&!(u.current<=0||d.current<=0))try{sessionStorage.setItem(k,JSON.stringify({episodeId:O,currentTime:u.current,duration:d.current}))}catch(e){console.error(`写入 sessionStorage 失败:`,e)}},t=()=>{e()},n=()=>{document.visibilityState===`hidden`&&e()},r=()=>{e()};return window.addEventListener(`beforeunload`,t),document.addEventListener(`visibilitychange`,n),window.addEventListener(`popstate`,r),()=>{window.removeEventListener(`beforeunload`,t),document.removeEventListener(`visibilitychange`,n),window.removeEventListener(`popstate`,r),e()}},[O,s,k]),!N.hasVideo)return _(`div`,{className:`mt-3 rounded-xl bg-bg1 px-3 py-10 text-center text-text3`,children:c(`videoHero.noVideos`)});let L=w(430,N.aspectRatio,242),R=L.height>0?t(L.height):`auto`,z=t(242);return v(g,{children:[_(r,{suppressHydrationWarning:!0,className:`w-full`,style:{height:R,maxWidth:`100%`,maxHeight:z}}),v(r,{className:`w-full relative bg-bg2 !fixed !top-[44px] !left-0 z-[10]`,children:[N.poster&&v(`div`,{className:`w-full h-full bg-bg2 absolute top-0 left-0 z-[1] overflow-hidden`,style:{height:R},children:[_(n,{src:N.poster,alt:c(`videoHero.coverAlt`),fill:!0,className:`object-cover`,priority:!0}),_(`div`,{className:`w-full h-full absolute top-0 left-0 z-[1] bg-[rgba(255,255,255,0.2)] backdrop-blur-[4px]`})]}),_(r,{suppressHydrationWarning:!0,"data-aspect-ratio":N.resolution,className:`w-full overflow-hidden flex justify-center relative z-[2]`,style:{height:R,maxWidth:`100%`,maxHeight:z,backdropFilter:`blur(0)`,WebkitBackdropFilter:`blur(0)`},children:_(l,{plyerId:`detail-player-${E.id}-${b}`,parentId:D,resolution:N.resolution||`0x0`,videoUrl:N.videoUrl,poster:N.poster,mergeConfig:F,onProgressUpdate:s?void 0:P,onPlay:s?void 0:I.handlePlay,onPause:s?void 0:I.handlePause,onEnded:s?void 0:I.handleEnded},`stable-player-${E.id}-${b}`)})]})]})}function C(e,t){return!e||!t?``:`${e}x${t}`}function w(e,t,n){let r=e/t;return r<=n?{width:e,height:r}:{width:n*t,height:n}}function T(e){let t=e.links||[];return t.length>0?t.map((e,t)=>({text:e.name||String(t+1),url:e.m3u8_url||e.preview_m3u8_url||``,definition:``,isDefault:t===0})).filter(e=>e.url):[]}export{b as DetailHero};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{gContentGetAppChannelBlockData as e}from"../../../../../service/generated/client.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{usePaginated as i}from"../../../../../hooks/query/use-query.mjs";import{useAppContext as a}from"../../../../../hooks/use-app-context/index.mjs";import o from"../../../../../assets/icons/detail/video_flag.mjs";import{MiniThreeCard as s}from"../../../../common/cards/mini-three-card.mjs";import{useCallback as c,useEffect as l,useLayoutEffect as u,useMemo as d,useRef as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{useRouter as g}from"next/navigation";const _={},v={list:[]};function y({variant:e,props:t=_,data:i=v}){let o=a(),s=g(),{list:y,title:x,cursor:S,block_id:w,channel_id:T}=i,E=Array.isArray(i.icons)?i.icons:[],{moreLink:D}=t,[O,k]=p(0),j=f(null),{items:P,icons:F,hasNextPage:I,isFetchingNextPage:L,fetchNextPage:R}=N({blockId:w||``,initialCursor:S||``,initialIcons:E,initialList:y,pageSize:16,enabled:o===`renderer`}),z=e===`waterfall`?6:4,B=P.length>=z?P.length-z:-1,V=f(null),H=f(!1),U=x||``,W=C(D,w||``,T||``),G=!!(S&&S.trim()),K=o===`renderer`&&(G||I===!0),q=c(()=>{W&&(W.startsWith(`http`)?window.location.href=W:s.push(W))},[W,s]);u(()=>{let t=j.current;if(!t||e!==`waterfall`)return;let n=()=>{let e=t.clientWidth||0;k(e>0?(e-12)/2:0)};n();let r=new ResizeObserver(n);return r.observe(t),()=>{r.disconnect()}},[e]),l(()=>{let e=V.current;if(!e||!K||P.length<16)return;let t=document.getElementById(`app-scroll-container`)||null,n=new IntersectionObserver(e=>{e[0]?.isIntersecting&&(L||H.current||(H.current=!0,R().finally(()=>{H.current=!1})))},{root:t,threshold:0});return n.observe(e),()=>{n.disconnect()}},[K,R,L,P.length,B]);let J=d(()=>e===`waterfall`?A(P,F,O):{left:[],right:[]},[O,P,F,e]);return P.length?h(n,{className:`w-full mt-[16px]`,children:[h(n,{className:`flex items-center justify-between px-[12px] mb-[8px]`,children:[m(r,{className:`text-text1 text-[18px] leading-[26px] font-bold line-clamp-1`,children:U}),m(r,{className:`text-text3 text-[12px] leading-[18px] ${W?`cursor-pointer`:``}`,onClick:q,children:`更多`})]}),e===`grid`&&m(n,{className:`w-full flex flex-wrap px-[12px]`,children:P.map((e,t)=>{let n=F[t];return m(`div`,{ref:t===B?V:void 0,className:`w-1/2 px-[6px]`,children:m(b,{item:e,icon:n,index:t,widthStyle:{width:`100%`}})},M(e,t))})}),e===`waterfall`&&h(n,{ref:j,className:`w-full px-[12px] flex gap-[12px]`,children:[m(n,{className:`flex-1 min-w-0 flex flex-col`,children:J.left.map(e=>m(`div`,{ref:e.index===B?V:void 0,children:m(b,{item:e.item,icon:e.icon,index:e.index,widthStyle:{width:`100%`}})},M(e.item,e.index)))}),m(n,{className:`flex-1 min-w-0 flex flex-col`,children:J.right.map(e=>m(`div`,{ref:e.index===B?V:void 0,children:m(b,{item:e.item,icon:e.icon,index:e.index,widthStyle:{width:`100%`}})},M(e.item,e.index)))})]})]}):null}function b({item:e,icon:t,index:i,widthStyle:a}){let c=w(e),l=e.name||``,u=E(e.static?.browse_cnt??0),d=T(e),f=k(e,t,i);return m(s,{url:c,text:l,className:`w-full`,style:a,topRightChild:f?m(x,{url:f}):void 0,bottomLeftChild:h(n,{className:`h-[20px] leading-[20px] text-[#fff] text-[12px] px-[4px] rounded-[4px] bg-[#333] ml-[4px] flex items-center`,children:[m(o,{className:`w-[16px] h-[auto] text-[#fff] mr-[4px]`}),u]}),textChild:h(n,{className:`mt-[4px]`,children:[m(r,{as:`h3`,className:`text-text1 text-[14px] leading-[20px] line-clamp-1`,children:l}),d&&m(r,{className:`text-text3 text-[12px] leading-[18px]`,children:d})]}),linkPath:S(e)})}function x({url:e}){return m(n,{className:`relative w-[40px] h-[20px] mr-[6px] mt-[6px]`,children:m(t,{src:e,alt:`corner`,fill:!0,objectFit:`contain`})})}function S(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id||``}/${t}/episode/1`}function C(e,t,n){if(e)return e;if(!t)return``;let r=new URLSearchParams({blockId:t});return n&&r.set(`channelId`,n),`/featured?${r.toString()}`}function w(e){return e.img_y||e.img_x||``}function T(e){if((e.type??0)===2){let t=Number(e.episode_cnt||e.links?.length||0);return t>0?`全${t}集`:``}return O(Number(e.duration||0))}function E(e){return!Number.isFinite(e)||e<=0?`0`:e>=1e6?`${D(e/1e6)}M`:e>=1e3?`${D(e/1e3)}k`:Math.floor(e).toString()}function D(e){let t=e.toFixed(1);return t.endsWith(`.0`)?t.slice(0,-2):t}function O(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 k(e,t,n){let r=e;return r.corner_icon_url||r.corner_icon||r.icon_url||t?.material_url||``}function A(e,t,n){let r=[],i=[],a=0,o=0;return e.forEach((e,s)=>{let c=t[s],l=j(n,e);a<=o?(r.push({item:e,icon:c,index:s}),a+=l):(i.push({item:e,icon:c,index:s}),o+=l)}),{left:r,right:i}}function j(e,t){if(!e)return 0;let n=e*1.3461538461538463,r=T(t)?18:0;return n+20+r+6+16}function M(e,t){return e.id?`home-recommend-${e.id}`:`home-recommend-${t}`}function N({blockId:t,initialList:n,initialCursor:r,initialIcons:a,pageSize:o,enabled:s}){let m=n.length>0,h=f(n),g=f(a),[_,v]=p(!1);l(()=>{h.current=n,g.current=a},[a,n]);let y=d(()=>{if(!m)return;let e=r&&r.trim()?r:void 0;return{pages:[{data:{block:{data:{videos:n,icons:a,cursor:r||``}}}}],pageParams:[e]}},[m,r,a,n]),{data:b,fetchNextPage:x,hasNextPage:S,isFetchingNextPage:C}=i({key:[`home-recommend`,t],queryFn:n=>e({block_id:t,cursor:n||void 0,page_size:o}),getNextPageParam:e=>{let t=e.data?.block?.data?.cursor;return t&&t.trim()?t:void 0},options:{enabled:s&&!!t,initialData:y,refetchOnMount:!1,refetchOnWindowFocus:!1,refetchOnReconnect:!1},initialPageParam:m&&r&&r.trim()?r:void 0});u(()=>{v(!0)},[]);let w=d(()=>{if(!_)return{items:m?[...h.current]:[],icons:m?[...g.current]:[]};let e=b?.pages||[],t=[],n=[],r=m?1:0;m&&(t.push(...h.current),n.push(...g.current));for(let i=r;i<e.length;i++){let r=e[i].data?.block?.data,a=r?.videos||[],o=r?.icons||[];t.push(...a),n.push(...o)}return{items:t,icons:n}},[m,_,b?.pages]),T=c(async()=>{await x()},[x]);return{items:w.items,icons:w.icons,hasNextPage:S,isFetchingNextPage:C,fetchNextPage:T}}export{y as default};
2
+ "use client";import{gContentGetAppChannelBlockData as e}from"../../../../../service/generated/client.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{usePaginated as i}from"../../../../../hooks/query/use-query.mjs";import{useAppContext as a}from"../../../../../hooks/use-app-context/index.mjs";import o from"../../../../../assets/icons/detail/video_flag.mjs";import{MiniThreeCard as s}from"../../../../common/cards/mini-three-card.mjs";import{useCallback as c,useEffect as l,useLayoutEffect as u,useMemo as d,useRef as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{useRouter as g}from"next/navigation";const _={},v={list:[]};function y({variant:e,props:t=_,data:i=v}){let o=a(),s=g(),{list:y,title:x,cursor:S,block_id:w,channel_id:T}=i,E=Array.isArray(i.icons)?i.icons:[],{moreLink:D,title:O,enableInfinite:k}=t,[j,P]=p(0),F=f(null),I=k===!0,{items:L,icons:R,hasNextPage:z,isFetchingNextPage:B,fetchNextPage:V}=N({blockId:w||``,initialCursor:S||``,initialIcons:E,initialList:y,pageSize:16,enabled:o===`renderer`&&I}),H=e===`waterfall`?6:4,U=L.length>=H?L.length-H:-1,W=f(null),G=f(!1),K=O&&O.trim()||x||``,q=e!==`waterfall`&&!I,J=q?C(D,w||``,T||``):``,Y=!!(S&&S.trim()),X=o===`renderer`&&I&&(Y||z===!0),Z=c(()=>{J&&(J.startsWith(`http`)?window.location.href=J:s.push(J))},[J,s]);u(()=>{let t=F.current;if(!t||e!==`waterfall`)return;let n=()=>{let e=t.clientWidth||0;P(e>0?(e-12)/2:0)};n();let r=new ResizeObserver(n);return r.observe(t),()=>{r.disconnect()}},[e]),l(()=>{let e=W.current;if(!e||!X||L.length<16)return;let t=document.getElementById(`app-scroll-container`)||null,n=new IntersectionObserver(e=>{e[0]?.isIntersecting&&(B||G.current||(G.current=!0,V().finally(()=>{G.current=!1})))},{root:t,threshold:0});return n.observe(e),()=>{n.disconnect()}},[X,V,B,L.length,U]);let Q=d(()=>e===`waterfall`?A(L,R,j):{left:[],right:[]},[j,L,R,e]);return L.length?h(n,{className:`w-full mt-[16px]`,children:[h(n,{className:`flex items-center justify-between px-[12px] mb-[8px]`,children:[m(r,{className:`text-text1 text-[18px] leading-[26px] font-bold line-clamp-1`,children:K}),q&&m(r,{className:`text-text3 text-[12px] leading-[18px] ${J?`cursor-pointer`:``}`,onClick:Z,children:`更多`})]}),e===`grid`&&m(n,{className:`w-full flex flex-wrap px-[12px]`,children:L.map((e,t)=>{let n=R[t];return m(`div`,{ref:t===U?W:void 0,className:`w-1/2 px-[6px]`,children:m(b,{item:e,icon:n,index:t,widthStyle:{width:`100%`}})},M(e,t))})}),e===`waterfall`&&h(n,{ref:F,className:`w-full px-[12px] flex gap-[12px]`,children:[m(n,{className:`flex-1 min-w-0 flex flex-col`,children:Q.left.map(e=>m(`div`,{ref:e.index===U?W:void 0,children:m(b,{item:e.item,icon:e.icon,index:e.index,widthStyle:{width:`100%`}})},M(e.item,e.index)))}),m(n,{className:`flex-1 min-w-0 flex flex-col`,children:Q.right.map(e=>m(`div`,{ref:e.index===U?W:void 0,children:m(b,{item:e.item,icon:e.icon,index:e.index,widthStyle:{width:`100%`}})},M(e.item,e.index)))})]})]}):null}function b({item:e,icon:t,index:i,widthStyle:a}){let c=w(e),l=e.name||``,u=E(e.static?.browse_cnt??0),d=T(e),f=k(e,t,i);return m(s,{url:c,text:l,className:`w-full`,style:a,topRightChild:f?m(x,{url:f}):void 0,bottomLeftChild:h(n,{className:`h-[20px] leading-[20px] text-[#fff] text-[12px] px-[4px] rounded-[4px] bg-[#333] ml-[4px] flex items-center`,children:[m(o,{className:`w-[16px] h-[auto] text-[#fff] mr-[4px]`}),u]}),textChild:h(n,{className:`mt-[4px]`,children:[m(r,{as:`h3`,className:`text-text1 text-[14px] leading-[20px] line-clamp-1`,children:l}),d&&m(r,{className:`text-text3 text-[12px] leading-[18px]`,children:d})]}),linkPath:S(e)})}function x({url:e}){return m(n,{className:`relative w-[40px] h-[20px] mr-[6px] mt-[6px]`,children:m(t,{src:e,alt:`corner`,fill:!0,objectFit:`contain`})})}function S(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id||``}/${t}/episode/1`}function C(e,t,n){if(e)return e;if(!t)return``;let r=new URLSearchParams({blockId:t});return n&&r.set(`channelId`,n),`/featured?${r.toString()}`}function w(e){return e.img_y||e.img_x||``}function T(e){if((e.type??0)===2){let t=Number(e.episode_cnt||e.links?.length||0);return t>0?`全${t}集`:``}return O(Number(e.duration||0))}function E(e){return!Number.isFinite(e)||e<=0?`0`:e>=1e6?`${D(e/1e6)}M`:e>=1e3?`${D(e/1e3)}k`:Math.floor(e).toString()}function D(e){let t=e.toFixed(1);return t.endsWith(`.0`)?t.slice(0,-2):t}function O(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 k(e,t,n){let r=e;return r.corner_icon_url||r.corner_icon||r.icon_url||t?.material_url||``}function A(e,t,n){let r=[],i=[],a=0,o=0;return e.forEach((e,s)=>{let c=t[s],l=j(n,e);a<=o?(r.push({item:e,icon:c,index:s}),a+=l):(i.push({item:e,icon:c,index:s}),o+=l)}),{left:r,right:i}}function j(e,t){if(!e)return 0;let n=e*1.3461538461538463,r=T(t)?18:0;return n+20+r+6+16}function M(e,t){return e.id?`home-recommend-${e.id}`:`home-recommend-${t}`}function N({blockId:t,initialList:n,initialCursor:r,initialIcons:a,pageSize:o,enabled:s}){let m=n.length>0,h=f(n),g=f(a),[_,v]=p(!1);l(()=>{h.current=n,g.current=a},[a,n]);let y=d(()=>{if(!m)return;let e=r&&r.trim()?r:void 0;return{pages:[{data:{block:{data:{videos:n,icons:a,cursor:r||``}}}}],pageParams:[e]}},[m,r,a,n]),{data:b,fetchNextPage:x,hasNextPage:S,isFetchingNextPage:C}=i({key:[`home-recommend`,t],queryFn:n=>e({block_id:t,cursor:n||void 0,page_size:o}),getNextPageParam:e=>{let t=e.data?.block?.data?.cursor;return t&&t.trim()?t:void 0},options:{enabled:s&&!!t,initialData:y,refetchOnMount:!1,refetchOnWindowFocus:!1,refetchOnReconnect:!1},initialPageParam:m&&r&&r.trim()?r:void 0});u(()=>{v(!0)},[]);let w=d(()=>{if(!_)return{items:m?[...h.current]:[],icons:m?[...g.current]:[]};let e=b?.pages||[],t=[],n=[],r=m?1:0;m&&(t.push(...h.current),n.push(...g.current));for(let i=r;i<e.length;i++){let r=e[i].data?.block?.data,a=r?.videos||[],o=r?.icons||[];t.push(...a),n.push(...o)}return{items:t,icons:n}},[m,_,b?.pages]),T=c(async()=>{await x()},[x]);return{items:w.items,icons:w.icons,hasNextPage:S,isFetchingNextPage:C,fetchNextPage:T}}export{y as default};
@@ -0,0 +1,2 @@
1
+
2
+ const e=`/static/components-thumb/video_player.png`,t=Array.from({length:12},(t,n)=>{let r=n%2==1,i={browse_cnt:12345+n*731};return{id:`preview-recommend-${n+1}`,name:`媒资标题 ${n+1}`,img_y:e,img_x:e,type:r?2:1,duration:r?0:60*(18+n),episode_cnt:r?12+n%3*6:0,static:i}});function n(e,t){return t?8:e===`waterfall`?4:2}function r(e){let n=Math.max(1,Math.floor(e));return Array.from({length:n},(e,n)=>({...t[n%t.length],id:`preview-recommend-${n+1}`,name:`媒资标题 ${n+1}`}))}function i({variant:e,schemaTitle:t,enableInfinite:i,data:a}){let o=Array.isArray(a?.list)?a.list.filter(Boolean):[],s=n(e,i);return{title:t&&t.trim()||a?.title||`推荐位名称`,list:o.length?o:r(s),icons:Array.isArray(a?.icons)?a.icons:[],cursor:a?.cursor||``,block_id:a?.block_id||``,channel_id:a?.channel_id||``,show_style:a?.show_style}}export{i as buildHomeRecommendEditorPreviewData};
@@ -8,9 +8,13 @@ import z$1 from "zod";
8
8
  * HomeRecommendGrid 物料属性 schema 定义。
9
9
  */
10
10
  declare const homeRecommendGridInspectorPropsSchema: z$1.ZodObject<{
11
+ title: z$1.ZodOptional<z$1.ZodString> & SchemaHasDefaultValue;
12
+ enableInfinite: z$1.ZodOptional<z$1.ZodBoolean> & SchemaHasDefaultValue;
11
13
  moreLink: z$1.ZodOptional<z$1.ZodString> & SchemaHasDefaultValue;
12
14
  }, z$1.core.$strip>;
13
15
  declare const homeRecommendGridInspectorDefaultProps: {
16
+ title: string;
17
+ enableInfinite: boolean;
14
18
  moreLink: string;
15
19
  };
16
20
  type HomeRecommendGridInspectorProps = z$1.infer<typeof homeRecommendGridInspectorPropsSchema>;
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineComponentPropsSchema as e,defineTextPropSchema as t,getSchemaDefaultProps as n}from"../../../../../../utils/schema/schema.mjs";const r=e({moreLink:t({label:`更多`,description:``,required:!1,defaultValue:``})}),i=n(r);export{i as homeRecommendGridInspectorDefaultProps,r as homeRecommendGridInspectorPropsSchema};
2
+ import{defineComponentPropsSchema as e,defineSwitchPropSchema as t,defineTextPropSchema as n,getSchemaDefaultProps as r}from"../../../../../../utils/schema/schema.mjs";const i=e({title:n({label:`推荐位名称`,description:``,required:!1,defaultValue:``}),enableInfinite:t({label:`无限下拉`,defaultValue:!1,required:!1}),moreLink:n({label:`更多`,description:``,required:!1,defaultValue:``})}),a=r(i);export{a as homeRecommendGridInspectorDefaultProps,i as homeRecommendGridInspectorPropsSchema};
@@ -8,6 +8,8 @@ import * as zod_v4_core0 from "zod/v4/core";
8
8
 
9
9
  //#region components/biz/business/home-recommend/variants/home-recommend-grid/material.d.ts
10
10
  declare const homeRecommendGridMaterial: DefineMaterialOption<typeof HomeRecommendGrid, typeof HomeRecommendGrid, zod.ZodObject<{
11
+ title: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
12
+ enableInfinite: zod.ZodOptional<zod.ZodBoolean> & SchemaHasDefaultValue;
11
13
  moreLink: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
12
14
  }, zod_v4_core0.$strip>, "home-recommend-grid">;
13
15
  //#endregion
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{homeRecommendGridInspectorPropsSchema as t}from"./inspector-schema.mjs";import{HomeRecommendGrid as n}from"./server.mjs";const r=e({type:`home-recommend-grid`,name:`两列宫格`,icon:`/static/components-thumb/grid_two_column_single_row.png`,category:`频道`,serverComponent:n,clientComponent:n,propsSchema:t});export{r as homeRecommendGridMaterial};
2
+ import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{homeRecommendGridInspectorPropsSchema as t}from"./inspector-schema.mjs";import{HomeRecommendGrid as n}from"./server.mjs";const r=e({type:`home-recommend-grid`,name:`两列宫格`,icon:`/static/components-thumb/grid_two_column_single_row.png`,category:`内容组件`,serverComponent:n,clientComponent:n,propsSchema:t});export{r as homeRecommendGridMaterial};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useAppContext as e}from"../../../../../../../hooks/use-app-context/index.mjs";import t from"../../../shared/home-recommend-base.mjs";import{jsx as n}from"react/jsx-runtime";function r(r){return e()===`editor`?n(`div`,{children:`占位`}):n(t,{variant:`grid`,...r})}export{r as default};
2
+ "use client";import{useAppContext as e}from"../../../../../../../hooks/use-app-context/index.mjs";import t from"../../../shared/home-recommend-base.mjs";import{buildHomeRecommendEditorPreviewData as n}from"../../../shared/home-recommend-preview.mjs";import{useMemo as r}from"react";import{jsx as i}from"react/jsx-runtime";function a(a){let o=e()===`editor`,s=a.props||{},c=r(()=>o?n({variant:`grid`,schemaTitle:s.title,enableInfinite:s.enableInfinite,data:a.data}):a.data,[o,a.data,s.enableInfinite,s.title]);return i(`div`,{className:o?`pointer-events-none`:void 0,children:i(t,{variant:`grid`,...a,data:c})})}export{a as default};
@@ -1,2 +1,2 @@
1
1
 
2
- const e={componentName:`HomeRecommendGrid`,displayName:`两列宫格推荐位`,category:`HomeRecommend`,categoryName:`频道`,enabled:!0};export{e as componentMeta};
2
+ const e={componentName:`HomeRecommendGrid`,displayName:`两列宫格推荐位`,category:`HomeRecommend`,categoryName:`内容组件`,enabled:!0};export{e as componentMeta};
@@ -1,2 +1,2 @@
1
1
 
2
- import{defaultProps as e}from"./defaults/default-props.mjs";import t from"./runtime/client.mjs";import{jsx as n}from"react/jsx-runtime";function r(r){let{moreLink:i=e.moreLink,data:a}=r;return n(t,{props:{moreLink:i},data:a})}export{r as HomeRecommendGrid};
2
+ import{defaultProps as e}from"./defaults/default-props.mjs";import t from"./runtime/client.mjs";import{jsx as n}from"react/jsx-runtime";function r(r){let{moreLink:i=e.moreLink,title:a,enableInfinite:o,data:s}=r;return n(t,{props:{moreLink:i,title:a,enableInfinite:o},data:s})}export{r as HomeRecommendGrid};
@@ -3,8 +3,6 @@
3
3
  /**
4
4
  * HomeRecommendWaterfall 组件默认 Props 配置。
5
5
  */
6
- declare const defaultProps: {
7
- /** 更多跳转链接(空字符串表示使用默认规则)。 */moreLink: string;
8
- };
6
+ declare const defaultProps: {};
9
7
  //#endregion
10
8
  export { defaultProps };
@@ -1,2 +1,2 @@
1
1
 
2
- const e={moreLink:``};export{e as defaultProps};
2
+ const e={};export{e as defaultProps};
@@ -8,10 +8,12 @@ import z$1 from "zod";
8
8
  * HomeRecommendWaterfall 物料属性 schema 定义。
9
9
  */
10
10
  declare const homeRecommendWaterfallInspectorPropsSchema: z$1.ZodObject<{
11
- moreLink: z$1.ZodOptional<z$1.ZodString> & SchemaHasDefaultValue;
11
+ title: z$1.ZodOptional<z$1.ZodString> & SchemaHasDefaultValue;
12
+ enableInfinite: z$1.ZodOptional<z$1.ZodBoolean> & SchemaHasDefaultValue;
12
13
  }, z$1.core.$strip>;
13
14
  declare const homeRecommendWaterfallInspectorDefaultProps: {
14
- moreLink: string;
15
+ title: string;
16
+ enableInfinite: boolean;
15
17
  };
16
18
  type HomeRecommendWaterfallInspectorProps = z$1.infer<typeof homeRecommendWaterfallInspectorPropsSchema>;
17
19
  //#endregion
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineComponentPropsSchema as e,defineTextPropSchema as t,getSchemaDefaultProps as n}from"../../../../../../utils/schema/schema.mjs";const r=e({moreLink:t({label:`更多`,description:``,required:!1,defaultValue:``})}),i=n(r);export{i as homeRecommendWaterfallInspectorDefaultProps,r as homeRecommendWaterfallInspectorPropsSchema};
2
+ import{defineComponentPropsSchema as e,defineSwitchPropSchema as t,defineTextPropSchema as n,getSchemaDefaultProps as r}from"../../../../../../utils/schema/schema.mjs";const i=e({title:n({label:`推荐位名称`,description:``,required:!1,defaultValue:``}),enableInfinite:t({label:`无限下拉`,defaultValue:!1,required:!1})}),a=r(i);export{a as homeRecommendWaterfallInspectorDefaultProps,i as homeRecommendWaterfallInspectorPropsSchema};
@@ -8,7 +8,8 @@ import * as zod_v4_core0 from "zod/v4/core";
8
8
 
9
9
  //#region components/biz/business/home-recommend/variants/home-recommend-waterfall/material.d.ts
10
10
  declare const homeRecommendWaterfallMaterial: DefineMaterialOption<typeof HomeRecommendWaterfall, typeof HomeRecommendWaterfall, zod.ZodObject<{
11
- moreLink: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
11
+ title: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
12
+ enableInfinite: zod.ZodOptional<zod.ZodBoolean> & SchemaHasDefaultValue;
12
13
  }, zod_v4_core0.$strip>, "home-recommend-waterfall">;
13
14
  //#endregion
14
15
  export { homeRecommendWaterfallMaterial };
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{homeRecommendWaterfallInspectorPropsSchema as t}from"./inspector-schema.mjs";import{HomeRecommendWaterfall as n}from"./server.mjs";const r=e({type:`home-recommend-waterfall`,name:`瀑布流`,icon:`/static/components-thumb/grid_waterfall_two_column.png`,category:`频道`,serverComponent:n,clientComponent:n,propsSchema:t});export{r as homeRecommendWaterfallMaterial};
2
+ import{defineMaterial as e}from"../../../../../../utils/schema/material.mjs";import{homeRecommendWaterfallInspectorPropsSchema as t}from"./inspector-schema.mjs";import{HomeRecommendWaterfall as n}from"./server.mjs";const r=e({type:`home-recommend-waterfall`,name:`瀑布流`,icon:`/static/components-thumb/grid_waterfall_two_column.png`,category:`内容组件`,serverComponent:n,clientComponent:n,propsSchema:t});export{r as homeRecommendWaterfallMaterial};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useAppContext as e}from"../../../../../../../hooks/use-app-context/index.mjs";import t from"../../../shared/home-recommend-base.mjs";import{jsx as n}from"react/jsx-runtime";function r(r){return e()===`editor`?n(`div`,{children:`占位`}):n(t,{variant:`waterfall`,...r})}export{r as default};
2
+ "use client";import{useAppContext as e}from"../../../../../../../hooks/use-app-context/index.mjs";import t from"../../../shared/home-recommend-base.mjs";import{buildHomeRecommendEditorPreviewData as n}from"../../../shared/home-recommend-preview.mjs";import{useMemo as r}from"react";import{jsx as i}from"react/jsx-runtime";function a(a){let o=e()===`editor`,s=a.props||{},c=r(()=>o?n({variant:`waterfall`,schemaTitle:s.title,enableInfinite:s.enableInfinite,data:a.data}):a.data,[o,a.data,s.enableInfinite,s.title]);return i(`div`,{className:o?`pointer-events-none`:void 0,children:i(t,{variant:`waterfall`,...a,data:c})})}export{a as default};
@@ -1,2 +1,2 @@
1
1
 
2
- const e={componentName:`HomeRecommendWaterfall`,displayName:`瀑布流推荐位`,category:`HomeRecommend`,categoryName:`首页推荐`,enabled:!0};export{e as componentMeta};
2
+ const e={componentName:`HomeRecommendWaterfall`,displayName:`瀑布流`,category:`HomeRecommend`,categoryName:`内容组件`,enabled:!0};export{e as componentMeta};
@@ -1,2 +1,2 @@
1
1
 
2
- const e={moreLink:{type:`string`,title:`更多`,description:``,default:``}};export{e as propsSchema};
2
+ const e={};export{e as propsSchema};
@@ -1,2 +1,2 @@
1
1
 
2
- import{defaultProps as e}from"./defaults/default-props.mjs";import t from"./runtime/client.mjs";import{jsx as n}from"react/jsx-runtime";function r(r){let{moreLink:i=e.moreLink,data:a}=r;return n(t,{props:{moreLink:i},data:a})}export{r as HomeRecommendWaterfall};
2
+ import e from"./runtime/client.mjs";import{jsx as t}from"react/jsx-runtime";function n(n){let{title:r,enableInfinite:i,data:a}=n;return t(e,{props:{title:r,enableInfinite:i},data:a})}export{n as HomeRecommendWaterfall};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Box as e}from"../../../ui/box.mjs";import{Text as t}from"../../../ui/text.mjs";import n from"../../../ui/link.mjs";import r from"../../../../assets/icons/common/right_arrow.mjs";import{LargeGridItemClient as i}from"./card-item.mjs";import{defaultData as a}from"./default.mjs";import{jsx as o,jsxs as s}from"react/jsx-runtime";const c=[];function l(e){return e==null||e===``}function u(e,t){return l(e)?t:e}function d(e,t){return t?{...e,...t,id:u(t.id,e.id),cover:u(t.cover,e.cover),title:u(t.title,e.title),desc:u(t.desc,e.desc),tag:u(t.tag,e.tag),superscript:t.superscript??e.superscript,playCount:u(t.playCount,e.playCount),playCountDelta:t.playCountDelta??e.playCountDelta,showPlayCount:t.showPlayCount??e.showPlayCount,duration:u(t.duration,e.duration),showEpisode:t.showEpisode??e.showEpisode,useContentCover:t.useContentCover??e.useContentCover,tagImageUrl:u(t.tagImageUrl,e.tagImageUrl),tag_image:u(t.tag_image,e.tag_image),tag_image_url:u(t.tag_image_url,e.tag_image_url),tagImage:u(t.tagImage,e.tagImage)}:e}function f(e,t){if(!t)return e;let n=e.items;return{...e,...t,title:u(t.title,e.title),moreUrl:u(t.moreUrl,e.moreUrl),moreLinkType:t.moreLinkType??e.moreLinkType,recommendMode:t.recommendMode??e.recommendMode,items:n?d(n,t.items):t.items}}function p({data:l=c}){let u=Array.isArray(l)&&l.length>0?[f(a[0],l[0])]:a;if(!u||u.length===0)return null;let d=u[0],p=d?.title,m=d?.moreUrl;return s(e,{className:`p-3`,children:[s(e,{className:`flex items-center justify-between mb-[10px] h-[24px]`,children:[p&&o(t,{as:`h2`,className:`text-[18px] font-bold text-text1 line-clamp-1 flex-1 min-w-0 mr-[12px]`,children:p}),m&&s(n,{href:m,className:`flex items-center text-[14px] text-text2 ml-auto`,children:[`更多`,o(r,{className:`ml-[2px] h-[12px] w-[12px] text-text2`})]})]}),u.map((t,n)=>{let{items:r}=t;return r?o(e,{className:n>0?`mt-3`:``,children:o(i,{data:r})},`large-feature-grid-items-${n}`):null})]})}export{p as LargeFeatureGridClient};
2
+ "use client";import{Box as e}from"../../../ui/box.mjs";import{Text as t}from"../../../ui/text.mjs";import n from"../../../ui/link.mjs";import r from"../../../../assets/icons/common/right_arrow.mjs";import{LargeGridItemClient as i}from"./card-item.mjs";import{largeFeatureGridInspectorDefaultProps as a}from"./schema.mjs";import{jsx as o,jsxs as s}from"react/jsx-runtime";const c=[],l=a.data??[];function u(e){return e==null||e===``}function d(e,t){return u(e)?t:e}function f(e,t){return t?{...e,...t,id:d(t.id,e.id),cover:d(t.cover,e.cover),title:d(t.title,e.title),desc:d(t.desc,e.desc),tag:d(t.tag,e.tag),superscript:t.superscript??e.superscript,playCount:d(t.playCount,e.playCount),playCountDelta:t.playCountDelta??e.playCountDelta,showPlayCount:t.showPlayCount??e.showPlayCount,duration:d(t.duration,e.duration),showEpisode:t.showEpisode??e.showEpisode,useContentCover:t.useContentCover??e.useContentCover,tagImageUrl:d(t.tagImageUrl,e.tagImageUrl),tag_image:d(t.tag_image,e.tag_image),tag_image_url:d(t.tag_image_url,e.tag_image_url),tagImage:d(t.tagImage,e.tagImage)}:e}function p(e,t){if(!t)return e;let n=e.items;return{...e,...t,title:d(t.title,e.title),moreUrl:d(t.moreUrl,e.moreUrl),moreLinkType:t.moreLinkType??e.moreLinkType,recommendMode:t.recommendMode??e.recommendMode,items:n?f(n,t.items):t.items}}function m({data:a=c}){let u=Array.isArray(a)&&a.length>0?[p(l[0],a[0])]:l;if(!u||u.length===0)return null;let d=u[0],f=d?.title,m=d?.moreUrl;return s(e,{className:`p-3`,children:[s(e,{className:`flex items-center justify-between mb-[10px] h-[24px]`,children:[f&&o(t,{as:`h2`,className:`text-[18px] font-bold text-text1 line-clamp-1 flex-1 min-w-0 mr-[12px]`,children:f}),m&&s(n,{href:m,className:`flex items-center text-[14px] text-text2 ml-auto`,children:[`更多`,o(r,{className:`ml-[2px] h-[12px] w-[12px] text-text2`})]})]}),u.map((t,n)=>{let{items:r}=t;return r?o(e,{className:n>0?`mt-3`:``,children:o(i,{data:r})},`large-feature-grid-items-${n}`):null})]})}export{m as LargeFeatureGridClient};
@@ -1,11 +1,12 @@
1
1
 
2
2
  import { DefineMaterialOption } from "../../../../utils/schema/material.mjs";
3
- import { LargeFeatureGridClient } from "./client.mjs";
4
- import { LargeFeatureGrid } from "./server.mjs";
3
+ import * as react from "react";
5
4
  import * as zod from "zod";
6
5
  import * as zod_v4_core0 from "zod/v4/core";
7
6
 
8
7
  //#region components/biz/business/large-feature-grid/material.d.ts
9
- declare const largeFeatureGridMaterial: DefineMaterialOption<typeof LargeFeatureGrid, typeof LargeFeatureGridClient, zod.ZodObject<{}, zod_v4_core0.$strip>, "large-feature-grid">;
8
+ declare const largeFeatureGridMaterial: DefineMaterialOption<react.ComponentType<any>, react.ComponentType<any>, zod.ZodObject<Readonly<{
9
+ [k: string]: zod_v4_core0.$ZodType<unknown, unknown, zod_v4_core0.$ZodTypeInternals<unknown, unknown>>;
10
+ }>, zod_v4_core0.$strip>, string>;
10
11
  //#endregion
11
12
  export { largeFeatureGridMaterial };
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineMaterial as e}from"../../../../utils/schema/material.mjs";import{LargeFeatureGridClient as t}from"./client.mjs";import{largeFeatureGridInspectorPropsSchema as n}from"./schema.mjs";import{LargeFeatureGrid as r}from"./server.mjs";const i=e({type:`large-feature-grid`,name:`大图推荐`,icon:`/static/components-thumb/grid_large_feature.png`,category:`大图宫格`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as largeFeatureGridMaterial};
2
+ import{defineMaterial as e}from"../../../../utils/schema/material.mjs";import{largeFeatureGridInspectorPropsSchema as t}from"./schema.mjs";import{LargeFeatureGridClient as n}from"./client.mjs";import{LargeFeatureGrid as r}from"./server.mjs";const i=e({type:`large-feature-grid`,name:`大图推荐`,icon:`/static/components-thumb/grid_large_feature.png`,category:`内容组件`,serverComponent:r,clientComponent:n,propsSchema:t});export{i as largeFeatureGridMaterial};
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineComponentPropsSchema as e,getSchemaDefaultProps as t}from"../../../../utils/schema/schema.mjs";const n=e({});t(n);export{n as largeFeatureGridInspectorPropsSchema};
2
+ import{defineArrayItemPropSchema as e,defineComponentPropsSchema as t,defineNumberPropSchema as n,defineSwitchPropSchema as r,defineTextPropSchema as i,getSchemaDefaultProps as a}from"../../../../utils/schema/schema.mjs";import o from"zod";const s=t({data:e(o.object({title:i({label:`推荐位名称`,required:!1}),moreUrl:i({label:`更多链接`,required:!1}),moreLinkType:i({label:`更多链接类型`,required:!1,defaultValue:`content-list`}),recommendMode:i({label:`推荐位内容类型`,required:!1,defaultValue:`content`}),items:t({id:i({label:`内容ID`}),cover:i({label:`封面`}),tag:i({label:`角标文案`,required:!1}),playCount:i({label:`播放量`,required:!1}),playCountDelta:n({label:`播放量增量`,required:!1,defaultValue:0}),showPlayCount:r({label:`展示播放量`,required:!1,defaultValue:!0}),duration:i({label:`时长/集数`,required:!1}),showEpisode:r({label:`展示集数`,required:!1,defaultValue:!0}),useContentCover:r({label:`沿用内容海报`,required:!1,defaultValue:!0}),title:i({label:`内容标题`}),desc:i({label:`内容简介`,required:!1}),tagImageUrl:i({label:`角标图`,required:!1})})}),{label:`大图推荐数据`,required:!1,defaultValue:[{title:`推荐位名称`,moreUrl:`/channel`,moreLinkType:`content-list`,recommendMode:`content`,items:{id:`22edc8693ebbdaf1`,cover:`https://base-resources.guadd.fun/md-204/dcc-file/f7/f70a9f9f0c17aa9aff6c3a3e03a822db-small.jpg`,tag:`独家`,playCount:`11111`,playCountDelta:0,showPlayCount:!0,duration:`3600`,showEpisode:!0,useContentCover:!0,title:`穷小伙一睁眼穿越古代,娶个老婆就能得到奖励,后宫3000宠都宠不过来!谁料女帝主动送上门来,征服女帝可以直接开终极宝箱,不用选择全都可以!`,desc:`穷小伙一睁眼穿越古代,娶个老婆就能得到奖励,后宫3000宠都宠不过来!谁料女帝主动送上门来,征服女帝可以直接开终极宝箱,不用选择全都可以!`}}]})}),c=a(s);export{c as largeFeatureGridInspectorDefaultProps,s as largeFeatureGridInspectorPropsSchema};
@@ -18,7 +18,7 @@ declare const marqueeMaterial: DefineMaterialOption<typeof MarqueeServer, typeof
18
18
  }, zod_v4_core0.$strip>> & SchemaHasDefaultValue;
19
19
  click: zod.ZodObject<{
20
20
  readonly enabled: zod.ZodBoolean & SchemaHasDefaultValue;
21
- readonly redirectType: zod.ZodOptional<zod.ZodType<"link" | "content_list" | "content", unknown, zod_v4_core0.$ZodTypeInternals<"link" | "content_list" | "content", unknown>>> & SchemaHasDefaultValue;
21
+ readonly redirectType: zod.ZodOptional<zod.ZodType<"content" | "link" | "content_list", unknown, zod_v4_core0.$ZodTypeInternals<"content" | "link" | "content_list", unknown>>> & SchemaHasDefaultValue;
22
22
  readonly link: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
23
23
  }, zod_v4_core0.$strip> & SchemaHasDefaultValue;
24
24
  close: zod.ZodObject<{
@@ -14,7 +14,7 @@ declare const marqueeInspectorPropsSchema: z.ZodObject<{
14
14
  }, z.core.$strip>> & SchemaHasDefaultValue;
15
15
  click: z.ZodObject<{
16
16
  readonly enabled: z.ZodBoolean & SchemaHasDefaultValue;
17
- readonly redirectType: z.ZodOptional<z.ZodType<"link" | "content_list" | "content", unknown, z.core.$ZodTypeInternals<"link" | "content_list" | "content", unknown>>> & SchemaHasDefaultValue;
17
+ readonly redirectType: z.ZodOptional<z.ZodType<"content" | "link" | "content_list", unknown, z.core.$ZodTypeInternals<"content" | "link" | "content_list", unknown>>> & SchemaHasDefaultValue;
18
18
  readonly link: z.ZodOptional<z.ZodString> & SchemaHasDefaultValue;
19
19
  }, z.core.$strip> & SchemaHasDefaultValue;
20
20
  close: z.ZodObject<{
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{gCommunityGetSubscribedCollections as n,gCommunityGetUserCollections as r,gInteractionListCollects as i,pInteractionBatchDeleteCollects as a}from"../../../../../../../service/generated/client.mjs";import{Box as o}from"../../../../../../ui/box.mjs";import{Checkbox as ee}from"../../../../../../ui/checkbox.mjs";import{Tabs as s,TabsList as c,TabsTrigger as l}from"../../../../../../ui/tabs.mjs";import{Text as te}from"../../../../../../ui/text.mjs";import{useMutation as ne,usePaginated as u,useUpdateRequest as re}from"../../../../../../../hooks/query/use-query.mjs";import{useAppContext as ie}from"../../../../../../../hooks/use-app-context/index.mjs";import{AddIcon as ae}from"../../../../../../common/icons/add.mjs";import{CollectionList as oe}from"../../../../../../common/list/collection-list/collection-list.mjs";import{PostList as se}from"../../../../../../common/list/post-list/post-list.mjs";import{VideoList as ce}from"../../../../../../common/list/video-list/video-list.mjs";import{useEffect as d,useMemo as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{toast as g}from"sonner";import{useTranslations as le}from"next-intl";import _ from"dayjs";import ue from"next/link";import{parseAsString as v,useQueryState as y}from"nuqs";const b={video:1,post:2};function de(e,t){if(!e)return e;let n=0,r=e.pages.map(e=>({page:e,filteredList:(e.data?.list??w).filter(e=>{let r=e?.id??``,i=t.has(r);return i&&(n+=1),!i})}));return{...e,pages:r.map(({page:e,filteredList:t})=>{if(!e.data)return e;let r=typeof e.data.total==`number`?Math.max(0,e.data.total-n):e.data.total;return{...e,data:{...e.data,list:t,total:r}}})}}function x(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function fe(e,t){let n=t[e.content_id||``]?.create_time,r=x(e);return{id:e.content_id||``,title:e.content||``,coverImage:r,publishTime:_(n).toDate().getTime()}}function pe(e,t){let n=t[e.id||``]?.create_time;return{is_more_link:e.is_more_link,id:e.id||``,title:e.name||``,coverImage:e.img_x||``,duration:Number(e.duration??0),authorName:e.up_user||e.source_username||``,viewCount:e.play_count??0,publishTime:_(n).toDate().getTime()}}function S(e){let t=x(e);return{contentType:e.source_type,id:e.content_id,title:e.title||e.content,coverImage:t,isVideo:!1,isMovie:!1}}function C(e){let t=(e.contents??[]).slice(0,3).map(S);return{id:e.collection_id||``,title:e.title||``,contentCount:e.content_count??t.length,contents:t}}const w=[],me=[`video`,`post`,`collection`],he=[`created`,`subscribed`];function T({userId:_,showCreateAction:x=!1,queryKeyPrefix:S,isMine:T=!1}){let E=le(`components.pages.profile.components.tabs`),D=ie()===`renderer`,O=S??[],[k,A]=y(`collectTab`,v.withDefault(`video`)),[j,M]=y(`collectCollectionTab`,v.withDefault(`created`)),N=f(()=>me.includes(k)?k:`video`,[k]),P=f(()=>he.includes(j)?j:`created`,[j]),[F,I]=p(!1),[L,R]=p(()=>new Set),{userId:ge,userInfo:_e}=t(),z=_||ge||_e?.userId||``,ve=re();async function B(e,t){if(!z)return{data:{list:[],total:0}};let n=await i({user_id:z,folder_id:``,content_type:t,page:e,page_size:10}),r=n.data.collect_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},a=t===b.video?(n.data?.video_infos??[]).map(e=>pe(e,r)):(n.data?.post_infos??[]).map(e=>fe(e,r));return{data:{list:a,total:n.data?.total??a.length}}}let V=u({key:[...O,`user-collect-video`,z],initialPageParam:1,async queryFn(e){return B(e,b.video)},options:{staleTime:0,enabled:D},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),H=u({key:[...O,`user-collect-post`,z],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return B(e,b.post)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}});async function ye(e){if(!z)return{data:{list:[],total:0}};let t=await r({page:e,user_id:_,page_size:10}),n=t.data?.data?.collections??[];return{data:{list:n.map(C),total:t.data?.data?.total??n.length}}}async function be(e){if(!z)return{data:{list:[],total:0}};let t=(await n({page:e,user_id:_,page_size:10})).data?.data,r=t?.collections??[];return{data:{list:r.map(C),total:t?.total??r.length}}}let U=u({key:[...O,`user-collection-created`,z],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return ye(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),W=u({key:[...O,`user-collection-subscribed`,z],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return be(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),G=f(()=>V.data?.pages.flatMap(e=>e.data?.list??w)??w,[V.data]),K=f(()=>H.data?.pages.flatMap(e=>e.data?.list??w)??w,[H.data]),xe=f(()=>U.data?.pages.flatMap(e=>e.data?.list??w)??w,[U.data]),Se=f(()=>W.data?.pages.flatMap(e=>e.data?.list??w)??w,[W.data]),Ce=N===`video`?G:N===`post`?K:w,q=new Set(Ce.map(e=>e.id)),J=N===`video`?V:H,Y=P===`created`?U:W,we=P===`created`?xe:Se,X=N===`video`,Te=[...O,`user-collect-video`,z],Ee=[...O,`user-collect-post`,z],{mutateAsync:De,isPending:Z}=ne(async e=>await a({app_id:0,user_id:z,folder_id:``,content_type:X?1:2,content_ids:e})),Oe=()=>{I(!F),R(new Set)};d(()=>{R(new Set),N===`collection`&&I(!1)},[N]),d(()=>{k!==N&&A(N)},[N,k,A]),d(()=>{j!==P&&M(P)},[P,j,M]);let Q=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ke=()=>{L.size===q.size&&q.size>0?R(new Set):R(new Set(q))},Ae=async()=>{if(!(L.size===0||Z)){if(!z){g.error(E(`collectTab.pleaseLogin`));return}try{let e=Array.from(L),t=await De(e);if(t.code===0){g.success(E(`collectTab.uncollectedSuccess`));let t=new Set(e);ve(X?Te:Ee,e=>de(e,t)),R(new Set),I(!1)}else g.error(t.message||E(`collectTab.uncollectFailed`))}catch(e){console.error(`取消收藏失败`,e),g.error(E(`collectTab.operationFailed`))}}},$=async()=>{if(D){if(N===`collection`){await Y.fetchNextPage();return}await J.fetchNextPage()}};return h(o,{children:[h(o,{className:`flex justify-between items-center`,children:[m(s,{value:N,onValueChange:e=>{A(e)},children:h(c,{variant:`tag`,children:[m(l,{value:`video`,className:`text-sm`,children:E(`collectTab.video`)}),m(l,{value:`post`,className:`text-sm`,children:E(`collectTab.posts`)}),m(l,{value:`collection`,className:`text-sm`,children:E(`collectTab.collections`)})]})}),N===`collection`?h(o,{className:`flex items-center gap-2 h-6.25`,children:[m(s,{value:P,onValueChange:e=>{M(e)},children:h(c,{variant:`segment`,children:[m(l,{value:`created`,className:`text-sm`,children:E(`collectTab.created`)}),m(l,{value:`subscribed`,className:`text-sm`,children:E(`collectTab.subscribed`)})]})}),x&&m(ue,{href:`/collection/create`,className:`flex items-center justify-center rounded-full bg-bg2 p-1.5`,children:m(ae,{})})]}):T&&m(e,{variant:`ghost`,size:`sm`,className:`h-6.25 px-0 text-sm text-text3`,onClick:Oe,children:E(F?`collectTab.cancel`:`collectTab.edit`)})]}),m(o,{className:`pt-2`,children:N===`video`?m(ce,{list:G,showVideoProgress:!1,loading:J.isFetching,hasMore:J.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q}):N===`post`?m(se,{list:K,loading:J.isFetching,hasMore:J.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q}):m(oe,{list:we,loading:Y.isFetching,hasMore:Y.hasNextPage??!1,loadMore:$,emptyText:E(P===`created`?`collectTab.noCreatedCollections`:`collectTab.noSubscribedCollections`)})}),F&&N!==`collection`&&h(o,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[h(o,{className:`flex items-center gap-2`,children:[m(ee,{checked:L.size===q.size&&q.size>0,onCheckedChange:ke}),m(te,{className:`text-sm text-text1`,children:E(`collectTab.selectAll`)})]}),m(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Z,onClick:Ae,children:E(Z?`collectTab.processing`:`collectTab.delete`)})]})]})}export{T as CollectTab};
2
+ "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{gCommunityGetSubscribedCollections as n,gCommunityGetUserCollections as r,gInteractionListCollects as i,pInteractionBatchDeleteCollects as a}from"../../../../../../../service/generated/client.mjs";import{Box as o}from"../../../../../../ui/box.mjs";import{Checkbox as ee}from"../../../../../../ui/checkbox.mjs";import{Tabs as s,TabsList as c,TabsTrigger as l}from"../../../../../../ui/tabs.mjs";import{Text as te}from"../../../../../../ui/text.mjs";import{useMutation as ne,usePaginated as u,useUpdateRequest as re}from"../../../../../../../hooks/query/use-query.mjs";import{useAppContext as ie}from"../../../../../../../hooks/use-app-context/index.mjs";import{AddIcon as ae}from"../../../../../../common/icons/add.mjs";import{CollectionList as oe}from"../../../../../../common/list/collection-list/collection-list.mjs";import{PostList as se}from"../../../../../../common/list/post-list/post-list.mjs";import{VideoList as ce}from"../../../../../../common/list/video-list/video-list.mjs";import{useEffect as d,useMemo as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{toast as g}from"sonner";import{useTranslations as le}from"next-intl";import _ from"dayjs";import ue from"next/link";import{parseAsString as v,useQueryState as y}from"nuqs";const b={video:1,post:2};function de(e,t){if(!e)return e;let n=0,r=e.pages.map(e=>({page:e,filteredList:(e.data?.list??T).filter(e=>{let r=e?.id??``,i=t.has(r);return i&&(n+=1),!i})}));return{...e,pages:r.map(({page:e,filteredList:t})=>{if(!e.data)return e;let r=typeof e.data.total==`number`?Math.max(0,e.data.total-n):e.data.total;return{...e,data:{...e.data,list:t,total:r}}})}}function x(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function fe(e,t){let n=t[e.content_id||``]?.create_time,r=x(e);return{id:e.content_id||``,title:e.content||``,coverImage:r,publishTime:_(n).toDate().getTime()}}function pe(e,t){let n=t[e.id||``]?.create_time;return{is_more_link:e.is_more_link,id:e.id||``,title:e.name||``,coverImage:e.img_x||``,duration:Number(e.duration??0),authorName:e.up_user||e.source_username||``,viewCount:e.play_count??0,publishTime:_(n).toDate().getTime()}}function S(e){let t=x(e);return{contentType:e.source_type,id:e.content_id,title:e.title||e.content,coverImage:t,isVideo:!1,isMovie:!1}}function C(e){return Array.from({length:3},(t,n)=>({id:`${e}-placeholder-${n}`,isPlaceholder:!0}))}function w(e){let t=(e.contents??[]).slice(0,3).map(S),n=e.content_count??t.length;return{id:e.collection_id||``,title:e.title||``,contentCount:n,contents:n===0?C(e.collection_id||`collection`):t}}const T=[],me=[`video`,`post`,`collection`],he=[`created`,`subscribed`];function E({userId:_,showCreateAction:x=!1,queryKeyPrefix:S,isMine:C=!1}){let E=le(`components.pages.profile.components.tabs`),D=ie()===`renderer`,O=S??[],[k,A]=y(`collectTab`,v.withDefault(`video`)),[j,M]=y(`collectCollectionTab`,v.withDefault(`created`)),N=f(()=>me.includes(k)?k:`video`,[k]),P=f(()=>he.includes(j)?j:`created`,[j]),[F,I]=p(!1),[L,R]=p(()=>new Set),{userId:z,userInfo:ge}=t(),B=_||z||ge?.userId||``,_e=re();async function ve(e,t){if(!B)return{data:{list:[],total:0}};let n=await i({user_id:B,folder_id:``,content_type:t,page:e,page_size:10}),r=n.data.collect_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},a=t===b.video?(n.data?.video_infos??[]).map(e=>pe(e,r)):(n.data?.post_infos??[]).map(e=>fe(e,r));return{data:{list:a,total:n.data?.total??a.length}}}let V=u({key:[...O,`user-collect-video`,B],initialPageParam:1,async queryFn(e){return ve(e,b.video)},options:{staleTime:0,enabled:D},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),H=u({key:[...O,`user-collect-post`,B],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return{data:{list:[],total:0,has_more:!1}}},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}});async function ye(e){if(!B)return{data:{list:[],total:0}};let t=await r({page:e,user_id:_,page_size:10}),n=t.data?.data?.collections??[];return{data:{list:n.map(w),total:t.data?.data?.total??n.length}}}async function be(e){if(!B)return{data:{list:[],total:0}};let t=(await n({page:e,user_id:_,page_size:10})).data?.data,r=t?.collections??[];return{data:{list:r.map(w),total:t?.total??r.length}}}let U=u({key:[...O,`user-collection-created`,B],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return ye(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),W=u({key:[...O,`user-collection-subscribed`,B],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return be(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),G=f(()=>V.data?.pages.flatMap(e=>e.data?.list??T)??T,[V.data]),K=f(()=>H.data?.pages.flatMap(e=>e.data?.list??T)??T,[H.data]),xe=f(()=>U.data?.pages.flatMap(e=>e.data?.list??T)??T,[U.data]),Se=f(()=>W.data?.pages.flatMap(e=>e.data?.list??T)??T,[W.data]),Ce=N===`video`?G:N===`post`?K:T,q=new Set(Ce.map(e=>e.id)),J=N===`video`?V:H,Y=P===`created`?U:W,we=P===`created`?xe:Se,X=N===`video`,Te=[...O,`user-collect-video`,B],Ee=[...O,`user-collect-post`,B],{mutateAsync:De,isPending:Z}=ne(async e=>await a({app_id:0,user_id:B,folder_id:``,content_type:X?1:2,content_ids:e})),Oe=()=>{I(!F),R(new Set)};d(()=>{R(new Set),N===`collection`&&I(!1)},[N]),d(()=>{k!==N&&A(N)},[N,k,A]),d(()=>{j!==P&&M(P)},[P,j,M]);let Q=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ke=()=>{L.size===q.size&&q.size>0?R(new Set):R(new Set(q))},Ae=async()=>{if(!(L.size===0||Z)){if(!B){g.error(E(`collectTab.pleaseLogin`));return}try{let e=Array.from(L),t=await De(e);if(t.code===0){g.success(E(`collectTab.uncollectedSuccess`));let t=new Set(e);_e(X?Te:Ee,e=>de(e,t)),R(new Set),I(!1)}else g.error(t.message||E(`collectTab.uncollectFailed`))}catch(e){console.error(`取消收藏失败`,e),g.error(E(`collectTab.operationFailed`))}}},$=async()=>{if(D){if(N===`collection`){await Y.fetchNextPage();return}await J.fetchNextPage()}};return h(o,{children:[h(o,{className:`flex justify-between items-center`,children:[m(s,{value:N,onValueChange:e=>{A(e)},children:h(c,{variant:`tag`,children:[m(l,{value:`video`,className:`text-sm`,children:E(`collectTab.video`)}),m(l,{value:`collection`,className:`text-sm`,children:E(`collectTab.collections`)})]})}),N===`collection`?h(o,{className:`flex items-center gap-2 h-6.25`,children:[m(s,{value:P,onValueChange:e=>{M(e)},children:h(c,{variant:`segment`,children:[m(l,{value:`created`,className:`text-sm`,children:E(`collectTab.created`)}),m(l,{value:`subscribed`,className:`text-sm`,children:E(`collectTab.subscribed`)})]})}),x&&m(ue,{href:`/collection/create`,className:`flex items-center justify-center rounded-full bg-bg2 p-1.5`,children:m(ae,{})})]}):C&&m(e,{variant:`ghost`,size:`sm`,className:`h-6.25 px-0 text-sm text-text3`,onClick:Oe,children:E(F?`collectTab.cancel`:`collectTab.edit`)})]}),m(o,{className:`pt-2`,children:N===`video`?m(ce,{list:G,showVideoProgress:!1,loading:J.isFetching,hasMore:J.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q}):N===`post`?m(se,{list:K,loading:J.isFetching,hasMore:J.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q}):m(oe,{list:we,loading:Y.isFetching,hasMore:Y.hasNextPage??!1,loadMore:$,emptyText:E(P===`created`?`collectTab.noCreatedCollections`:`collectTab.noSubscribedCollections`)})}),F&&N!==`collection`&&h(o,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[h(o,{className:`flex items-center gap-2`,children:[m(ee,{checked:L.size===q.size&&q.size>0,onCheckedChange:ke}),m(te,{className:`text-sm text-text1`,children:E(`collectTab.selectAll`)})]}),m(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Z,onClick:Ae,children:E(Z?`collectTab.processing`:`collectTab.delete`)})]})]})}export{E as CollectTab};
@@ -1,2 +1,2 @@
1
1
 
2
- import{gCommunityGetSubscribedCollections as e,gCommunityGetUserCollections as t,gInteractionListCollects as n}from"../../../../../../../service/generated/client.mjs";import{HydrationBoundary as r}from"../../../../../../../hooks/query/hydration-boundary.mjs";import{defaultPageSize as i}from"../../utils.mjs";import{CollectTab as a}from"./client.mjs";import{jsx as o}from"react/jsx-runtime";import s from"dayjs";function c({queryKeyPrefix:e,targetUserId:t,resolvedCollectTab:n,resolvedCollectCollectionTab:r,authConfig:i}){if(!t)return[];if(n===`collection`)return[{type:`infinite`,queryKey:r===`subscribed`?[...e,`user-collection-subscribed`,t]:[...e,`user-collection-created`,t],async queryFn(e){return r===`subscribed`?f({targetUserId:t,page:e,authConfig:i}):d({targetUserId:t,page:e,authConfig:i})},initialPageParam:1,getNextPageParam(){}}];let a=n===`post`;return[{type:`infinite`,queryKey:a?[...e,`user-collect-post`,t]:[...e,`user-collect-video`,t],async queryFn(e){return u({targetUserId:t,page:e,contentType:a?2:1,authConfig:i})},initialPageParam:1,getNextPageParam(){}}]}function l({prefetch:e,resolvedCollectTab:t=`video`,resolvedCollectCollectionTab:n=`created`,authConfig:i,...s}){return o(r,{prefetch:e??c({queryKeyPrefix:s.queryKeyPrefix??[],targetUserId:s.userId,resolvedCollectTab:t,resolvedCollectCollectionTab:n,authConfig:i}),children:o(a,{...s})})}async function u({targetUserId:e,page:t,contentType:r,authConfig:a}){let o=await n({user_id:e,folder_id:``,content_type:r,page:t,page_size:i},a),s=o.data.collect_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},c=r===1?(o.data?.video_infos??[]).map(e=>h(e,s)):(o.data?.post_infos??[]).map(e=>m(e,s));return{data:{list:c,total:o.data?.total??c.length}}}async function d({targetUserId:e,page:n,authConfig:r}){let a=await t({page:n,user_id:e,page_size:i},r),o=a.data?.data?.collections??[];return{data:{list:o.map(_),total:a.data?.data?.total??o.length}}}async function f({targetUserId:t,page:n,authConfig:r}){let a=(await e({page:n,user_id:t,page_size:i},r)).data?.data,o=a?.collections??[];return{data:{list:o.map(_),total:a?.total??o.length}}}function p(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function m(e,t){let n=t[e.content_id||``]?.create_time,r=p(e);return{id:e.content_id||``,title:e.content||``,coverImage:r,publishTime:s(n).toDate().getTime()}}function h(e,t){let n=t[e.id||``]?.create_time;return{is_more_link:e.is_more_link,id:e.id||``,title:e.name||``,coverImage:e.img_x||``,duration:Number(e.duration??0),authorName:e.up_user||e.source_username||``,viewCount:e.play_count??0,publishTime:s(n).toDate().getTime()}}function g(e){let t=p(e);return{contentType:e.source_type,id:e.content_id,title:e.title||e.content,coverImage:t,isVideo:!1,isMovie:!1}}function _(e){let t=(e.contents??[]).slice(0,3).map(g);return{id:e.collection_id||``,title:e.title||``,contentCount:e.content_count??t.length,contents:t}}export{l as CollectTabServer,c as buildCollectTabPrefetch};
2
+ import{gCommunityGetSubscribedCollections as e,gCommunityGetUserCollections as t,gInteractionListCollects as n}from"../../../../../../../service/generated/client.mjs";import{HydrationBoundary as r}from"../../../../../../../hooks/query/hydration-boundary.mjs";import{defaultPageSize as i}from"../../utils.mjs";import{CollectTab as a}from"./client.mjs";import{jsx as o}from"react/jsx-runtime";import s from"dayjs";function c({queryKeyPrefix:e,targetUserId:t,resolvedCollectTab:n,resolvedCollectCollectionTab:r,authConfig:i}){return t?n===`collection`?[{type:`infinite`,queryKey:r===`subscribed`?[...e,`user-collection-subscribed`,t]:[...e,`user-collection-created`,t],async queryFn(e){return r===`subscribed`?f({targetUserId:t,page:e,authConfig:i}):d({targetUserId:t,page:e,authConfig:i})},initialPageParam:1,getNextPageParam(){}}]:[{type:`infinite`,queryKey:n===`post`?[...e,`user-collect-post`,t]:[...e,`user-collect-video`,t],async queryFn(e){return u({targetUserId:t,page:e,contentType:1,authConfig:i})},initialPageParam:1,getNextPageParam(){}}]:[]}function l({prefetch:e,resolvedCollectTab:t=`video`,resolvedCollectCollectionTab:n=`created`,authConfig:i,...s}){return o(r,{prefetch:e??c({queryKeyPrefix:s.queryKeyPrefix??[],targetUserId:s.userId,resolvedCollectTab:t,resolvedCollectCollectionTab:n,authConfig:i}),children:o(a,{...s})})}async function u({targetUserId:e,page:t,contentType:r,authConfig:a}){let o=await n({user_id:e,folder_id:``,content_type:r,page:t,page_size:i},a),s=o.data.collect_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},c=r===1?(o.data?.video_infos??[]).map(e=>h(e,s)):(o.data?.post_infos??[]).map(e=>m(e,s));return{data:{list:c,total:o.data?.total??c.length}}}async function d({targetUserId:e,page:n,authConfig:r}){let a=await t({page:n,user_id:e,page_size:i},r),o=a.data?.data?.collections??[];return{data:{list:o.map(v),total:a.data?.data?.total??o.length}}}async function f({targetUserId:t,page:n,authConfig:r}){let a=(await e({page:n,user_id:t,page_size:i},r)).data?.data,o=a?.collections??[];return{data:{list:o.map(v),total:a?.total??o.length}}}function p(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function m(e,t){let n=t[e.content_id||``]?.create_time,r=p(e);return{id:e.content_id||``,title:e.content||``,coverImage:r,publishTime:s(n).toDate().getTime()}}function h(e,t){let n=t[e.id||``]?.create_time;return{is_more_link:e.is_more_link,id:e.id||``,title:e.name||``,coverImage:e.img_x||``,duration:Number(e.duration??0),authorName:e.up_user||e.source_username||``,viewCount:e.play_count??0,publishTime:s(n).toDate().getTime()}}function g(e){let t=p(e);return{contentType:e.source_type,id:e.content_id,title:e.title||e.content,coverImage:t,isVideo:!1,isMovie:!1}}function _(e){return Array.from({length:3},(t,n)=>({id:`${e}-placeholder-${n}`,isPlaceholder:!0}))}function v(e){let t=(e.contents??[]).slice(0,3).map(g),n=e.content_count??t.length;return{id:e.collection_id||``,title:e.title||``,contentCount:n,contents:n===0?_(e.collection_id||`collection`):t}}export{l as CollectTabServer,c as buildCollectTabPrefetch};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionBatchClearBrowse as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{Tabs as a,TabsList as o,TabsTrigger as s}from"../../../../../../ui/tabs.mjs";import{Text as c}from"../../../../../../ui/text.mjs";import{useMutation as ee,usePaginated as l,useUpdateRequest as u}from"../../../../../../../hooks/query/use-query.mjs";import{useAppContext as d}from"../../../../../../../hooks/use-app-context/index.mjs";import{PostList as f}from"../../../../../../common/list/post-list/post-list.mjs";import{VideoList as p}from"../../../../../../common/list/video-list/video-list.mjs";import{getHistoryData as m,likeContentType as h}from"../../utils.mjs";import{useEffect as g,useMemo as te,useState as _}from"react";import{jsx as v,jsxs as y}from"react/jsx-runtime";import{toast as b}from"sonner";import{useTranslations as x}from"next-intl";import{parseAsString as S,useQueryState as ne}from"nuqs";function C(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n.title||n.text||``,coverImage:n.cover_image_thumbnail||n.cover_image||n.cover_horizontal_image_thumbnail||void 0,publishTime:r}}function w(e){let{detail:t,content_play_progress:n}=e,{user_info:r,info:i,statics_cnt:a,publish_time:o,parent_content_info:s}=t;return{is_more_link:i.is_more_link,id:e.id,title:i.title||i.text||i.name||``,coverImage:i.cover_image_thumbnail||i.cover_image||i.cover_horizontal_image_thumbnail||``,duration:Number(i.video_duration??0),progress:n?.percent??0,seriesNum:n?.series_num,authorName:r.name,viewCount:i?.play_count??a?.browse_cnt??0,publishTime:o,type:s?.type}}function T(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}const E=[`video`,`post`];function D({targetUserId:D,queryKeyPrefix:O}){let k=x(`components.pages.profile.components.tabs`),A=d()===`renderer`,j=O??[],[M,N]=ne(`historyTab`,S.withDefault(`video`)),P=te(()=>E.includes(M)?M:`video`,[M]),[F,I]=_(!1),[L,R]=_(()=>new Set),z=t(e=>e.userId),B=u(),V=[...j,`user-history-video`],H=[...j,`user-history-post`],U=l({key:V,initialPageParam:1,async queryFn(e){return m({targetUserId:D,page:e,contentType:h.video})},options:{staleTime:0,enabled:A},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=l({key:H,initialPageParam:1,async queryFn(e){return m({targetUserId:D,page:e,contentType:h.post})},options:{staleTime:0,enabled:A},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),G=P===`video`?U:W,K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(w))??[],q=W.data?.pages.flatMap(e=>(e.data?.list??[]).map(C))??[],J=P===`video`?K:q,Y=new Set(J.map(e=>e.id)),X=P===`video`,{mutateAsync:re,isPending:Z}=ee(async e=>await n({app_id:0,user_id:z,content_type:e.contentType,content_ids:e.contentIds})),ie=()=>{I(!F),R(new Set)};g(()=>{R(new Set)},[P]),g(()=>{M!==P&&N(P)},[P,M,N]);let Q=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ae=()=>{L.size===Y.size&&Y.size>0?R(new Set):R(new Set(Y))},oe=async()=>{if(!(L.size===0||Z)){if(!z){b.error(k(`historyTab.pleaseLogin`));return}try{let e=Array.from(L),t=await re({contentIds:e,contentType:X?1:2});if(t.code===0){b.success(k(`historyTab.historyDeletedSuccess`));let t=new Set(e);B(X?V:H,e=>T(e,t,e=>e.id)),R(new Set),I(!1)}else b.error(t.message||k(`historyTab.deleteFailed`))}catch(e){console.error(`删除浏览记录失败`,e),b.error(k(`historyTab.operationFailed`))}}},$=async()=>{A&&await G.fetchNextPage()};return y(r,{children:[y(r,{className:`flex justify-between items-center`,children:[v(a,{value:P,onValueChange:e=>{N(e)},children:y(o,{variant:`tag`,children:[v(s,{value:`video`,className:`text-sm`,children:k(`historyTab.video`)}),v(s,{value:`post`,className:`text-sm`,children:k(`historyTab.posts`)})]})}),v(e,{variant:`ghost`,size:`sm`,className:`px-0 text-sm text-text3`,onClick:ie,children:k(F?`historyTab.cancel`:`historyTab.edit`)})]}),v(r,{className:`pt-2`,children:P===`video`?v(p,{showVideoProgress:!0,list:K,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q}):v(f,{list:q,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q})}),F&&y(r,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[y(r,{className:`flex items-center gap-2`,children:[v(i,{checked:L.size===Y.size&&Y.size>0,onCheckedChange:ae}),v(c,{className:`text-sm text-text1`,children:k(`historyTab.selectAll`)})]}),v(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Z,onClick:oe,children:k(Z?`historyTab.processing`:`historyTab.delete`)})]})]})}export{D as HistoryTab};
2
+ "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionBatchClearBrowse as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{Tabs as a,TabsList as o,TabsTrigger as s}from"../../../../../../ui/tabs.mjs";import{Text as c}from"../../../../../../ui/text.mjs";import{useMutation as l,usePaginated as u,useUpdateRequest as d}from"../../../../../../../hooks/query/use-query.mjs";import{useAppContext as ee}from"../../../../../../../hooks/use-app-context/index.mjs";import{PostList as te}from"../../../../../../common/list/post-list/post-list.mjs";import{VideoList as ne}from"../../../../../../common/list/video-list/video-list.mjs";import{getHistoryData as f,likeContentType as p}from"../../utils.mjs";import{useEffect as m,useMemo as h,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import{toast as y}from"sonner";import{useTranslations as b}from"next-intl";import{parseAsString as x,useQueryState as S}from"nuqs";function re(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n.title||n.text||``,coverImage:n.cover_image_thumbnail||n.cover_image||n.cover_horizontal_image_thumbnail||void 0,publishTime:r}}function C(e){let{detail:t,content_play_progress:n}=e,{user_info:r,info:i,statics_cnt:a,publish_time:o,parent_content_info:s}=t;return{is_more_link:i.is_more_link,id:e.id,title:i.title||i.text||i.name||``,coverImage:i.cover_image_thumbnail||i.cover_image||i.cover_horizontal_image_thumbnail||``,duration:Number(i.video_duration??0),progress:n?.percent??0,seriesNum:n?.series_num,authorName:r.name,viewCount:i?.play_count??a?.browse_cnt??0,publishTime:o,type:s?.type}}function w(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}const T=[`video`,`post`];function E({targetUserId:E,queryKeyPrefix:D}){let O=b(`components.pages.profile.components.tabs`),k=ee()===`renderer`,A=D??[],[j,M]=S(`historyTab`,x.withDefault(`video`)),N=h(()=>T.includes(j)?j:`video`,[j]),[P,F]=g(!1),[I,L]=g(()=>new Set),R=t(e=>e.userId),z=d(),B=[...A,`user-history-video`],V=[...A,`user-history-post`],H=u({key:B,initialPageParam:1,async queryFn(e){return f({targetUserId:E,page:e,contentType:p.video})},options:{staleTime:0,enabled:k},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),U=u({key:V,initialPageParam:1,async queryFn(e){return{data:{list:[],total:0,has_more:!1}}},options:{staleTime:0,enabled:k},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=N===`video`?H:U,G=H.data?.pages.flatMap(e=>(e.data?.list??[]).map(C))??[],K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(re))??[],q=N===`video`?G:K,J=new Set(q.map(e=>e.id)),Y=N===`video`,{mutateAsync:ie,isPending:X}=l(async e=>await n({app_id:0,user_id:R,content_type:e.contentType,content_ids:e.contentIds})),Z=()=>{F(!P),L(new Set)};m(()=>{L(new Set)},[N]),m(()=>{j!==N&&M(N)},[N,j,M]);let Q=e=>{L(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ae=()=>{I.size===J.size&&J.size>0?L(new Set):L(new Set(J))},oe=async()=>{if(!(I.size===0||X)){if(!R){y.error(O(`historyTab.pleaseLogin`));return}try{let e=Array.from(I),t=await ie({contentIds:e,contentType:Y?1:2});if(t.code===0){y.success(O(`historyTab.historyDeletedSuccess`));let t=new Set(e);z(Y?B:V,e=>w(e,t,e=>e.id)),L(new Set),F(!1)}else y.error(t.message||O(`historyTab.deleteFailed`))}catch(e){console.error(`删除浏览记录失败`,e),y.error(O(`historyTab.operationFailed`))}}},$=async()=>{k&&await W.fetchNextPage()};return v(r,{children:[v(r,{className:`flex justify-between items-center`,children:[_(a,{value:N,onValueChange:e=>{M(e)},children:_(o,{variant:`tag`,children:_(s,{value:`video`,className:`text-sm`,children:O(`historyTab.video`)})})}),_(e,{variant:`ghost`,size:`sm`,className:`px-0 text-sm text-text3`,onClick:Z,children:O(P?`historyTab.cancel`:`historyTab.edit`)})]}),_(r,{className:`pt-2`,children:N===`video`?_(ne,{showVideoProgress:!0,list:G,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,isEditMode:P,selectedIds:I,onToggleSelection:Q}):_(te,{list:K,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,isEditMode:P,selectedIds:I,onToggleSelection:Q})}),P&&v(r,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[v(r,{className:`flex items-center gap-2`,children:[_(i,{checked:I.size===J.size&&J.size>0,onCheckedChange:ae}),_(c,{className:`text-sm text-text1`,children:O(`historyTab.selectAll`)})]}),_(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:I.size>0?`default`:`outline`,disabled:I.size===0||X,onClick:oe,children:O(X?`historyTab.processing`:`historyTab.delete`)})]})]})}export{E as HistoryTab};
@@ -1,2 +1,2 @@
1
1
 
2
- import{HydrationBoundary as e}from"../../../../../../../hooks/query/hydration-boundary.mjs";import{getHistoryData as t,likeContentType as n}from"../../utils.mjs";import{HistoryTab as r}from"./client.mjs";import{jsx as i}from"react/jsx-runtime";function a({queryKeyPrefix:e,targetUserId:r,resolvedHistoryTab:i,authConfig:a}){if(!r)return[];let o=i===`post`;return[{type:`infinite`,queryKey:o?[...e,`user-history-post`]:[...e,`user-history-video`],async queryFn(e){return t({targetUserId:r,page:e,contentType:o?n.post:n.video,authConfig:a})},initialPageParam:1,getNextPageParam(){}}]}function o({prefetch:t,resolvedHistoryTab:n=`video`,authConfig:o,...s}){return i(e,{prefetch:t??a({queryKeyPrefix:s.queryKeyPrefix??[],targetUserId:s.targetUserId,resolvedHistoryTab:n,authConfig:o}),children:i(r,{...s})})}export{o as HistoryTabServer,a as buildHistoryTabPrefetch};
2
+ import{HydrationBoundary as e}from"../../../../../../../hooks/query/hydration-boundary.mjs";import{getHistoryData as t,likeContentType as n}from"../../utils.mjs";import{HistoryTab as r}from"./client.mjs";import{jsx as i}from"react/jsx-runtime";function a({queryKeyPrefix:e,targetUserId:r,resolvedHistoryTab:i,authConfig:a}){return r?[{type:`infinite`,queryKey:i===`post`?[...e,`user-history-post`]:[...e,`user-history-video`],async queryFn(e){return t({targetUserId:r,page:e,contentType:n.video,authConfig:a})},initialPageParam:1,getNextPageParam(){}}]:[]}function o({prefetch:t,resolvedHistoryTab:n=`video`,authConfig:o,...s}){return i(e,{prefetch:t??a({queryKeyPrefix:s.queryKeyPrefix??[],targetUserId:s.targetUserId,resolvedHistoryTab:n,authConfig:o}),children:i(r,{...s})})}export{o as HistoryTabServer,a as buildHistoryTabPrefetch};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionUnifiedBatchLikeDislike as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{Tabs as a,TabsList as o,TabsTrigger as s}from"../../../../../../ui/tabs.mjs";import{Text as c}from"../../../../../../ui/text.mjs";import{useMutation as l,usePaginated as u,useUpdateRequest as d}from"../../../../../../../hooks/query/use-query.mjs";import{useAppContext as ee}from"../../../../../../../hooks/use-app-context/index.mjs";import{PostList as f}from"../../../../../../common/list/post-list/post-list.mjs";import{VideoList as te}from"../../../../../../common/list/video-list/video-list.mjs";import{getLikeData as p,likeContentType as m}from"../../utils.mjs";import{useEffect as h,useMemo as g,useState as _}from"react";import{jsx as v,jsxs as y}from"react/jsx-runtime";import{toast as b}from"sonner";import{useTranslations as x}from"next-intl";import{parseAsString as ne,useQueryState as S}from"nuqs";function C(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}function w(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n?.name||n?.text||n?.content||``,coverImage:n?.cover_image_thumbnail||n?.cover_image||n?.cover_horizontal_image_thumbnail||``,publishTime:r??0}}function T(e){let{detail:t}=e,{user_info:n,info:r,statics_cnt:i,publish_time:a,parent_content_info:o}=t;return{id:e.id,is_more_link:r?.is_more_link||!1,title:r?.name||r?.text||r?.content||``,coverImage:r?.cover_image_thumbnail||r?.cover_image||r?.cover_horizontal_image_thumbnail||``,duration:Number(r?.video_duration??0),progress:e.content_play_progress?.percent??0,seriesNum:e.content_play_progress?.series_num,authorName:n?.name||``,viewCount:r?.play_count??i?.browse_cnt??0,publishTime:a??0,type:o?.type}}const E=[`video`,`post`];function D({targetUserId:D,queryKeyPrefix:re,isMine:O=!1}){let k=x(`components.pages.profile.components.tabs`),A=ee()===`renderer`,j=re??[],[M,N]=S(`likeTab`,ne.withDefault(`video`)),P=g(()=>E.includes(M)?M:`video`,[M]),[F,I]=_(!1),[L,R]=_(()=>new Set),z=t(e=>e.userId),B=d(),V=[...j,`user-like-video`],H=[...j,`user-like-post`],U=u({key:V,initialPageParam:1,async queryFn(e){return p({targetUserId:D,page:e,contentType:m.video})},options:{staleTime:0,enabled:A},getNextPageParam(e,t){if(typeof e?.data?.has_more==`boolean`)return e.data.has_more?t.length+1:void 0;if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=u({key:H,options:{staleTime:0,enabled:A},initialPageParam:1,async queryFn(e){return p({targetUserId:D,page:e,contentType:m.post})},getNextPageParam(e,t){if(typeof e?.data?.has_more==`boolean`)return e.data.has_more?t.length+1:void 0;if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),G=P===`video`?U:W,K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(T))??[],q=W.data?.pages.flatMap(e=>(e.data?.list??[]).map(w))??[],J=P===`video`?K:q,Y=new Set(J.map(e=>e.id)),X=P===`video`,{mutateAsync:ie,isPending:Z}=l(async e=>await n({app_id:0,user_id:z,action:`cancel_like`,content_ids:e,content_type:X?1:2})),ae=()=>{I(!F),R(new Set)};h(()=>{R(new Set)},[P]),h(()=>{M!==P&&N(P)},[P,M,N]);let Q=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},oe=()=>{L.size===Y.size&&Y.size>0?R(new Set):R(new Set(Y))},se=async()=>{if(!(L.size===0||Z)){if(!z){b.error(k(`likeTab.pleaseLogin`));return}try{let e=Array.from(L),t=await ie(e);if(t.code===0){b.success(k(`likeTab.unlikedSuccess`));let t=new Set(e);B(X?V:H,e=>C(e,t,e=>e.id)),R(new Set),I(!1)}else b.error(t.message||k(`likeTab.unlikeFailed`))}catch(e){console.error(`取消点赞失败`,e),b.error(k(`likeTab.operationFailed`))}}},$=async()=>{A&&await G.fetchNextPage()};return y(r,{children:[y(r,{className:`flex justify-between items-center`,children:[v(a,{value:P,onValueChange:e=>{N(e)},children:y(o,{variant:`tag`,children:[v(s,{value:`video`,className:`text-sm`,children:k(`likeTab.video`)}),v(s,{value:`post`,className:`text-sm`,children:k(`likeTab.posts`)})]})}),O&&v(e,{variant:`ghost`,size:`sm`,className:`h-6.25 px-0 text-sm text-text3`,onClick:ae,children:k(F?`likeTab.cancel`:`likeTab.edit`)})]}),v(r,{className:`pt-2`,children:P===`video`?v(te,{list:K,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,showVideoProgress:!1,onToggleSelection:Q}):v(f,{list:q,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q})}),F&&y(r,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[y(r,{className:`flex items-center gap-2`,children:[v(i,{checked:L.size===Y.size&&Y.size>0,onCheckedChange:oe}),v(c,{className:`text-sm text-text1`,children:k(`likeTab.selectAll`)})]}),v(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Z,onClick:se,children:k(Z?`likeTab.processing`:`likeTab.delete`)})]})]})}export{D as LikeTab};
2
+ "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionUnifiedBatchLikeDislike as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{Tabs as a,TabsList as o,TabsTrigger as s}from"../../../../../../ui/tabs.mjs";import{Text as c}from"../../../../../../ui/text.mjs";import{useMutation as l,usePaginated as u,useUpdateRequest as d}from"../../../../../../../hooks/query/use-query.mjs";import{useAppContext as f}from"../../../../../../../hooks/use-app-context/index.mjs";import{PostList as ee}from"../../../../../../common/list/post-list/post-list.mjs";import{VideoList as p}from"../../../../../../common/list/video-list/video-list.mjs";import{getLikeData as m,likeContentType as h}from"../../utils.mjs";import{useEffect as g,useMemo as te,useState as _}from"react";import{jsx as v,jsxs as y}from"react/jsx-runtime";import{toast as b}from"sonner";import{useTranslations as x}from"next-intl";import{parseAsString as S,useQueryState as ne}from"nuqs";function re(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}function C(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n?.name||n?.text||n?.content||``,coverImage:n?.cover_image_thumbnail||n?.cover_image||n?.cover_horizontal_image_thumbnail||``,publishTime:r??0}}function w(e){let{detail:t}=e,{user_info:n,info:r,statics_cnt:i,publish_time:a,parent_content_info:o}=t;return{id:e.id,is_more_link:r?.is_more_link||!1,title:r?.name||r?.text||r?.content||``,coverImage:r?.cover_image_thumbnail||r?.cover_image||r?.cover_horizontal_image_thumbnail||``,duration:Number(r?.video_duration??0),progress:e.content_play_progress?.percent??0,seriesNum:e.content_play_progress?.series_num,authorName:n?.name||``,viewCount:r?.play_count??i?.browse_cnt??0,publishTime:a??0,type:o?.type}}const T=[`video`,`post`];function E({targetUserId:E,queryKeyPrefix:D,isMine:O=!1}){let k=x(`components.pages.profile.components.tabs`),A=f()===`renderer`,j=D??[],[M,N]=ne(`likeTab`,S.withDefault(`video`)),P=te(()=>T.includes(M)?M:`video`,[M]),[F,I]=_(!1),[L,R]=_(()=>new Set),z=t(e=>e.userId),B=d(),V=[...j,`user-like-video`],H=[...j,`user-like-post`],U=u({key:V,initialPageParam:1,async queryFn(e){return m({targetUserId:E,page:e,contentType:h.video})},options:{staleTime:0,enabled:A},getNextPageParam(e,t){if(typeof e?.data?.has_more==`boolean`)return e.data.has_more?t.length+1:void 0;if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=u({key:H,options:{staleTime:0,enabled:A},initialPageParam:1,async queryFn(e){return{data:{list:[],total:0,has_more:!1}}},getNextPageParam(e,t){if(typeof e?.data?.has_more==`boolean`)return e.data.has_more?t.length+1:void 0;if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),G=P===`video`?U:W,K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(w))??[],q=W.data?.pages.flatMap(e=>(e.data?.list??[]).map(C))??[],J=P===`video`?K:q,Y=new Set(J.map(e=>e.id)),X=P===`video`,{mutateAsync:ie,isPending:Z}=l(async e=>await n({app_id:0,user_id:z,action:`cancel_like`,content_ids:e,content_type:X?1:2})),ae=()=>{I(!F),R(new Set)};g(()=>{R(new Set)},[P]),g(()=>{M!==P&&N(P)},[P,M,N]);let Q=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},oe=()=>{L.size===Y.size&&Y.size>0?R(new Set):R(new Set(Y))},se=async()=>{if(!(L.size===0||Z)){if(!z){b.error(k(`likeTab.pleaseLogin`));return}try{let e=Array.from(L),t=await ie(e);if(t.code===0){b.success(k(`likeTab.unlikedSuccess`));let t=new Set(e);B(X?V:H,e=>re(e,t,e=>e.id)),R(new Set),I(!1)}else b.error(t.message||k(`likeTab.unlikeFailed`))}catch(e){console.error(`取消点赞失败`,e),b.error(k(`likeTab.operationFailed`))}}},$=async()=>{A&&await G.fetchNextPage()};return y(r,{children:[y(r,{className:`flex justify-between items-center`,children:[v(a,{value:P,onValueChange:e=>{N(e)},children:v(o,{variant:`tag`,children:v(s,{value:`video`,className:`text-sm`,children:k(`likeTab.video`)})})}),O&&v(e,{variant:`ghost`,size:`sm`,className:`h-6.25 px-0 text-sm text-text3`,onClick:ae,children:k(F?`likeTab.cancel`:`likeTab.edit`)})]}),v(r,{className:`pt-2`,children:P===`video`?v(p,{list:K,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,showVideoProgress:!1,onToggleSelection:Q}):v(ee,{list:q,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q})}),F&&y(r,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[y(r,{className:`flex items-center gap-2`,children:[v(i,{checked:L.size===Y.size&&Y.size>0,onCheckedChange:oe}),v(c,{className:`text-sm text-text1`,children:k(`likeTab.selectAll`)})]}),v(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Z,onClick:se,children:k(Z?`likeTab.processing`:`likeTab.delete`)})]})]})}export{E as LikeTab};
@@ -1,2 +1,2 @@
1
1
 
2
- import{HydrationBoundary as e}from"../../../../../../../hooks/query/hydration-boundary.mjs";import{getLikeData as t,likeContentType as n}from"../../utils.mjs";import{LikeTab as r}from"./client.mjs";import{jsx as i}from"react/jsx-runtime";function a({queryKeyPrefix:e,targetUserId:r,resolvedLikeTab:i}){if(!r)return[];let a=i===`post`;return[{type:`infinite`,queryKey:a?[...e,`user-like-post`]:[...e,`user-like-video`],async queryFn(e){return t({targetUserId:r,page:e,contentType:a?n.post:n.video})},initialPageParam:1,getNextPageParam(){}}]}function o({prefetch:t,resolvedLikeTab:n=`video`,...o}){return i(e,{prefetch:t??a({queryKeyPrefix:o.queryKeyPrefix??[],targetUserId:o.targetUserId,resolvedLikeTab:n}),children:i(r,{...o})})}export{o as LikeTabServer,a as buildLikeTabPrefetch};
2
+ import{HydrationBoundary as e}from"../../../../../../../hooks/query/hydration-boundary.mjs";import{getLikeData as t,likeContentType as n}from"../../utils.mjs";import{LikeTab as r}from"./client.mjs";import{jsx as i}from"react/jsx-runtime";function a({queryKeyPrefix:e,targetUserId:r,resolvedLikeTab:i}){return r?[{type:`infinite`,queryKey:i===`post`?[...e,`user-like-post`]:[...e,`user-like-video`],async queryFn(e){return t({targetUserId:r,page:e,contentType:n.video})},initialPageParam:1,getNextPageParam(){}}]:[]}function o({prefetch:t,resolvedLikeTab:n=`video`,...o}){return i(e,{prefetch:t??a({queryKeyPrefix:o.queryKeyPrefix??[],targetUserId:o.targetUserId,resolvedLikeTab:n}),children:i(r,{...o})})}export{o as LikeTabServer,a as buildLikeTabPrefetch};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Button as e}from"../../../ui/button.mjs";import t from"../../../../utils/event-bus.mjs";import{Box as n}from"../../../ui/box.mjs";import{Text as r}from"../../../ui/text.mjs";import{eventKey as i}from"../../../../constants/event-key.mjs";import{DeleteConfirmDialog as a}from"../../../common/delete-confirm-dialog/delete-confirm-dialog.mjs";import{useCallback as o,useEffect as s,useMemo as c,useState as l}from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";import{usePathname as f,useRouter as p,useSearchParams as m}from"next/navigation";function h(h){let{title:g,rows:_=1,clearText:v=`清理`,confirmDescription:y=`确认删除全部搜索历史吗?`,storageKey:b=`guest`,onHistoryClick:x}=h,[S,C]=l([]),[w,T]=l(!1),E=p(),D=f(),O=m(),k=`search_history_${b}`,A=o(()=>{let e=localStorage.getItem(k);if(e)try{C(JSON.parse(e))}catch(e){console.error(`Failed to parse search history`,e)}else C([])},[k]);s(()=>{A()},[A]),s(()=>(t.on(i.SEARCH_HISTORY_UPDATE,A),()=>{t.off(i.SEARCH_HISTORY_UPDATE,A)}),[A]);let j=()=>{C([]),localStorage.removeItem(k),T(!1),t.emit(i.SEARCH_HISTORY_UPDATE)},M=c(()=>{let e=_*10;return S.slice(0,e)},[S,_]);if(S.length===0)return null;let N=e=>{if(x)x(e);else{let t=new URLSearchParams(O.toString());t.set(`q`,e);let n=D.includes(`/search`)?D:`/search`;E.push(`${n}?${t.toString()}`)}};return d(n,{className:`px-4 py-2`,children:[d(n,{className:`flex justify-between items-center mb-2`,children:[u(r,{className:`text-[16px] font-bold text-text1`,children:g}),u(e,{variant:`ghost`,size:`sm`,className:`text-text3 text-[12px] p-0 h-auto`,onClick:()=>T(!0),children:v})]}),u(n,{className:`flex flex-wrap gap-2 overflow-hidden`,style:{maxHeight:`${_*40}px`},children:M.map((e,t)=>u(n,{className:`px-3 py-1 bg-bg2 rounded-full cursor-pointer`,onClick:()=>N(e),children:u(r,{className:`text-[14px] text-text2 truncate max-w-[150px]`,children:e})},t))}),u(a,{open:w,onOpenChange:T,onConfirm:()=>{j()},title:``,description:y})]})}export{h as SearchHistoryClient};
2
+ "use client";import{Button as e}from"../../../ui/button.mjs";import t from"../../../../utils/event-bus.mjs";import{Box as n}from"../../../ui/box.mjs";import{Text as r}from"../../../ui/text.mjs";import{useAppContext as i}from"../../../../hooks/use-app-context/index.mjs";import{eventKey as a}from"../../../../constants/event-key.mjs";import{DeleteConfirmDialog as o}from"../../../common/delete-confirm-dialog/delete-confirm-dialog.mjs";import{useCallback as s,useEffect as c,useMemo as l,useState as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{usePathname as p,useRouter as m,useSearchParams as h}from"next/navigation";const g=[`示例历史1`,`示例历史2`,`示例历史3`];function _(_){let{title:v,rows:y=1,clearText:b=`清理`,confirmDescription:x=`确认删除全部搜索历史吗?`,storageKey:S=`guest`,onHistoryClick:C}=_,w=i(),[T,E]=u([]),[D,O]=u(!1),k=m(),A=p(),j=h(),M=`search_history_${S}`,N=s(()=>{let e=localStorage.getItem(M);if(e)try{E(JSON.parse(e))}catch(e){console.error(`Failed to parse search history`,e)}else E([])},[M]);c(()=>{N()},[N]),c(()=>(t.on(a.SEARCH_HISTORY_UPDATE,N),()=>{t.off(a.SEARCH_HISTORY_UPDATE,N)}),[N]);let P=()=>{E([]),localStorage.removeItem(M),O(!1),t.emit(a.SEARCH_HISTORY_UPDATE)},F=l(()=>{let e=T.length>0?T:w===`editor`?g:[],t=y*10;return e.slice(0,t)},[T,y,w]);if(F.length===0)return null;let I=e=>{if(C)C(e);else{let t=new URLSearchParams(j.toString());t.set(`q`,e);let n=A.includes(`/search`)?A:`/search`;k.push(`${n}?${t.toString()}`)}};return f(n,{className:`px-4 py-2`,children:[f(n,{className:`flex justify-between items-center mb-2`,children:[d(r,{className:`text-[16px] font-bold text-text1`,children:v}),d(e,{variant:`ghost`,size:`sm`,className:`text-text3 text-[12px] p-0 h-auto`,onClick:()=>O(!0),children:b})]}),d(n,{className:`flex flex-wrap gap-2 overflow-hidden`,style:{maxHeight:`${y*40}px`},children:F.map((e,t)=>d(n,{className:`px-3 py-1 bg-bg2 rounded-full cursor-pointer`,onClick:()=>I(e),children:d(r,{className:`text-[14px] text-text2 truncate max-w-[150px]`,children:e})},t))}),d(o,{open:D,onOpenChange:O,onConfirm:()=>{P()},title:``,description:x})]})}export{_ as SearchHistoryClient};
@@ -9,7 +9,7 @@ import * as zod_v4_core0 from "zod/v4/core";
9
9
 
10
10
  //#region components/biz/business/shortcut-grid/material.d.ts
11
11
  declare const shortcutGridMaterial: DefineMaterialOption<typeof ShortcutGrid, typeof ShortcutGridClient, zod.ZodObject<{
12
- title: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
12
+ title: zod.ZodString & SchemaHasDefaultValue;
13
13
  shortcutCount: zod.ZodNumber & SchemaHasDefaultValue;
14
14
  isShortcutTitle: zod.ZodBoolean & SchemaHasDefaultValue;
15
15
  shortcuts: zod.ZodArray<zod.ZodObject<{
@@ -8,7 +8,7 @@ import z$1 from "zod";
8
8
  * 金刚区物料可配置字段:
9
9
  */
10
10
  declare const shortcutGridInspectorPropsSchema: z$1.ZodObject<{
11
- title: z$1.ZodOptional<z$1.ZodString> & SchemaHasDefaultValue;
11
+ title: z$1.ZodString & SchemaHasDefaultValue;
12
12
  shortcutCount: z$1.ZodNumber & SchemaHasDefaultValue;
13
13
  isShortcutTitle: z$1.ZodBoolean & SchemaHasDefaultValue;
14
14
  shortcuts: z$1.ZodArray<z$1.ZodObject<{
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineArrayItemPropSchema as e,defineComponentPropsSchema as t,defineNumberPropSchema as n,defineSwitchPropSchema as r,defineTextPropSchema as i,getSchemaDefaultProps as a}from"../../../../utils/schema/schema.mjs";import o from"zod";const s=t({title:i({label:`推荐位名称`,required:!1,defaultValue:`推荐列表`}),shortcutCount:n({label:`入口数量`,required:!0,defaultValue:4}).refine(e=>e>=3&&e<=5,`入口数量必须为 3-5`),isShortcutTitle:r({label:`是否显示入口标题`,required:!0,defaultValue:!0}),shortcuts:e(o.object({label:i({label:`入口标题`,required:!1,defaultValue:`最新`}),icon:i({label:`图标`,required:!0,defaultValue:``}),href:i({label:`跳转指向`,required:!0,defaultValue:``})}),{label:`推荐列表`,required:!0,defaultValue:[{label:`热门`,icon:`/images/2026/01/21/6967aec2d806ed47d5238861/fce0a95c-1e8f-4872-ab69-86212435e1bc.jpegxxx`,href:`/video-list?title=穷小伙刚离婚,找了他3年的女总裁蒙着面纱出现了,一身红嫁衣当众求嫁,前妻嘲笑她是丑八怪,下秒揭开面纱后全场沉默了&tags=动作`},{label:`新上架`,icon:`/images/2026/01/21/6967aec2d806ed47d5238861/fce0a95c-1e8f-4872-ab69-86212435e1bc.jpegxxx`,href:`/video-list?title=穷小伙刚离婚,找了他3年的女总裁蒙着面纱出现了,一身红嫁衣当众求嫁,前妻嘲笑她是丑八怪,下秒揭开面纱后全场沉默了&tags=动作`},{label:`排行榜`,icon:`/images/2026/01/21/6967aec2d806ed47d5238861/fce0a95c-1e8f-4872-ab69-86212435e1bc.jpegxxx`,href:`/video-list?title=穷小伙刚离婚,找了他3年的女总裁蒙着面纱出现了,一身红嫁衣当众求嫁,前妻嘲笑她是丑八怪,下秒揭开面纱后全场沉默了&tags=动作`},{label:`筛选`,icon:`/images/2026/01/21/6967aec2d806ed47d5238861/fce0a95c-1e8f-4872-ab69-86212435e1bc.jpegxxx`,href:`/video-list?title=穷小伙刚离婚,找了他3年的女总裁蒙着面纱出现了,一身红嫁衣当众求嫁,前妻嘲笑她是丑八怪,下秒揭开面纱后全场沉默了&tags=动作`}]})}),c=a(s);export{c as shortcutGridInspectorDefaultProps,s as shortcutGridInspectorPropsSchema};
2
+ import{defineArrayItemPropSchema as e,defineComponentPropsSchema as t,defineNumberPropSchema as n,defineSwitchPropSchema as r,defineTextPropSchema as i,getSchemaDefaultProps as a}from"../../../../utils/schema/schema.mjs";import o from"zod";const s=t({title:i({label:`推荐位名称`,required:!0,defaultValue:`推荐列表`}),shortcutCount:n({label:`入口数量`,required:!0,defaultValue:4}).refine(e=>e>=3&&e<=5,`入口数量必须为 3-5`),isShortcutTitle:r({label:`是否显示入口标题`,required:!0,defaultValue:!0}),shortcuts:e(o.object({label:i({label:`入口标题`,required:!1,defaultValue:`最新`}),icon:i({label:`图标`,required:!0,defaultValue:``}),href:i({label:`跳转指向`,required:!0,defaultValue:``})}),{label:`推荐列表`,required:!0,defaultValue:[{label:`热门`,icon:`/images/2026/01/21/6967aec2d806ed47d5238861/fce0a95c-1e8f-4872-ab69-86212435e1bc.jpegxxx`,href:`/video-list?title=穷小伙刚离婚,找了他3年的女总裁蒙着面纱出现了,一身红嫁衣当众求嫁,前妻嘲笑她是丑八怪,下秒揭开面纱后全场沉默了&tags=动作`},{label:`新上架`,icon:`/images/2026/01/21/6967aec2d806ed47d5238861/fce0a95c-1e8f-4872-ab69-86212435e1bc.jpegxxx`,href:`/video-list?title=穷小伙刚离婚,找了他3年的女总裁蒙着面纱出现了,一身红嫁衣当众求嫁,前妻嘲笑她是丑八怪,下秒揭开面纱后全场沉默了&tags=动作`},{label:`排行榜`,icon:`/images/2026/01/21/6967aec2d806ed47d5238861/fce0a95c-1e8f-4872-ab69-86212435e1bc.jpegxxx`,href:`/video-list?title=穷小伙刚离婚,找了他3年的女总裁蒙着面纱出现了,一身红嫁衣当众求嫁,前妻嘲笑她是丑八怪,下秒揭开面纱后全场沉默了&tags=动作`},{label:`筛选`,icon:`/images/2026/01/21/6967aec2d806ed47d5238861/fce0a95c-1e8f-4872-ab69-86212435e1bc.jpegxxx`,href:`/video-list?title=穷小伙刚离婚,找了他3年的女总裁蒙着面纱出现了,一身红嫁衣当众求嫁,前妻嘲笑她是丑八怪,下秒揭开面纱后全场沉默了&tags=动作`}]})}),c=a(s);export{c as shortcutGridInspectorDefaultProps,s as shortcutGridInspectorPropsSchema};
@@ -10,6 +10,7 @@ interface CollectionListMediaItem {
10
10
  isVideo?: boolean;
11
11
  isMovie?: boolean;
12
12
  videoDuration?: number;
13
+ isPlaceholder?: boolean;
13
14
  }
14
15
  interface CollectionListItemProps {
15
16
  /** 合集 ID。 */
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{RightArrowIcon as r}from"../../icons/right-arrow.mjs";import{Fragment as i,jsx as a,jsxs as o}from"react/jsx-runtime";import{useTranslations as s}from"next-intl";import c from"next/link";const l=[];function u({size:e=12}){return a(`svg`,{width:e,height:e,viewBox:`0 0 24 24`,fill:`currentColor`,children:a(`path`,{d:`M8 5v14l11-7z`})})}function d(e){if(!e)return``;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}:${r.toString().padStart(2,`0`)}`}function f(f){let p=s(`components.common.list.collectionList`),{id:m,title:h,contentCount:g,contents:_=l}=f,v=_.slice(0,3);return o(t,{className:`bg-bg1 rounded-lg py-3`,children:[o(t,{className:`flex items-center justify-between mb-3 gap-2`,children:[a(n,{className:`text-sm text-text1 font-medium line-clamp-1`,children:h}),o(c,{href:`/collection/${m}`,className:`flex items-center shrink-0 gap-1 text-text3`,children:[o(n,{className:`text-xs`,children:[g,p(`collectionListItem.contentCountSuffix`)]}),a(r,{})]})]}),a(t,{className:`grid grid-cols-3 gap-2`,children:v.map((r,s)=>o(c,{href:`/${r.contentType===1?`video`:`post`}/${r.id}`,className:`flex flex-col gap-1`,children:[o(t,{className:`relative aspect-video rounded-md overflow-hidden bg-gray-100`,children:[a(e,{src:r.coverImage||`/empty/default-cover.png`,alt:r.title||h,fill:!0,className:`object-cover`}),r.isVideo&&o(i,{children:[a(t,{className:`absolute inset-0 flex items-center justify-center bg-black/20`,children:a(t,{className:`w-6 h-6 rounded-full bg-white/80 flex items-center justify-center`,children:a(u,{size:12})})}),r.isMovie&&a(t,{className:`absolute bottom-1 left-1 rounded-xs bg-black/60 px-1 text-[10px] text-white`,children:p(`collectionListItem.movieLabel`)}),r.videoDuration&&a(t,{className:`absolute bottom-1 right-1 rounded-xs bg-black/60 px-1 text-[10px] text-white`,children:d(r.videoDuration)})]})]}),a(t,{className:`flex items-center justify-between gap-1`,children:a(n,{className:`text-xs text-text1 line-clamp-1`,dangerouslySetInnerHTML:{__html:r.title||``}})})]},r.id??`${h}-${s}`))})]})}export{f as CollectionListItem};
2
+ "use client";import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{RightArrowIcon as r}from"../../icons/right-arrow.mjs";import{Fragment as i,jsx as a,jsxs as o}from"react/jsx-runtime";import{useTranslations as s}from"next-intl";import c from"next/link";const l=[];function u({size:e=12}){return a(`svg`,{width:e,height:e,viewBox:`0 0 24 24`,fill:`currentColor`,children:a(`path`,{d:`M8 5v14l11-7z`})})}function d(e){if(!e)return``;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}:${r.toString().padStart(2,`0`)}`}function f(f){let p=s(`components.common.list.collectionList`),{id:m,title:h,contentCount:g,contents:_=l}=f,v=_.slice(0,3);return o(t,{className:`bg-bg1 rounded-lg py-3`,children:[o(t,{className:`flex items-center justify-between mb-3 gap-2`,children:[a(n,{className:`text-sm text-text1 font-medium line-clamp-1`,children:h}),o(c,{href:`/collection/${m}`,className:`flex items-center shrink-0 gap-1 text-text3`,children:[o(n,{className:`text-xs`,children:[g,p(`collectionListItem.contentCountSuffix`)]}),a(r,{})]})]}),a(t,{className:`grid grid-cols-3 gap-2`,children:v.map((r,s)=>r.isPlaceholder?a(t,{className:`aspect-video rounded-md bg-bg2`},r.id??`${h}-${s}`):o(c,{href:`/${r.contentType===1?`video`:`post`}/${r.id}`,className:`flex flex-col gap-1`,children:[o(t,{className:`relative aspect-video rounded-md overflow-hidden bg-gray-100`,children:[a(e,{src:r.coverImage||`/empty/default-cover.png`,alt:r.title||h,fill:!0,className:`object-cover`}),r.isVideo&&o(i,{children:[a(t,{className:`absolute inset-0 flex items-center justify-center bg-black/20`,children:a(t,{className:`w-6 h-6 rounded-full bg-white/80 flex items-center justify-center`,children:a(u,{size:12})})}),r.isMovie&&a(t,{className:`absolute bottom-1 left-1 rounded-xs bg-black/60 px-1 text-[10px] text-white`,children:p(`collectionListItem.movieLabel`)}),r.videoDuration&&a(t,{className:`absolute bottom-1 right-1 rounded-xs bg-black/60 px-1 text-[10px] text-white`,children:d(r.videoDuration)})]})]}),a(t,{className:`flex items-center justify-between gap-1`,children:a(n,{className:`text-xs text-text1 line-clamp-1`,dangerouslySetInnerHTML:{__html:r.title||``}})})]},r.id??`${h}-${s}`))})]})}export{f as CollectionListItem};
@@ -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?: "default" | "link" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
9
+ variant?: "link" | "default" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
10
10
  } & class_variance_authority_types0.ClassProp) | undefined) => string;
11
11
  /** Badge 组件。 */
12
12
  declare function Badge({
@@ -7,7 +7,7 @@ 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?: "default" | "link" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
10
+ variant?: "link" | "default" | "destructive" | "secondary" | "outline" | "ghost" | null | undefined;
11
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 组件属性。 */
@@ -1,11 +1,11 @@
1
1
 
2
2
  import * as React from "react";
3
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
- import Image from "next/image";
4
+ import NextImage from "next/image";
5
5
 
6
6
  //#region components/ui/image.d.ts
7
7
  /** BaseImageProps 属性定义。 */
8
- type BaseImageProps = Omit<React.ComponentPropsWithoutRef<typeof Image>, 'className' | 'src' | 'alt' | 'width' | 'height' | 'loading' | 'priority' | 'fill' | 'style'>;
8
+ type BaseImageProps = Omit<React.ComponentPropsWithoutRef<typeof NextImage>, 'className' | 'src' | 'alt' | 'width' | 'height' | 'loading' | 'priority' | 'fill' | 'style'>;
9
9
  type CommonImageProps = BaseImageProps & {
10
10
  /** 图片地址,支持普通 URL、默认资源路径和加密地址。 */src: string; /** 图片替代文本。 */
11
11
  alt?: string; /** 图片类名。 */
@@ -27,6 +27,6 @@ type ImagePropsWithSize = CommonImageProps & {
27
27
  /** ImageProps 属性定义。 */
28
28
  type ImageProps = ImagePropsWithFill | ImagePropsWithSize;
29
29
  /** 图片组件:支持 bnc 解密、默认资源域名拼接与错误占位。 */
30
- declare function Image$1(props: ImageProps): react_jsx_runtime0.JSX.Element;
30
+ declare function Image(props: ImageProps): react_jsx_runtime0.JSX.Element;
31
31
  //#endregion
32
- export { BaseImageProps, CommonImageProps, Image$1 as Image, ImageProps, ImagePropsWithFill, ImagePropsWithSize };
32
+ export { BaseImageProps, CommonImageProps, Image, ImageProps, ImagePropsWithFill, ImagePropsWithSize };
@@ -17,7 +17,7 @@ declare const MATERIAL_CATEGORY: {
17
17
  readonly 顶部功能: "顶部功能";
18
18
  readonly 行为组件: "行为组件";
19
19
  readonly 视频模块: "视频模块";
20
- readonly 频道: "频道";
20
+ readonly 详情页: "详情页";
21
21
  };
22
22
  type MaterialPropsSchema = z$1.ZodObject<z$1.ZodRawShape>;
23
23
  type MaterialSchemaProps<TSchema extends MaterialPropsSchema> = InferSchemaProps<TSchema>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@funhub/platform",
3
3
  "type": "module",
4
- "version": "0.1.36",
4
+ "version": "0.1.37",
5
5
  "private": false,
6
6
  "sideEffects": [
7
7
  "**/*.css"
@@ -1,15 +0,0 @@
1
-
2
- import { BaseComponentProps } from "../../utils/types/component.mjs";
3
- import "../../utils/index.mjs";
4
- import { LargeGridData } from "./types.mjs";
5
- import * as react_jsx_runtime0 from "react/jsx-runtime";
6
-
7
- //#region components/biz/business/large-feature-grid/client.d.ts
8
- /**
9
- * 大图推荐客户端组件。
10
- */
11
- declare function LargeFeatureGridClient({
12
- data
13
- }: BaseComponentProps<LargeGridData[]>): react_jsx_runtime0.JSX.Element | null;
14
- //#endregion
15
- export { LargeFeatureGridClient };
@@ -1,2 +0,0 @@
1
-
2
- const e=[{title:`推荐位名称`,moreUrl:`/channel`,items:{id:`22edc8693ebbdaf1`,cover:`https://base-resources.guadd.fun/md-204/dcc-file/f7/f70a9f9f0c17aa9aff6c3a3e03a822db-small.jpg`,tag:`独家`,playCount:11111,playCountDelta:0,showPlayCount:!0,duration:3600,showEpisode:!0,useContentCover:!0,title:`穷小伙一睁眼穿越古代,娶个老婆就能得到奖励,后宫3000宠都宠不过来!谁料女帝主动送上门来,征服女帝可以直接开终极宝箱,不用选择全都可以!`,desc:`穷小伙一睁眼穿越古代,娶个老婆就能得到奖励,后宫3000宠都宠不过来!谁料女帝主动送上门来,征服女帝可以直接开终极宝箱,不用选择全都可以!`}}];export{e as defaultData};
@@ -1,13 +0,0 @@
1
-
2
- import { BaseComponentProps } from "../../utils/types/component.mjs";
3
- import "../../utils/index.mjs";
4
- import { LargeGridData } from "./types.mjs";
5
- import * as react_jsx_runtime0 from "react/jsx-runtime";
6
-
7
- //#region components/biz/business/large-feature-grid/server.d.ts
8
- /**
9
- * 大图推荐服务端组件,直接渲染客户端组件。
10
- */
11
- declare function LargeFeatureGrid(props: BaseComponentProps<LargeGridData[]>): react_jsx_runtime0.JSX.Element;
12
- //#endregion
13
- export { LargeFeatureGrid };
@@ -1,53 +0,0 @@
1
-
2
- //#region components/biz/business/large-feature-grid/types.d.ts
3
- /**
4
- * LargeFeatureGrid 组件类型定义
5
- */
6
- interface LargeGridItem {
7
- /** 内容ID */
8
- id: string;
9
- /** 封面图 URL */
10
- cover: string;
11
- /** 自定义角标文字 */
12
- tag?: string;
13
- /** 角标枚举 */
14
- superscript?: 0 | 1 | 2;
15
- /** 播放量 */
16
- playCount?: string | number;
17
- /** 播放量增量 */
18
- playCountDelta?: number;
19
- /** 是否展示播放量,默认 true */
20
- showPlayCount?: boolean;
21
- /** 视频时长或剧集数 */
22
- duration?: string | number;
23
- /** 是否展示时长/集数,默认 true */
24
- showEpisode?: boolean;
25
- /** 内容标题 */
26
- title: string;
27
- /** 内容描述 */
28
- desc?: string;
29
- /** 是否沿用内容海报(渲染层只做透传兼容) */
30
- useContentCover?: boolean;
31
- /** 角标图 URL(主字段) */
32
- tagImageUrl?: string;
33
- /** 角标图 URL(历史兼容字段) */
34
- tag_image?: string;
35
- /** 角标图 URL(历史兼容字段) */
36
- tag_image_url?: string;
37
- /** 角标图 URL(历史兼容字段) */
38
- tagImage?: string;
39
- }
40
- interface LargeGridData {
41
- /** 推荐位名称 */
42
- title?: string;
43
- /** 更多链接地址 */
44
- moreUrl?: string;
45
- /** 更多链接类型(编辑态持久字段) */
46
- moreLinkType?: 'content-list' | 'content' | 'url';
47
- /** 推荐位内容类型(编辑态持久字段) */
48
- recommendMode?: 'content' | 'algorithm';
49
- /** 卡片内容 */
50
- items?: LargeGridItem;
51
- }
52
- //#endregion
53
- export { LargeGridData };