@funhub/platform 0.1.139 → 0.1.141

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 (71) hide show
  1. package/dist/components/biz/basics/fullscreen-feed/runtime/client.mjs +1 -1
  2. package/dist/components/biz/business/comment/reply-detail.mjs +1 -1
  3. package/dist/components/biz/business/detail/shared/detail-operate.mjs +1 -1
  4. package/dist/components/biz/business/detail/shared/registry.d.mts +4 -12
  5. package/dist/components/biz/business/detail/shared/registry.mjs +1 -1
  6. package/dist/components/biz/business/detail/shared/runtime-context-provider.mjs +1 -1
  7. package/dist/components/biz/business/detail/shared/use-video-detail-webview-bridge.mjs +1 -1
  8. package/dist/components/biz/business/detail/video-detail-actions/material.d.mts +1 -1
  9. package/dist/components/biz/business/detail/video-detail-info/client.mjs +1 -1
  10. package/dist/components/biz/business/detail/video-detail-info/material.d.mts +2 -2
  11. package/dist/components/biz/business/detail/video-detail-info/schema.mjs +1 -1
  12. package/dist/components/biz/business/detail/video-detail-info/server.mjs +1 -1
  13. package/dist/components/biz/business/detail/video-detail-info-title-tags-episodes/material.d.mts +2 -2
  14. package/dist/components/biz/business/detail/video-detail-player/client.mjs +1 -1
  15. package/dist/components/biz/business/detail/video-detail-recommend/material.d.mts +2 -2
  16. package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
  17. package/dist/components/biz/business/marquee/client.mjs +1 -1
  18. package/dist/components/biz/business/profile/profile-header/client.mjs +1 -1
  19. package/dist/components/biz/business/search-bar/variants/detail-search-bar/runtime/client.mjs +1 -1
  20. package/dist/components/biz/business/search-history/client.mjs +1 -1
  21. package/dist/components/biz/business/search-input/client.mjs +1 -1
  22. package/dist/components/biz/business/tab-bar/client.mjs +1 -1
  23. package/dist/components/biz/business/text-recommend/client.mjs +1 -1
  24. package/dist/components/common/at-element/index.mjs +1 -1
  25. package/dist/components/common/blocked-dialog/blocked-dialog.mjs +1 -1
  26. package/dist/components/common/funhub-provider/funhub-provider.mjs +1 -1
  27. package/dist/components/common/header-nav/client.mjs +1 -1
  28. package/dist/components/common/info-card/card-header.mjs +1 -1
  29. package/dist/components/common/list/user-activity-list/user-activity-list-item.mjs +1 -1
  30. package/dist/components/common/tab-bar/index.mjs +1 -1
  31. package/dist/components/pages/(follow)/_components/interaction-tabs/index.mjs +1 -1
  32. package/dist/components/pages/(follow)/_components/user-list/index.mjs +1 -1
  33. package/dist/components/pages/collection-create/form.mjs +1 -1
  34. package/dist/components/pages/collection-detail/detail.mjs +1 -1
  35. package/dist/components/pages/feedback/_components/feedback-form.mjs +1 -1
  36. package/dist/components/pages/fullscreen-feed/page.mjs +1 -1
  37. package/dist/components/pages/home/client.mjs +1 -1
  38. package/dist/components/pages/login/auth-guard.mjs +1 -1
  39. package/dist/components/pages/post-detail/post-detail-client.mjs +1 -1
  40. package/dist/components/pages/publish/components/collection.mjs +1 -1
  41. package/dist/components/pages/publish/components/header.mjs +1 -1
  42. package/dist/components/pages/publish/page-client.mjs +1 -1
  43. package/dist/components/pages/search/page-client.mjs +1 -1
  44. package/dist/components/pages/search/top-header.mjs +1 -1
  45. package/dist/components/pages/search-result/page-client.mjs +1 -1
  46. package/dist/components/pages/settings/_components/settings.mjs +1 -1
  47. package/dist/components/pages/video-detail/video-detail-client.mjs +1 -1
  48. package/dist/components/pages/video-list/video-list-client.mjs +1 -1
  49. package/dist/components/ui/badge.d.mts +1 -1
  50. package/dist/components/ui/button.d.mts +2 -2
  51. package/dist/components/ui/image.d.mts +4 -4
  52. package/dist/components/ui/link.mjs +1 -1
  53. package/dist/hooks/use-card-decoration.mjs +1 -1
  54. package/dist/hooks/use-content-operate.mjs +1 -1
  55. package/dist/materials.d.mts +1 -3
  56. package/dist/materials.mjs +1 -1
  57. package/dist/utils/login-modal-bridge.mjs +1 -1
  58. package/dist/utils.d.mts +5 -6
  59. package/dist/utils.mjs +1 -1
  60. package/package.json +28 -28
  61. package/dist/components/biz/business/detail/video-detail-player-bridge-only/client.d.mts +0 -12
  62. package/dist/components/biz/business/detail/video-detail-player-bridge-only/client.mjs +0 -2
  63. package/dist/components/biz/business/detail/video-detail-player-bridge-only/index.d.mts +0 -5
  64. package/dist/components/biz/business/detail/video-detail-player-bridge-only/material.d.mts +0 -17
  65. package/dist/components/biz/business/detail/video-detail-player-bridge-only/material.mjs +0 -2
  66. package/dist/components/biz/business/detail/video-detail-player-bridge-only/schema.d.mts +0 -23
  67. package/dist/components/biz/business/detail/video-detail-player-bridge-only/schema.mjs +0 -2
  68. package/dist/components/biz/business/detail/video-detail-player-bridge-only/server.d.mts +0 -11
  69. package/dist/components/biz/business/detail/video-detail-player-bridge-only/server.mjs +0 -2
  70. package/dist/utils/use-compatible-router.d.mts +0 -26
  71. package/dist/utils/use-compatible-router.mjs +0 -2
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useRouter as e}from"../../../../../utils/use-compatible-router.mjs";import{prefetchVideoPlayerSrc as t}from"../../../../common/video-player/process-m3u8-cache.mjs";import{useLoginModalStore as n}from"../../../../../store/modules/login-modal-store.mjs";import{BasicFullscreen as r}from"../basic-fullscreen.mjs";import{adaptFeedItemToSafeInformation as i,normalizeToFeedItem as a}from"./adapters.mjs";import o from"./styles.module.mjs";import{BottomInfo as s}from"./bottom-info.mjs";import{PostSlide as ee}from"./post-slide.mjs";import{UserAction as te}from"./user-action.mjs";import{VideoSlide as ne}from"./video-slide.mjs";import{useCallback as c,useEffect as l,useMemo as u,useRef as d,useState as f}from"react";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";import{useParams as re}from"next/navigation";import g from"next/dynamic";const ie=g(()=>import(`./comment-modal.mjs`),{ssr:!1,loading:()=>null});function _(g){let _=e(),v=re(),{items:y,activeIndex:b,top:ae,bottom:oe,videoConfig:se,userInteracted:x,onUserInteracted:S,onActiveIndexChange:ce,onDataUpdate:le,onOpenComment:C,getNavigationInfo:w,onControlsVisibilityChange:T,onGestureStart:E,onGestureEnd:D,onSwipeCancel:O,onCustomActionRender:ue,onVideoProgressUpdate:de,currentUserId:fe,followIds:pe,onFollowIdsChange:me,commentContentId:he,onRequireLogin:k,style:ge,activeEpisodeId:_e}=g,A=se;function j(){x||S()}function M(e){j();let t=typeof v?.locale==`string`?`/${v.locale}`:``;_.push(`${t}/profile/${e}`)}let N=c(e=>`${typeof v?.locale==`string`?`/${v.locale}`:``}/feed-series/${e}/episode/1`,[v?.locale]);function P(e){j();let t=N(e);_.push(t)}function F(){if(k){k();return}n.getState().open()}let[I,ve]=f({});function L(e,t){if(!t)return e;let n=t.static?{...e.static||{},...t.static}:e.static,r=t.author?{...e.author||{},...t.author}:e.author;return{...e,...t,static:n,author:r}}function R(e,t){ve(n=>{let r=n[e]||{},i=t.static?{...r.static||{},...t.static}:r.static,a=t.author?{...r.author||{},...t.author}:r.author;return{...n,[e]:{...r,...t,...i?{static:i}:{},...a?{author:a}:{}}}}),le(e,t)}let[z,ye]=f(null),[B,be]=f(``),[xe,Se]=f(1),[V,H]=f(!1);function Ce(e,t,n){if(j(),C){C(t);return}ye(t),be(e),Se(n),H(!0)}function we(e){let t=e.static?.comment_cnt;t!=null&&B&&R(B,{static:{comment_cnt:t}})}let U=u(()=>{function e(e){return!!e&&typeof e==`object`&&typeof e.kind==`string`&&!!e.originalData}function t(e){return!!e&&typeof e==`object`&&typeof e.content_id==`string`}function n(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&typeof e.name==`string`}function r(e){let t=Array.isArray(e.medias)?e.medias:[],n=t.map(e=>e?.media_url?e.is_video&&e.cover_image||e.media_url:``).filter(e=>!!e),r=e.content||``,i=r.length>18?`${r.slice(0,18)}...`:r,a={id:e.content_id,mid:e.content_id,name:i,img_y:e.cover_image||``,preview_images:t,description:r,tags:(e.tags||[]).map(e=>({id:e,name:e})),links:[],static:{like_cnt:e.like_count??0,dislike_cnt:e.dislike_count??0,comment_cnt:e.comment_count??0,share_cnt:e.share_count??0,browse_cnt:e.view_count??0,collect_cnt:0},type:e.type,is_liked:!!e.is_liked,is_dislike:!!e.is_dislike,is_collected:!!e.is_collected,is_followed:!!e.is_followed,author:e.author,up_user:e.user_id};return{kind:`post`,id:e.content_id,title:i,content:r,images:n,originalData:a}}function o(e){let t=(Array.isArray(e.preview_images)?e.preview_images:[]).map(e=>e?typeof e==`string`?e:e.is_video?e.cover_image||e.media_url||``:e.media_url||``:``).filter(e=>!!e);return{kind:`post`,id:e.id,title:e.name,content:e.description??``,images:t,originalData:e}}return(y||[]).map(s=>{if(e(s))return s;if(t(s))return r(s);if(n(s)){let e=i(s);return e.type===1&&e.links.length===0?o(e):a(e)}return null}).filter(Boolean)},[y]),W=u(()=>{if(!U.length)return[];let e=Math.max(0,b-1),t=Math.min(U.length-1,b+2),n=[];for(let r=e;r<=t;r+=1){let e=U[r];if(!e||e.kind!==`video`)continue;let t=e.videoUrl||e.hlsList?.[0]?.url||``;t&&n.push(t)}return Array.from(new Set(n))},[b,U]);l(()=>{W.forEach(e=>t(e))},[W]);let G=d(new Set);l(()=>{let e=U[b];if(!e||e.kind!==`video`||Number(e.originalData?.episode_cnt||0)<=1||w(b).onSeriesClick)return;let t=e.originalData?.id||e.id;if(!t)return;let n=N(t);G.current.has(n)||(G.current.add(n),_.prefetch(n))},[b,N,w,U,_]);let K=ae??0,q=oe??0,Te={...ge,top:`${K}px`,bottom:`${q}px`,height:`calc(100dvh - ${K}px - ${q}px)`},J=d(b),[Ee,Y]=f(!1),[X,Z]=f(!1),[De,Q]=f(!1),$=Ee&&X&&De;return l(()=>{J.current=b,Y(!1),Z(!1),Q(!1)},[b,T]),l(()=>{T?.($)},[$,T]),h(p,{children:[m(r,{items:U,activeIndex:b,userInteracted:x,onUserInteracted:S,onActiveIndexChange:ce,onViewportIndexChange:e=>{J.current=e,Y(!1),Z(!1),Q(!1)},onGestureStart:E,onGestureEnd:D,onSwipeCancel:O,style:Te,className:`w-full h-full fixed top-0 left-0 overflow-hidden z-[2] touch-none ${o.fullscreenFeed}`,trackClassName:o.feedTrack,itemWrapperClassName:o.feedItem,renderItem:({item:e,index:t,activeIndex:n,isActive:r,isSettledActive:i,shouldMount:a,swipeNext:c})=>{if(!e)return m(`div`,{className:o.emptySlide});let l=Math.abs(t-n)<=1,u=L(e.originalData,I[e.id]);return h(p,{children:[e.kind===`post`?m(ee,{item:e,isSettledActive:i,shouldMount:a}):e.kind===`video`?m(ne,{item:e,videoConfig:A,isActive:r,isSettledActive:i,shouldMount:a,shouldLoadCover:l,isPaused:V,userInteracted:x,onPlayerInteract:()=>{t===J.current&&X&&Q(!0)},onControlsVisibilityChange:e=>{t===J.current&&Y(e)},onVideoEnded:A?.autoNext?c:void 0,onProgressUpdate:(n,r)=>{t===J.current&&(!X&&n>=.05&&Z(!0),de?.({id:e.id,currentTime:n,duration:r}))}}):m(`div`,{className:o.emptySlide}),m(te,{information:u,onUpdate:t=>R(e.id,t),onOpenComment:()=>Ce(e.id,u,e.kind===`post`?2:1),onCustomActionRender:ue,onUserNavigate:M,currentUserId:fe,followIds:pe,onFollowChange:e=>{me?.(e)},onRequireLogin:F,activeEpisodeId:_e}),r&&m(s,{information:u,isPost:e.kind===`post`,navigation:(()=>{let e=w(t);return(u.episode_cnt??0)>1&&!e.onSeriesClick?{...e,onSeriesClick:()=>P(u.id)}:e})(),isControlsVisible:$,onUserNavigate:M,onNextClick:c})]})}}),!C&&V&&z&&m(ie,{open:V,information:z,contentId:he||z.id,content_type:xe,onUpdate:we,onClose:()=>H(!1)})]})}export{_ as default};
2
+ "use client";import{prefetchVideoPlayerSrc as e}from"../../../../common/video-player/process-m3u8-cache.mjs";import{useLoginModalStore as t}from"../../../../../store/modules/login-modal-store.mjs";import{BasicFullscreen as n}from"../basic-fullscreen.mjs";import{adaptFeedItemToSafeInformation as r,normalizeToFeedItem as i}from"./adapters.mjs";import a from"./styles.module.mjs";import{BottomInfo as o}from"./bottom-info.mjs";import{PostSlide as s}from"./post-slide.mjs";import{UserAction as c}from"./user-action.mjs";import{VideoSlide as ee}from"./video-slide.mjs";import{useCallback as l,useEffect as u,useMemo as d,useRef as f,useState as p}from"react";import{Fragment as m,jsx as h,jsxs as g}from"react/jsx-runtime";import _ from"next/dynamic";import{useParams as te,useRouter as ne}from"next/navigation";const re=_(()=>import(`./comment-modal.mjs`),{ssr:!1,loading:()=>null});function v(_){let v=ne(),y=te(),{items:b,activeIndex:x,top:ie,bottom:ae,videoConfig:oe,userInteracted:S,onUserInteracted:C,onActiveIndexChange:se,onDataUpdate:ce,onOpenComment:w,getNavigationInfo:T,onControlsVisibilityChange:E,onGestureStart:le,onGestureEnd:D,onSwipeCancel:O,onCustomActionRender:ue,onVideoProgressUpdate:de,currentUserId:fe,followIds:pe,onFollowIdsChange:me,commentContentId:he,onRequireLogin:k,style:ge,activeEpisodeId:_e}=_,A=oe;function j(){S||C()}function M(e){j();let t=typeof y?.locale==`string`?`/${y.locale}`:``;v.push(`${t}/profile/${e}`)}let N=l(e=>`${typeof y?.locale==`string`?`/${y.locale}`:``}/feed-series/${e}/episode/1`,[y?.locale]);function P(e){j();let t=N(e);window.isWebView?window.location.href=t:v.push(t)}function F(){if(k){k();return}t.getState().open()}let[I,ve]=p({});function ye(e,t){if(!t)return e;let n=t.static?{...e.static||{},...t.static}:e.static,r=t.author?{...e.author||{},...t.author}:e.author;return{...e,...t,static:n,author:r}}function L(e,t){ve(n=>{let r=n[e]||{},i=t.static?{...r.static||{},...t.static}:r.static,a=t.author?{...r.author||{},...t.author}:r.author;return{...n,[e]:{...r,...t,...i?{static:i}:{},...a?{author:a}:{}}}}),ce(e,t)}let[R,be]=p(null),[z,xe]=p(``),[Se,B]=p(1),[V,H]=p(!1);function Ce(e,t,n){if(j(),w){w(t);return}be(t),xe(e),B(n),H(!0)}function we(e){let t=e.static?.comment_cnt;t!=null&&z&&L(z,{static:{comment_cnt:t}})}let U=d(()=>{function e(e){return!!e&&typeof e==`object`&&typeof e.kind==`string`&&!!e.originalData}function t(e){return!!e&&typeof e==`object`&&typeof e.content_id==`string`}function n(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&typeof e.name==`string`}function a(e){let t=Array.isArray(e.medias)?e.medias:[],n=t.map(e=>e?.media_url?e.is_video&&e.cover_image||e.media_url:``).filter(e=>!!e),r=e.content||``,i=r.length>18?`${r.slice(0,18)}...`:r,a={id:e.content_id,mid:e.content_id,name:i,img_y:e.cover_image||``,preview_images:t,description:r,tags:(e.tags||[]).map(e=>({id:e,name:e})),links:[],static:{like_cnt:e.like_count??0,dislike_cnt:e.dislike_count??0,comment_cnt:e.comment_count??0,share_cnt:e.share_count??0,browse_cnt:e.view_count??0,collect_cnt:0},type:e.type,is_liked:!!e.is_liked,is_dislike:!!e.is_dislike,is_collected:!!e.is_collected,is_followed:!!e.is_followed,author:e.author,up_user:e.user_id};return{kind:`post`,id:e.content_id,title:i,content:r,images:n,originalData:a}}function o(e){let t=(Array.isArray(e.preview_images)?e.preview_images:[]).map(e=>e?typeof e==`string`?e:e.is_video?e.cover_image||e.media_url||``:e.media_url||``:``).filter(e=>!!e);return{kind:`post`,id:e.id,title:e.name,content:e.description??``,images:t,originalData:e}}return(b||[]).map(s=>{if(e(s))return s;if(t(s))return a(s);if(n(s)){let e=r(s);return e.type===1&&e.links.length===0?o(e):i(e)}return null}).filter(Boolean)},[b]),W=d(()=>{if(!U.length)return[];let e=Math.max(0,x-1),t=Math.min(U.length-1,x+2),n=[];for(let r=e;r<=t;r+=1){let e=U[r];if(!e||e.kind!==`video`)continue;let t=e.videoUrl||e.hlsList?.[0]?.url||``;t&&n.push(t)}return Array.from(new Set(n))},[x,U]);u(()=>{W.forEach(t=>e(t))},[W]);let G=f(new Set);u(()=>{let e=U[x];if(!e||e.kind!==`video`||Number(e.originalData?.episode_cnt||0)<=1||T(x).onSeriesClick)return;let t=e.originalData?.id||e.id;if(!t)return;let n=N(t);G.current.has(n)||(G.current.add(n),v.prefetch(n))},[x,N,T,U,v]);let K=ie??0,q=ae??0,Te={...ge,top:`${K}px`,bottom:`${q}px`,height:`calc(100dvh - ${K}px - ${q}px)`},J=f(x),[Ee,Y]=p(!1),[X,Z]=p(!1),[De,Q]=p(!1),$=Ee&&X&&De;return u(()=>{J.current=x,Y(!1),Z(!1),Q(!1)},[x,E]),u(()=>{E?.($)},[$,E]),g(m,{children:[h(n,{items:U,activeIndex:x,userInteracted:S,onUserInteracted:C,onActiveIndexChange:se,onViewportIndexChange:e=>{J.current=e,Y(!1),Z(!1),Q(!1)},onGestureStart:le,onGestureEnd:D,onSwipeCancel:O,style:Te,className:`w-full h-full fixed top-0 left-0 overflow-hidden z-[2] touch-none ${a.fullscreenFeed}`,trackClassName:a.feedTrack,itemWrapperClassName:a.feedItem,renderItem:({item:e,index:t,activeIndex:n,isActive:r,isSettledActive:i,shouldMount:l,swipeNext:u})=>{if(!e)return h(`div`,{className:a.emptySlide});let d=Math.abs(t-n)<=1,f=ye(e.originalData,I[e.id]);return g(m,{children:[e.kind===`post`?h(s,{item:e,isSettledActive:i,shouldMount:l}):e.kind===`video`?h(ee,{item:e,videoConfig:A,isActive:r,isSettledActive:i,shouldMount:l,shouldLoadCover:d,isPaused:V,userInteracted:S,onPlayerInteract:()=>{t===J.current&&X&&Q(!0)},onControlsVisibilityChange:e=>{t===J.current&&Y(e)},onVideoEnded:A?.autoNext?u:void 0,onProgressUpdate:(n,r)=>{t===J.current&&(!X&&n>=.05&&Z(!0),de?.({id:e.id,currentTime:n,duration:r}))}}):h(`div`,{className:a.emptySlide}),h(c,{information:f,onUpdate:t=>L(e.id,t),onOpenComment:()=>Ce(e.id,f,e.kind===`post`?2:1),onCustomActionRender:ue,onUserNavigate:M,currentUserId:fe,followIds:pe,onFollowChange:e=>{me?.(e)},onRequireLogin:F,activeEpisodeId:_e}),r&&h(o,{information:f,isPost:e.kind===`post`,navigation:(()=>{let e=T(t);return(f.episode_cnt??0)>1&&!e.onSeriesClick?{...e,onSeriesClick:()=>P(f.id)}:e})(),isControlsVisible:$,onUserNavigate:M,onNextClick:u})]})}}),!w&&V&&R&&h(re,{open:V,information:R,contentId:he||R.id,content_type:Se,onUpdate:we,onClose:()=>H(!1)})]})}export{v as default};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{cn as e}from"../../../../utils/cn.mjs";import{debounceFun as t,getCurrentSecondTime as n,parseTextAtUserIds as r,replaceAtUserElement as i}from"../../../../utils/common.mjs";import{useFollowIdsState as a}from"../../../../store/modules/follow-ids-store.mjs";import{useUserStore as o}from"../../../../store/modules/user-store.mjs";import{gCommunityGetComments as s,pCommunityCreateComment as c,pCommunityDislikeComment as l,pCommunityLikeComment as u,pInteractionFollow as d,pInteractionUnfollow as f}from"../../../../service/generated/client.mjs";import{checkFollowStatus as p}from"../../../../utils/follow-service.mjs";import{useRouter as m}from"../../../../utils/use-compatible-router.mjs";import{Image as h}from"../../../ui/image.mjs";import{Dialog as g,DialogContent as _}from"../../../ui/dialog.mjs";import{InfiniteScroll as v}from"../../../ui/infinite-scroll.mjs";import{useLikeDislike as y}from"../../../../hooks/use-like-dislike.mjs";import{useKeepAliveState as b}from"../../../common/keep-scroll-position/index.mjs";import x from"../../../../assets/icons/close.mjs";import S from"../../../../assets/icons/common/follow_sel.mjs";import C from"../../../../assets/icons/common/follow_user.mjs";import{UnfollowConfirmDialog as w}from"../../../common/follow-button/unfollow-confirm-dialog.mjs";import T from"../../../../assets/icons/detail/give_like.mjs";import E from"../../../../assets/icons/detail/give_like_sel.mjs";import D from"./comment-input.mjs";import O from"../../../../assets/icons/detail/un_like.mjs";import k from"../../../../assets/icons/detail/un_like_sel.mjs";import{CommentMedia as A}from"./comment-media.mjs";import{CommentRichText as j}from"./comment-rich-text.mjs";import{TimeDisplay as M}from"./time-display.mjs";import{CommentItem as N}from"./comment-item.mjs";import{mapApiReplayToReplay as P}from"../../../../types/safe-replay.mjs";import{memo as F,useCallback as I,useEffect as L,useMemo as R,useRef as z,useState as B}from"react";import{Fragment as V,jsx as H,jsxs as U}from"react/jsx-runtime";import{toast as W}from"sonner";import{useTranslations as G}from"next-intl";function K(e){if(e==null)return 0;let t=typeof e==`number`?e:Number(e);if(!Number.isNaN(t)&&t>0)return t>0xe8d4a51000?Math.floor(t/1e3):Math.floor(t);let n=Date.parse(String(e));return Number.isNaN(n)?0:Math.floor(n/1e3)}function q(e,t,n){let r=[];return Array.isArray(n)&&n.length>0?(n.forEach(e=>{let t=!!e?.is_video,n=String(e?.media_url||``),i=String(e?.cover_image||``);!n&&!i||r.push({cover_image:i,cover_image_thumbnail:i,cover_image_radio:1,cover_image_resolution:String(e?.cover_image_resolution||``),image_url:t?``:n,image_thumbnail:t?``:n,image_radio:1,image_resolution:String(e?.image_resolution||``),is_video:t,resolution:String(e?.video_resolution||``),video_duration:Number(e?.video_duration||0),video_url:t?n:``,video_size:Number(e?.video_size||0),video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r):(e?.length&&e.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:e,image_thumbnail:e,image_radio:1,image_resolution:``,is_video:!1,resolution:``,video_duration:0,video_url:``,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),t?.length&&t.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:``,image_thumbnail:``,image_radio:1,image_resolution:``,is_video:!0,resolution:``,video_duration:0,video_url:e,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r)}function J(e){let t=X(e.mentioned_users),n=t.length>0?t:Z(e.content||``);return{id:String(e.comment_id??e.id??``),user_name:e.user?.nickname||e.user?.username||``,text:e.content||``,type:`4`,files:[],at_users:n,cover_image:``,nine_grid_content_info:q(e?.images,e?.videos,e?.medias)}}function Y(e,t){let n=e.is_liked?`1`:e.is_dislike?`2`:`0`,r=X(e.mentioned_users),i=r.length>0?r:Z(e.content||``),a=String(e.comment_id??e.id??``),o=typeof e.like_count==`number`?e.like_count:0,s=P({id:a,like_cnt:(e.is_liked&&o===0?1:o).toString(),dislike_cnt:(e.dislike_count||0).toString(),created_at:K(e.create_time),text:e.content||``,type:`4`,like_flag:n,user_id:e.user_id||``,user_name:e.user?.nickname||e.user?.username||``,avatar:e.user?.avatar_url||``,reply_cnt:(e.reply_count||0).toString(),nine_grid_content_info:q(e?.images,e?.videos,e?.medias),at_users:i,parent_reply:void 0});return t&&(s.parent_reply=J(t)),s}function X(e){return Array.isArray(e)?e.map(e=>({user_id:e.user_id||``,name:e.nickname||e.username||``,avatar:e.avatar_url||``,birthday:``,signature:e.signature||``})):[]}function Z(e){if(!e)return[];let t=new Map,n=/<span[^>]*class=['"]mention['"][^>]*data-id=['"]([^'"]+)['"][^>]*>@([^<]*)<\/span>/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]?String(r[1]):``,n=(r[2]?String(r[2]):``).replace(/^@/,``)||e;!e||t.has(e)||t.set(e,{user_id:e,name:n,avatar:``,birthday:``,signature:``})}if(t.size>0)return Array.from(t.values());let i=/<@_user>(\w+)<\/@_user>/g;for(;(r=i.exec(e))!==null;){let e=r[1]?String(r[1]):``;!e||t.has(e)||t.set(e,{user_id:e,name:e,avatar:``,birthday:``,signature:``})}return Array.from(t.values())}function ee(e){return!Array.isArray(e)||e.length===0?[]:e.map(e=>{let t=!!e.is_video,n=t?String(e.video_url||``):String(e.image_url||e.cover_image||``),r=String(e.cover_image||e.image_url||``);return{media_url:n,is_video:t,image_resolution:String(e.image_resolution||``),cover_image:r,cover_image_resolution:String(e.cover_image_resolution||``),video_resolution:String(e.resolution||``),video_duration:Number(e.video_duration||0),video_size:Number(e.video_size||0)}}).filter(e=>!!e.media_url)}function Q(e,t){let n=[];return e.forEach(e=>{n.push(Y(e,t)),e.sub_comments?.length&&n.push(...Q(e.sub_comments,e))}),n}function $(e){let t=Number(e)||0;return t>=1e4?`${(t/1e4).toFixed(1)}w`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}const te=t((e,t,n)=>{try{if(!e?.id)return;u({comment_id:e.id,is_like:e.like_flag!==`1`},{revalidate:!1})}catch(e){console.error(`点赞回复失败:`,e)}},200),ne=t((e,t,n)=>{try{if(!e?.id)return;l({comment_id:e.id,is_dislike:e.like_flag!==`2`},{revalidate:!1})}catch(e){console.error(`点踩回复失败:`,e)}},200),re=F(({comment:e,updateFollow:t,onRequireLogin:n})=>{let{userInfo:r,userId:i,isLogin:a}=o(),s=r?.userId||r?.user_id||i||``;return H(`div`,{className:`w-full bg-bg1`,children:H(N,{comment:e,variant:`light`,isLogin:a,onRequireLogin:n,rightSlot:R(()=>!!s&&String(s)===String(e.user_id||``),[e.user_id,s])?H(V,{}):H(ie,{userId:e.user_id,hasFollow:e.is_follow,onChange:t,onRequireLogin:n}),showReplyButton:!1})})});function ie({userId:t,hasFollow:n=!1,onChange:r,onRequireLogin:i}){let s=G(`components.biz.business.comment`),{isLogin:c,userInfo:l,userId:u}=o(),{followIds:p}=a(),[m,h]=B(n),[g,_]=B(!1),v=l?.userId||l?.user_id||u||``,y=R(()=>!!v&&String(v)===String(t||``),[t,v]),b=R(()=>n||p.includes(t),[p,n,t]);L(()=>{h(b)},[b]);let x=I(async()=>{try{if(!v||!t||t===`0`){W.error(s(`replyDetail.loginRequired`));return}if(m){let e=await f({follower_id:String(v),followee_id:t});if(e.code!==0){W.error(e.message||s(`replyDetail.unfollowFailed`));return}}else{let e=await d({follower_id:String(v),followee_id:t});if(e.code!==0){W.error(e.message||s(`replyDetail.followFailed`));return}}window.sensors?.track(`detail_follow_click`,{object_id:``,action:m?`取消关注`:`关注`,author_id:t}),sessionStorage.setItem(`user_page_refresh`,`1`)}catch(e){console.error(`关注或取消关注失败:`,e),W.error(s(m?`replyDetail.unfollowFailed`:`replyDetail.followFailed`));return}let e=!m;r?.(e),h(e);let{followIds:n,setFollowIds:i}=a.getState(),o=new Set(n);e?o.add(t):o.delete(t),i(Array.from(o))},[t,m,r,v,s]),T=I(()=>{if(!c){i?.();return}if(m){_(!0);return}x()},[x,m,c,i]);function E(){_(!1),x()}function D(){_(!1)}return y||!t||t===`0`?null:U(V,{children:[H(`div`,{className:e(`h-[28px] rounded-[14px] px-[8px] border border-solid cursor-pointer flex items-center justify-center`,m?`border-text3`:`border-theme5`),onClick:T,children:m?U(V,{children:[H(S,{className:`w-[12px] h-[12px] text-text3 shrink-0`}),H(`span`,{className:`text-text3 text-[12px] leading-[18px] ml-[4px] shrink-0`,children:s(`replyDetail.followed`)})]}):U(V,{children:[H(C,{className:`block w-[12px] h-[12px] text-theme5 shrink-0`}),H(`span`,{className:`block text-theme5 text-[12px] leading-[18px] ml-[4px] shrink-0`,children:s(`replyDetail.follow`)})]})}),H(w,{open:g,onOpenChange:_,onCancel:D,onConfirm:E})]})}const ae=t(e=>{e()},0);function oe(e,t,n,r){let i=z(!1);L(()=>{i.current=!1},[r]),L(()=>{let r=e.current;if(!r)return;!i.current&&t>0&&(r.scrollTop=t,i.current=!0);let a=()=>{i.current=!0,n(r.scrollTop)};return r.addEventListener(`scroll`,a,{passive:!0}),()=>r.removeEventListener(`scroll`,a)},[e,n,t,r])}const se=F(({commentId:e,informationId:t,handleReplyComment:n,onReplyListUpdate:r})=>{let i=G(`components.biz.business.comment`),[a,o]=b(`replay-detail-list-${e}`,[]),[c,l]=b(`replay-detail-has-more-${e}`,!0),[u,d]=b(`replay-detail-page-${e}`,1),{getLikedListData:f,getDislikedListData:p}=y(),m=z(!1),h=I(async()=>{if(!(!e||!t)&&!m.current){m.current=!0;try{let n=await s({content_id:t,parent_id:e,page:u,page_size:20,sort_by:`latest`});if(n.code!==0)throw Error(n.message||i(`replyDetail.fetchRepliesFailed`));let r=n.data?.data?.comments??[],a=Q(r);((n.data?.data?.has_more??!1)===!1||r.length<20)&&l(!1),o(e=>{let t=new Set(e.map(e=>e.id)),n=a.filter(e=>!t.has(e.id));return[...e,...n]}),a.length>0&&d(u+1)}catch(e){console.error(`获取回复列表失败:`,e),l(!1)}finally{m.current=!1}}},[e,t,u,o,l,d,i]),g=I(e=>{o(t=>[e,...t])},[o]);L(()=>{r(g)},[r,g]),L(()=>{e&&t&&(o(e=>e.length===0?e:[]),l(e=>e===!0?e:!0),d(e=>e===1?e:1))},[e,t,o,l,d]);let _=I(n=>{o(e=>f(e,n.id)),te(n,t,e)},[e,f,t,o]),x=I(n=>{n.like_flag!==`2`&&W.message(i(`replyDetail.dislikeHint`)),o(e=>p(e,n.id)),ne(n,t,e)},[e,p,t,o,i]),[S,C]=b(`replay-detail-scroll-top-${e}`,0),w=z(null);oe(w,S,C,e),L(()=>{!e||!t||a.length===0&&c&&h()},[e,t,h,a.length,c]);let T=I(async()=>{await h()},[h]);return U(`div`,{ref:w,className:`w-full pb-[66px]`,children:[a.map((e,t)=>H(ce,{replyItem:e,replyComment:n,onLikeReply:_,onDislikeReply:x},`${e.id}-${t}`)),H(v,{loadMore:T,hasMore:c})]})});function ce({replyItem:e,replyComment:t,onLikeReply:n,onDislikeReply:r}){let i=G(`components.biz.business.comment`),a=m(),o=e.status===`0`;function s(){n?.(e)}function c(){r?.(e)}function l(){t(e)}return U(`div`,{className:`p-[16px] flex flex-col`,children:[U(`div`,{className:`flex flex-row justify-between`,children:[U(`button`,{type:`button`,className:`flex flex-row items-center text-left`,onClick:()=>{a.push(`/profile/${e.user_id}`)},children:[H(`div`,{className:`w-[38px] h-[38px] rounded-full overflow-hidden relative bg-bg2`,children:e.avatar&&H(h,{src:e.avatar,fill:!0,objectFit:`cover`,alt:`avatar`})}),U(`div`,{className:`ml-[12px] flex flex-col`,children:[H(`span`,{className:`text-text2 text-[14px] leading-[14px] max-w-[180px] text-ellipsis overflow-hidden whitespace-nowrap`,children:e.user_name}),H(`span`,{className:`mt-[8px] text-text3 text-[12px] leading-[12px]`,children:H(M,{timestamp:e.created_at})})]})]}),o?H(`div`,{className:`px-[8px] py-[4px] bg-text3/10 rounded-[12px]`,children:H(`span`,{className:`text-text3 text-[12px] leading-[12px]`,children:i(`replyDetail.underReview`)})}):U(`div`,{className:`flex flex-row items-center`,children:[U(`div`,{className:`px-[4px] flex flex-col items-center`,onClick:s,children:[e.like_flag===`1`?H(E,{className:`w-[14px] h-[14px]`}):H(T,{className:`w-[14px] h-[14px] text-text3`}),H(`span`,{className:`mt-[4px] text-text3 text-[12px] leading-[12px]`,children:e.like_cnt===`0`?i(`replyDetail.like`):$(e.like_cnt)})]}),U(`div`,{className:`ml-[12px] px-[4px] flex flex-col items-center`,onClick:c,children:[e.like_flag===`2`?H(k,{className:`w-[14px] h-[14px]`}):H(O,{className:`w-[14px] h-[14px] text-text3`}),H(`span`,{className:`mt-[4px] text-text3 text-[12px] leading-[12px]`,children:e.dislike_cnt===`0`?i(`replyDetail.dislike`):$(e.dislike_cnt)})]})]})]}),U(`div`,{className:`mt-[4px] pl-[50px] flex flex-col`,children:[e.text&&H(j,{className:`text-text1 text-[14px] leading-[22px] break-all`,text:e.text,atUsers:e.at_users}),H(A,{list:e.nine_grid_content_info,disabled:o,hasText:!!e.text,playerId:e.id}),e.parent_reply&&e.parent_reply.text&&U(V,{children:[U(`div`,{className:`mt-[4px] flex flex-row items-center text-[14px] leading-[22px] relative pl-[8px]`,children:[H(`div`,{className:`w-[2px] h-full bg-line1 mr-[8px] absolute left-0 top-0 bottom-0 m-auto`}),U(`span`,{className:`text-theme1`,children:[e.parent_reply.user_name,`:`,e.parent_reply.text&&H(`span`,{className:`text-text1`,children:H(j,{text:e.parent_reply.text,atUsers:e.parent_reply.at_users})})]})]}),H(`div`,{className:`mt-1`,children:H(A,{list:e.parent_reply.nine_grid_content_info,disabled:o,hasText:!!e.parent_reply.text,playerId:e.parent_reply.id})})]}),H(`div`,{className:`mt-[4px] w-[fit-content] h-[30px] px-[12px] text-text1 text-[14px] leading-[22px] flex flex-row items-center bg-bg1 rounded-[15px]`,onClick:l,children:H(`span`,{children:i(`replyDetail.reply`)})})]})]})}function le({comment:e,information:t,contentType:s,visible:l,onClose:u,onReplyComment:d,onReplyAdded:f,onRequireLogin:m}){let h=G(`components.biz.business.comment`),v=z(null),[y,b]=B(()=>P({})),[S,C]=B(!1),{userInfo:w,userId:T}=o(),{followIds:E,setFollowIds:O}=a(),k=w?.userId||w?.user_id||T||``,A=w?.name||w?.nick_name||w?.nickname||w?.user_name||``,j=w?.avatar||w?.avatar_url||``,M=z({commentId:``,userId:``});function N(e){if(!e)return``;if(Array.isArray(e))return String(e[0]||``);if(typeof e==`object`){if(Object.prototype.hasOwnProperty.call(e,`comment_id`))return String(e.comment_id??``);if(Array.isArray(e.data))return String(e.data[0]||``)}return``}L(()=>{l&&(!k||!e.user_id||e.user_id!==`0`&&String(k)!==String(e.user_id)&&(M.current.commentId===e.id&&M.current.userId===k||(M.current={commentId:e.id,userId:k},(async()=>{let t=await p({app_id:0,follower_id:k,followee_ids:[e.user_id]});if(!t.success||!t.data?.is_following_map)return;let n=!!t.data.is_following_map[e.user_id];e.is_follow=n;let r=new Set(E);n?r.add(e.user_id):r.delete(e.user_id),O(Array.from(r))})())))},[e,E,k,O,l]);let F=I(e=>{b(e),setTimeout(()=>{C(!0),v.current?.focus()},10)},[]);function R(){ae(()=>{C(!1)})}async function V({text:e,imageVideoInfoList:t}){let n=e=>e.success?e:(W.error(e.message||h(`replyDetail.publishReplyFailed`)),{...e,toastHandled:!0});if(S){let r=await q({text:e,imageVideoInfoList:t});return C(!1),n(r)}else{let r=await K({text:e,imageVideoInfoList:t});return C(!1),n(r)}}async function K({text:e,imageVideoInfoList:t}){return await d?.({text:e,imageVideoInfoList:t,callback:r=>{let i=Z(e);if(!r||r===`0`)return;let a=P({id:r,user_id:k,user_name:A,avatar:j,text:e,created_at:n(),type:`4`,nine_grid_content_info:t,at_users:i});J?.(a)}})??{success:!0}}async function q({text:e,imageVideoInfoList:a}){if(!y?.id||y.id===`0`)return{success:!1,message:h(`replyDetail.invalidReplyTarget`)};let o=ee(a),l=r(e),u=s===`video`?1:2;try{let r=await c({content_id:t.id,content:i(e),medias:o,mentioned_users:l,parent_id:y.id,source_type:u},{revalidate:!1});if(r.code!==0)return{success:!1,message:r.message||h(`replyDetail.publishReplyFailed`)};let s=N(r.data);if(!s||s===`0`)return{success:!1,message:h(`replyDetail.publishReplyFailed`)};let d=P({id:s,user_id:k,user_name:A,avatar:j,text:e,created_at:n(),type:`4`,nine_grid_content_info:a,at_users:Z(e)});return d.parent_reply=y,J?.(d),f?.(),{success:!0}}catch(e){return console.error(`发布回复回复失败:`,e),{success:!1,message:h(`replyDetail.publishReplyFailed`)}}}let[J,Y]=B(null),X=I(e=>{Y(()=>e)},[]),Q=S?`回复@${y.user_name}`:``;function $(e){e||u()}return H(g,{open:l,onOpenChange:$,children:U(_,{showCloseButton:!1,className:`fixed left-0 right-0 bottom-0 top-[84px] z-[1000] h-auto w-full max-w-none translate-x-0 translate-y-0 rounded-none bg-bg2 p-0 text-text1 !flex !flex-col !gap-0`,children:[U(`div`,{className:`w-full h-[60px] bg-bg1 flex items-center justify-center relative`,children:[H(`button`,{type:`button`,className:`w-[48px] focus-within:outline-none focus-within:border-none focus-within:ring-0 h-full flex items-center justify-center absolute left-0 top-0`,onClick:u,children:H(x,{className:`w-[16px] h-[16px] text-text1`})}),H(`span`,{className:`text-[18px] font-bold`,children:h(`replyDetail.commentDetail`)})]}),U(`div`,{className:`flex-1 min-h-0 w-full overflow-y-auto bg-bg2`,children:[H(re,{comment:e,updateFollow:t=>{e.is_follow=t},onRequireLogin:m}),H(se,{commentId:e.id,informationId:t.id,handleReplyComment:F,onReplyListUpdate:X}),H(D,{placeholder:Q,onInputBlur:R,onPublish:V,onRequireLogin:m,ref:v})]})]})})}export{le as default};
2
+ "use client";import{cn as e}from"../../../../utils/cn.mjs";import{debounceFun as t,getCurrentSecondTime as n,parseTextAtUserIds as r,replaceAtUserElement as i}from"../../../../utils/common.mjs";import{useFollowIdsState as a}from"../../../../store/modules/follow-ids-store.mjs";import{useUserStore as o}from"../../../../store/modules/user-store.mjs";import{gCommunityGetComments as s,pCommunityCreateComment as c,pCommunityDislikeComment as l,pCommunityLikeComment as u,pInteractionFollow as d,pInteractionUnfollow as f}from"../../../../service/generated/client.mjs";import{checkFollowStatus as p}from"../../../../utils/follow-service.mjs";import{Image as m}from"../../../ui/image.mjs";import{Dialog as h,DialogContent as g}from"../../../ui/dialog.mjs";import{InfiniteScroll as _}from"../../../ui/infinite-scroll.mjs";import{useLikeDislike as v}from"../../../../hooks/use-like-dislike.mjs";import{useKeepAliveState as y}from"../../../common/keep-scroll-position/index.mjs";import b from"../../../../assets/icons/close.mjs";import x from"../../../../assets/icons/common/follow_sel.mjs";import S from"../../../../assets/icons/common/follow_user.mjs";import{UnfollowConfirmDialog as C}from"../../../common/follow-button/unfollow-confirm-dialog.mjs";import w from"../../../../assets/icons/detail/give_like.mjs";import T from"../../../../assets/icons/detail/give_like_sel.mjs";import E from"./comment-input.mjs";import D from"../../../../assets/icons/detail/un_like.mjs";import O from"../../../../assets/icons/detail/un_like_sel.mjs";import{CommentMedia as k}from"./comment-media.mjs";import{CommentRichText as A}from"./comment-rich-text.mjs";import{TimeDisplay as j}from"./time-display.mjs";import{CommentItem as M}from"./comment-item.mjs";import{mapApiReplayToReplay as N}from"../../../../types/safe-replay.mjs";import{memo as P,useCallback as F,useEffect as I,useMemo as L,useRef as R,useState as z}from"react";import{Fragment as B,jsx as V,jsxs as H}from"react/jsx-runtime";import{toast as U}from"sonner";import{useTranslations as W}from"next-intl";import{useRouter as G}from"next/navigation";function K(e){if(e==null)return 0;let t=typeof e==`number`?e:Number(e);if(!Number.isNaN(t)&&t>0)return t>0xe8d4a51000?Math.floor(t/1e3):Math.floor(t);let n=Date.parse(String(e));return Number.isNaN(n)?0:Math.floor(n/1e3)}function q(e,t,n){let r=[];return Array.isArray(n)&&n.length>0?(n.forEach(e=>{let t=!!e?.is_video,n=String(e?.media_url||``),i=String(e?.cover_image||``);!n&&!i||r.push({cover_image:i,cover_image_thumbnail:i,cover_image_radio:1,cover_image_resolution:String(e?.cover_image_resolution||``),image_url:t?``:n,image_thumbnail:t?``:n,image_radio:1,image_resolution:String(e?.image_resolution||``),is_video:t,resolution:String(e?.video_resolution||``),video_duration:Number(e?.video_duration||0),video_url:t?n:``,video_size:Number(e?.video_size||0),video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r):(e?.length&&e.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:e,image_thumbnail:e,image_radio:1,image_resolution:``,is_video:!1,resolution:``,video_duration:0,video_url:``,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),t?.length&&t.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:``,image_thumbnail:``,image_radio:1,image_resolution:``,is_video:!0,resolution:``,video_duration:0,video_url:e,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r)}function J(e){let t=X(e.mentioned_users),n=t.length>0?t:Z(e.content||``);return{id:String(e.comment_id??e.id??``),user_name:e.user?.nickname||e.user?.username||``,text:e.content||``,type:`4`,files:[],at_users:n,cover_image:``,nine_grid_content_info:q(e?.images,e?.videos,e?.medias)}}function Y(e,t){let n=e.is_liked?`1`:e.is_dislike?`2`:`0`,r=X(e.mentioned_users),i=r.length>0?r:Z(e.content||``),a=String(e.comment_id??e.id??``),o=typeof e.like_count==`number`?e.like_count:0,s=N({id:a,like_cnt:(e.is_liked&&o===0?1:o).toString(),dislike_cnt:(e.dislike_count||0).toString(),created_at:K(e.create_time),text:e.content||``,type:`4`,like_flag:n,user_id:e.user_id||``,user_name:e.user?.nickname||e.user?.username||``,avatar:e.user?.avatar_url||``,reply_cnt:(e.reply_count||0).toString(),nine_grid_content_info:q(e?.images,e?.videos,e?.medias),at_users:i,parent_reply:void 0});return t&&(s.parent_reply=J(t)),s}function X(e){return Array.isArray(e)?e.map(e=>({user_id:e.user_id||``,name:e.nickname||e.username||``,avatar:e.avatar_url||``,birthday:``,signature:e.signature||``})):[]}function Z(e){if(!e)return[];let t=new Map,n=/<span[^>]*class=['"]mention['"][^>]*data-id=['"]([^'"]+)['"][^>]*>@([^<]*)<\/span>/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]?String(r[1]):``,n=(r[2]?String(r[2]):``).replace(/^@/,``)||e;!e||t.has(e)||t.set(e,{user_id:e,name:n,avatar:``,birthday:``,signature:``})}if(t.size>0)return Array.from(t.values());let i=/<@_user>(\w+)<\/@_user>/g;for(;(r=i.exec(e))!==null;){let e=r[1]?String(r[1]):``;!e||t.has(e)||t.set(e,{user_id:e,name:e,avatar:``,birthday:``,signature:``})}return Array.from(t.values())}function ee(e){return!Array.isArray(e)||e.length===0?[]:e.map(e=>{let t=!!e.is_video,n=t?String(e.video_url||``):String(e.image_url||e.cover_image||``),r=String(e.cover_image||e.image_url||``);return{media_url:n,is_video:t,image_resolution:String(e.image_resolution||``),cover_image:r,cover_image_resolution:String(e.cover_image_resolution||``),video_resolution:String(e.resolution||``),video_duration:Number(e.video_duration||0),video_size:Number(e.video_size||0)}}).filter(e=>!!e.media_url)}function Q(e,t){let n=[];return e.forEach(e=>{n.push(Y(e,t)),e.sub_comments?.length&&n.push(...Q(e.sub_comments,e))}),n}function $(e){let t=Number(e)||0;return t>=1e4?`${(t/1e4).toFixed(1)}w`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}const te=t((e,t,n)=>{try{if(!e?.id)return;u({comment_id:e.id,is_like:e.like_flag!==`1`},{revalidate:!1})}catch(e){console.error(`点赞回复失败:`,e)}},200),ne=t((e,t,n)=>{try{if(!e?.id)return;l({comment_id:e.id,is_dislike:e.like_flag!==`2`},{revalidate:!1})}catch(e){console.error(`点踩回复失败:`,e)}},200),re=P(({comment:e,updateFollow:t,onRequireLogin:n})=>{let{userInfo:r,userId:i,isLogin:a}=o(),s=r?.userId||r?.user_id||i||``;return V(`div`,{className:`w-full bg-bg1`,children:V(M,{comment:e,variant:`light`,isLogin:a,onRequireLogin:n,rightSlot:L(()=>!!s&&String(s)===String(e.user_id||``),[e.user_id,s])?V(B,{}):V(ie,{userId:e.user_id,hasFollow:e.is_follow,onChange:t,onRequireLogin:n}),showReplyButton:!1})})});function ie({userId:t,hasFollow:n=!1,onChange:r,onRequireLogin:i}){let s=W(`components.biz.business.comment`),{isLogin:c,userInfo:l,userId:u}=o(),{followIds:p}=a(),[m,h]=z(n),[g,_]=z(!1),v=l?.userId||l?.user_id||u||``,y=L(()=>!!v&&String(v)===String(t||``),[t,v]),b=L(()=>n||p.includes(t),[p,n,t]);I(()=>{h(b)},[b]);let w=F(async()=>{try{if(!v||!t||t===`0`){U.error(s(`replyDetail.loginRequired`));return}if(m){let e=await f({follower_id:String(v),followee_id:t});if(e.code!==0){U.error(e.message||s(`replyDetail.unfollowFailed`));return}}else{let e=await d({follower_id:String(v),followee_id:t});if(e.code!==0){U.error(e.message||s(`replyDetail.followFailed`));return}}window.sensors?.track(`detail_follow_click`,{object_id:``,action:m?`取消关注`:`关注`,author_id:t}),sessionStorage.setItem(`user_page_refresh`,`1`)}catch(e){console.error(`关注或取消关注失败:`,e),U.error(s(m?`replyDetail.unfollowFailed`:`replyDetail.followFailed`));return}let e=!m;r?.(e),h(e);let{followIds:n,setFollowIds:i}=a.getState(),o=new Set(n);e?o.add(t):o.delete(t),i(Array.from(o))},[t,m,r,v,s]),T=F(()=>{if(!c){i?.();return}if(m){_(!0);return}w()},[w,m,c,i]);function E(){_(!1),w()}function D(){_(!1)}return y||!t||t===`0`?null:H(B,{children:[V(`div`,{className:e(`h-[28px] rounded-[14px] px-[8px] border border-solid cursor-pointer flex items-center justify-center`,m?`border-text3`:`border-theme5`),onClick:T,children:m?H(B,{children:[V(x,{className:`w-[12px] h-[12px] text-text3 shrink-0`}),V(`span`,{className:`text-text3 text-[12px] leading-[18px] ml-[4px] shrink-0`,children:s(`replyDetail.followed`)})]}):H(B,{children:[V(S,{className:`block w-[12px] h-[12px] text-theme5 shrink-0`}),V(`span`,{className:`block text-theme5 text-[12px] leading-[18px] ml-[4px] shrink-0`,children:s(`replyDetail.follow`)})]})}),V(C,{open:g,onOpenChange:_,onCancel:D,onConfirm:E})]})}const ae=t(e=>{e()},0);function oe(e,t,n,r){let i=R(!1);I(()=>{i.current=!1},[r]),I(()=>{let r=e.current;if(!r)return;!i.current&&t>0&&(r.scrollTop=t,i.current=!0);let a=()=>{i.current=!0,n(r.scrollTop)};return r.addEventListener(`scroll`,a,{passive:!0}),()=>r.removeEventListener(`scroll`,a)},[e,n,t,r])}const se=P(({commentId:e,informationId:t,handleReplyComment:n,onReplyListUpdate:r})=>{let i=W(`components.biz.business.comment`),[a,o]=y(`replay-detail-list-${e}`,[]),[c,l]=y(`replay-detail-has-more-${e}`,!0),[u,d]=y(`replay-detail-page-${e}`,1),{getLikedListData:f,getDislikedListData:p}=v(),m=R(!1),h=F(async()=>{if(!(!e||!t)&&!m.current){m.current=!0;try{let n=await s({content_id:t,parent_id:e,page:u,page_size:20,sort_by:`latest`});if(n.code!==0)throw Error(n.message||i(`replyDetail.fetchRepliesFailed`));let r=n.data?.data?.comments??[],a=Q(r);((n.data?.data?.has_more??!1)===!1||r.length<20)&&l(!1),o(e=>{let t=new Set(e.map(e=>e.id)),n=a.filter(e=>!t.has(e.id));return[...e,...n]}),a.length>0&&d(u+1)}catch(e){console.error(`获取回复列表失败:`,e),l(!1)}finally{m.current=!1}}},[e,t,u,o,l,d,i]),g=F(e=>{o(t=>[e,...t])},[o]);I(()=>{r(g)},[r,g]),I(()=>{e&&t&&(o(e=>e.length===0?e:[]),l(e=>e===!0?e:!0),d(e=>e===1?e:1))},[e,t,o,l,d]);let b=F(n=>{o(e=>f(e,n.id)),te(n,t,e)},[e,f,t,o]),x=F(n=>{n.like_flag!==`2`&&U.message(i(`replyDetail.dislikeHint`)),o(e=>p(e,n.id)),ne(n,t,e)},[e,p,t,o,i]),[S,C]=y(`replay-detail-scroll-top-${e}`,0),w=R(null);oe(w,S,C,e),I(()=>{!e||!t||a.length===0&&c&&h()},[e,t,h,a.length,c]);let T=F(async()=>{await h()},[h]);return H(`div`,{ref:w,className:`w-full pb-[66px]`,children:[a.map((e,t)=>V(ce,{replyItem:e,replyComment:n,onLikeReply:b,onDislikeReply:x},`${e.id}-${t}`)),V(_,{loadMore:T,hasMore:c})]})});function ce({replyItem:e,replyComment:t,onLikeReply:n,onDislikeReply:r}){let i=W(`components.biz.business.comment`),a=G(),o=e.status===`0`;function s(){n?.(e)}function c(){r?.(e)}function l(){t(e)}return H(`div`,{className:`p-[16px] flex flex-col`,children:[H(`div`,{className:`flex flex-row justify-between`,children:[H(`button`,{type:`button`,className:`flex flex-row items-center text-left`,onClick:()=>{a.push(`/profile/${e.user_id}`)},children:[V(`div`,{className:`w-[38px] h-[38px] rounded-full overflow-hidden relative bg-bg2`,children:e.avatar&&V(m,{src:e.avatar,fill:!0,objectFit:`cover`,alt:`avatar`})}),H(`div`,{className:`ml-[12px] flex flex-col`,children:[V(`span`,{className:`text-text2 text-[14px] leading-[14px] max-w-[180px] text-ellipsis overflow-hidden whitespace-nowrap`,children:e.user_name}),V(`span`,{className:`mt-[8px] text-text3 text-[12px] leading-[12px]`,children:V(j,{timestamp:e.created_at})})]})]}),o?V(`div`,{className:`px-[8px] py-[4px] bg-text3/10 rounded-[12px]`,children:V(`span`,{className:`text-text3 text-[12px] leading-[12px]`,children:i(`replyDetail.underReview`)})}):H(`div`,{className:`flex flex-row items-center`,children:[H(`div`,{className:`px-[4px] flex flex-col items-center`,onClick:s,children:[e.like_flag===`1`?V(T,{className:`w-[14px] h-[14px]`}):V(w,{className:`w-[14px] h-[14px] text-text3`}),V(`span`,{className:`mt-[4px] text-text3 text-[12px] leading-[12px]`,children:e.like_cnt===`0`?i(`replyDetail.like`):$(e.like_cnt)})]}),H(`div`,{className:`ml-[12px] px-[4px] flex flex-col items-center`,onClick:c,children:[e.like_flag===`2`?V(O,{className:`w-[14px] h-[14px]`}):V(D,{className:`w-[14px] h-[14px] text-text3`}),V(`span`,{className:`mt-[4px] text-text3 text-[12px] leading-[12px]`,children:e.dislike_cnt===`0`?i(`replyDetail.dislike`):$(e.dislike_cnt)})]})]})]}),H(`div`,{className:`mt-[4px] pl-[50px] flex flex-col`,children:[e.text&&V(A,{className:`text-text1 text-[14px] leading-[22px] break-all`,text:e.text,atUsers:e.at_users}),V(k,{list:e.nine_grid_content_info,disabled:o,hasText:!!e.text,playerId:e.id}),e.parent_reply&&e.parent_reply.text&&H(B,{children:[H(`div`,{className:`mt-[4px] flex flex-row items-center text-[14px] leading-[22px] relative pl-[8px]`,children:[V(`div`,{className:`w-[2px] h-full bg-line1 mr-[8px] absolute left-0 top-0 bottom-0 m-auto`}),H(`span`,{className:`text-theme1`,children:[e.parent_reply.user_name,`:`,e.parent_reply.text&&V(`span`,{className:`text-text1`,children:V(A,{text:e.parent_reply.text,atUsers:e.parent_reply.at_users})})]})]}),V(`div`,{className:`mt-1`,children:V(k,{list:e.parent_reply.nine_grid_content_info,disabled:o,hasText:!!e.parent_reply.text,playerId:e.parent_reply.id})})]}),V(`div`,{className:`mt-[4px] w-[fit-content] h-[30px] px-[12px] text-text1 text-[14px] leading-[22px] flex flex-row items-center bg-bg1 rounded-[15px]`,onClick:l,children:V(`span`,{children:i(`replyDetail.reply`)})})]})]})}function le({comment:e,information:t,contentType:s,visible:l,onClose:u,onReplyComment:d,onReplyAdded:f,onRequireLogin:m}){let _=W(`components.biz.business.comment`),v=R(null),[y,x]=z(()=>N({})),[S,C]=z(!1),{userInfo:w,userId:T}=o(),{followIds:D,setFollowIds:O}=a(),k=w?.userId||w?.user_id||T||``,A=w?.name||w?.nick_name||w?.nickname||w?.user_name||``,j=w?.avatar||w?.avatar_url||``,M=R({commentId:``,userId:``});function P(e){if(!e)return``;if(Array.isArray(e))return String(e[0]||``);if(typeof e==`object`){if(Object.prototype.hasOwnProperty.call(e,`comment_id`))return String(e.comment_id??``);if(Array.isArray(e.data))return String(e.data[0]||``)}return``}I(()=>{l&&(!k||!e.user_id||e.user_id!==`0`&&String(k)!==String(e.user_id)&&(M.current.commentId===e.id&&M.current.userId===k||(M.current={commentId:e.id,userId:k},(async()=>{let t=await p({app_id:0,follower_id:k,followee_ids:[e.user_id]});if(!t.success||!t.data?.is_following_map)return;let n=!!t.data.is_following_map[e.user_id];e.is_follow=n;let r=new Set(D);n?r.add(e.user_id):r.delete(e.user_id),O(Array.from(r))})())))},[e,D,k,O,l]);let L=F(e=>{x(e),setTimeout(()=>{C(!0),v.current?.focus()},10)},[]);function B(){ae(()=>{C(!1)})}async function G({text:e,imageVideoInfoList:t}){let n=e=>e.success?e:(U.error(e.message||_(`replyDetail.publishReplyFailed`)),{...e,toastHandled:!0});if(S){let r=await q({text:e,imageVideoInfoList:t});return C(!1),n(r)}else{let r=await K({text:e,imageVideoInfoList:t});return C(!1),n(r)}}async function K({text:e,imageVideoInfoList:t}){return await d?.({text:e,imageVideoInfoList:t,callback:r=>{let i=Z(e);if(!r||r===`0`)return;let a=N({id:r,user_id:k,user_name:A,avatar:j,text:e,created_at:n(),type:`4`,nine_grid_content_info:t,at_users:i});J?.(a)}})??{success:!0}}async function q({text:e,imageVideoInfoList:a}){if(!y?.id||y.id===`0`)return{success:!1,message:_(`replyDetail.invalidReplyTarget`)};let o=ee(a),l=r(e),u=s===`video`?1:2;try{let r=await c({content_id:t.id,content:i(e),medias:o,mentioned_users:l,parent_id:y.id,source_type:u},{revalidate:!1});if(r.code!==0)return{success:!1,message:r.message||_(`replyDetail.publishReplyFailed`)};let s=P(r.data);if(!s||s===`0`)return{success:!1,message:_(`replyDetail.publishReplyFailed`)};let d=N({id:s,user_id:k,user_name:A,avatar:j,text:e,created_at:n(),type:`4`,nine_grid_content_info:a,at_users:Z(e)});return d.parent_reply=y,J?.(d),f?.(),{success:!0}}catch(e){return console.error(`发布回复回复失败:`,e),{success:!1,message:_(`replyDetail.publishReplyFailed`)}}}let[J,Y]=z(null),X=F(e=>{Y(()=>e)},[]),Q=S?`回复@${y.user_name}`:``;function $(e){e||u()}return V(h,{open:l,onOpenChange:$,children:H(g,{showCloseButton:!1,className:`fixed left-0 right-0 bottom-0 top-[84px] z-[1000] h-auto w-full max-w-none translate-x-0 translate-y-0 rounded-none bg-bg2 p-0 text-text1 !flex !flex-col !gap-0`,children:[H(`div`,{className:`w-full h-[60px] bg-bg1 flex items-center justify-center relative`,children:[V(`button`,{type:`button`,className:`w-[48px] focus-within:outline-none focus-within:border-none focus-within:ring-0 h-full flex items-center justify-center absolute left-0 top-0`,onClick:u,children:V(b,{className:`w-[16px] h-[16px] text-text1`})}),V(`span`,{className:`text-[18px] font-bold`,children:_(`replyDetail.commentDetail`)})]}),H(`div`,{className:`flex-1 min-h-0 w-full overflow-y-auto bg-bg2`,children:[V(re,{comment:e,updateFollow:t=>{e.is_follow=t},onRequireLogin:m}),V(se,{commentId:e.id,informationId:t.id,handleReplyComment:L,onReplyListUpdate:X}),V(E,{placeholder:Q,onInputBlur:B,onPublish:G,onRequireLogin:m,ref:v})]})]})})}export{le as default};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{pCommunityMoveCollectionContent as t}from"../../../../../service/generated/client.mjs";import{Box as n}from"../../../../ui/box.mjs";import{Text as r}from"../../../../ui/text.mjs";import{useLoginModalStore as i}from"../../../../../store/modules/login-modal-store.mjs";import{useDeleteRequest as a}from"../../../../../hooks/query/use-query.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 l from"../../../../common/share-popup/share-popup.mjs";import{useContentOperate as u}from"../../../../../hooks/use-content-operate.mjs";import d from"../../../../../assets/icons/detail/check-ok.mjs";import f from"../../../../../assets/icons/detail/collect_nor.mjs";import p from"../../../../../assets/icons/detail/collect_sel.mjs";import ee from"../../../../../assets/icons/detail/give_like.mjs";import m from"../../../../../assets/icons/detail/give_like_sel.mjs";import te from"../../../../../assets/icons/detail/share.mjs";import{useCallback as h,useEffect 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{usePathname as C,useSearchParams as w}from"next/navigation";import{useTranslations as ne}from"next-intl";function T({mode:T=`renderer`,information:O,onUpdate:k}){let A=T===`editor`||!O?.id||O.id.startsWith(`preview-`),j=`${C()}?${w()?.toString()||``}`,M=v(j),N=ne(`components.biz.business.detail`),[P,F]=y(!1),[I,L]=y(!1),R=v(0),z=e(e=>e.userId),B=e(e=>e.isLogin),V=a();g(()=>{M.current!==j&&(l.clear(),M.current=j)},[j]),g(()=>()=>{l.clear()},[]);let H=h(()=>{z&&(V([`user-profile`,`mine`,z,`user-like-video`]),V([`user-profile`,`mine`,z,`user-like-post`]),V([`user-profile`,`mine`,z,`user-collect-video`,z]),V([`user-profile`,`mine`,z,`user-collect-post`,z]))},[V,z]),{likeAnimation:U,handleLikeOperate:W,handleDefaultCollectionOperate:G,handleShareOperate:K}=u({id:O.id,isLike:O.like||!1,isDislike:O.dislike||!1,isCollect:O.collect||!1,likeCnt:D(O.static?.like_cnt),dislikeCnt:D(O.static?.dislike_cnt),contentType:1,prefetchDefaultCollection:!A,animationClasses:{like:s.likeShakeAnimation,dislike:s.dislikeShakeAnimation}}),q=h(e=>{k?.({...e})},[k]),J=h(async()=>{if(P)return;if(!B){i.getState().open();return}let e=Date.now();if(e-R.current<300)return;R.current=e,F(!0);let t=O.like||!1,n=O.dislike||!1,r=D(O.static?.like_cnt),a=D(O.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;q({like:o,dislike:c,static:{...O.static,like_cnt:s,dislike_cnt:l}});try{let e=await W();if(!e){q({like:t,dislike:n,static:{...O.static,like_cnt:r,dislike_cnt:a}});return}q({like:e.isLike,dislike:e.isDislike??c,static:{...O.static,like_cnt:e.likeCnt,dislike_cnt:e.dislikeCnt??l}}),H(),window.sensors?.track?.(`detail_like_click`,{object_id:O.id,action:e.isLike?`点赞`:`取消点赞`,like_count:e.likeCnt})}catch(e){console.error(`点赞操作失败:`,e),S.error(N(`detailOperate.operateFailed`))}finally{F(!1)}},[W,O,H,P,B,N,q]),Y=_(()=>O.id,[O.id]),X=h(()=>{K(({isCollect:e})=>{q({collect:e})},Y)},[K,Y,q]),Z=h(()=>{c.show({mode:`select`,onCollect:async e=>{try{let n=await t({new_collection_id:e,content_id:O.id});if(n.code!==0)throw Error(n.message||N(`detailOperate.collectFailed`));q({collect:!0}),H(),S.success(N(`detailOperate.modifyCollectionSuccess`))}catch(e){console.error(`修改收藏夹失败:`,e),S.error(N(`detailOperate.collectFailed`))}}})},[O.id,H,N,q]),Q=h(e=>{let t=e||N(`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(d,{className:`w-[14px] h-[14px]`})}),x(`div`,{className:`flex items-center gap-[6px]`,children:[b(`span`,{className:`text-[14px] leading-[20px]`,children:N(`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),Z()},children:N(`detailOperate.modifyCollection`)})]}))},[Z,N]),$=h(async()=>{if(I)return;if(!B){i.getState().open();return}let e=O.collect||!1;L(!0),window.sensors?.track?.(`detail_fav_click`,{object_id:O.id,action:e?`取消收藏`:`收藏`});try{let t=await G({currentCollect:e,onUpdate:({isCollect:e})=>{q({collect:e})}});if(!t?.success){S.error(t?.message||N(`detailOperate.collectFailed`));return}H(),window.sensors?.track?.(`detail_fav_click`,{object_id:O.id,action:t.isCollect?`收藏`:`取消收藏`}),!e&&t.isCollect&&Q(t.collectionTitle),e&&t.isCollect===!1&&S.success(N(`detailOperate.uncollectSuccess`))}catch(e){console.error(`收藏操作失败:`,e),S.error(e?.message||N(`detailOperate.collectFailed`))}finally{L(!1)}},[G,O.collect,O.id,H,I,B,Q,N,q]),re=_(()=>o($,300),[$]);return x(n,{className:`w-full h-[42px] mt-[16px] flex items-center justify-between ${A?`pointer-events-none`:``}`,children:[x(n,{className:`w-[25%] h-full flex flex-col items-center justify-center ${P?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:J,children:[O.like?b(m,{className:`w-[20px] h-[20px] ${U.animationClass}`}):b(ee,{className:`w-[20px] h-[20px] text-text2`}),b(r,{className:`text-[12px] text-text2 leading-[20px]`,children:O.static?O.static.like_cnt===0?N(`detailOperate.like`):E(O.static?.like_cnt):N(`detailOperate.like`)})]}),x(n,{className:`w-[25%] h-full flex flex-col items-center justify-center ${I?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:re,children:[O.collect?b(p,{className:`w-[20px] h-[20px]`}):b(f,{className:`w-[20px] h-[20px] text-text2`}),b(r,{className:`text-[12px] text-text2 leading-[20px]`,children:N(`detailOperate.collection`)})]}),x(n,{className:`w-[25%] h-full flex flex-col items-center justify-center cursor-pointer`,onClick:X,children:[b(te,{className:`w-[20px] h-[20px] text-text2`}),b(r,{className:`text-[12px] text-text2 leading-[20px]`,children:N(`detailOperate.share`)})]})]})}function E(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 D(e){if(e==null)return 0;if(typeof e==`number`)return e;let t=Number(e);return Number.isNaN(t)?0:t}export{T as DetailOperate};
2
+ "use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{pCommunityMoveCollectionContent as t}from"../../../../../service/generated/client.mjs";import{Box as n}from"../../../../ui/box.mjs";import{Text as r}from"../../../../ui/text.mjs";import{useLoginModalStore as i}from"../../../../../store/modules/login-modal-store.mjs";import{useDeleteRequest as a}from"../../../../../hooks/query/use-query.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 l from"../../../../common/share-popup/share-popup.mjs";import{useContentOperate as u}from"../../../../../hooks/use-content-operate.mjs";import d from"../../../../../assets/icons/detail/check-ok.mjs";import f from"../../../../../assets/icons/detail/collect_nor.mjs";import p from"../../../../../assets/icons/detail/collect_sel.mjs";import ee from"../../../../../assets/icons/detail/give_like.mjs";import m from"../../../../../assets/icons/detail/give_like_sel.mjs";import te from"../../../../../assets/icons/detail/share.mjs";import{useCallback as h,useEffect 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";import{usePathname as w,useSearchParams as ne}from"next/navigation";function T({mode:T=`renderer`,information:O,onUpdate:k}){let A=T===`editor`||!O?.id||O.id.startsWith(`preview-`),j=`${w()}?${ne()?.toString()||``}`,M=v(j),N=C(`components.biz.business.detail`),[P,F]=y(!1),[I,L]=y(!1),R=v(0),z=e(e=>e.userId),B=e(e=>e.isLogin),V=a();g(()=>{M.current!==j&&(l.clear(),M.current=j)},[j]),g(()=>()=>{l.clear()},[]);let H=h(()=>{z&&(V([`user-profile`,`mine`,z,`user-like-video`]),V([`user-profile`,`mine`,z,`user-like-post`]),V([`user-profile`,`mine`,z,`user-collect-video`,z]),V([`user-profile`,`mine`,z,`user-collect-post`,z]))},[V,z]),{likeAnimation:U,handleLikeOperate:W,handleDefaultCollectionOperate:G,handleShareOperate:K}=u({id:O.id,isLike:O.like||!1,isDislike:O.dislike||!1,isCollect:O.collect||!1,likeCnt:D(O.static?.like_cnt),dislikeCnt:D(O.static?.dislike_cnt),contentType:1,prefetchDefaultCollection:!A,animationClasses:{like:s.likeShakeAnimation,dislike:s.dislikeShakeAnimation}}),q=h(e=>{k?.({...e})},[k]),J=h(async()=>{if(P)return;if(!B){i.getState().open();return}let e=Date.now();if(e-R.current<300)return;R.current=e,F(!0);let t=O.like||!1,n=O.dislike||!1,r=D(O.static?.like_cnt),a=D(O.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;q({like:o,dislike:c,static:{...O.static,like_cnt:s,dislike_cnt:l}});try{let e=await W();if(!e){q({like:t,dislike:n,static:{...O.static,like_cnt:r,dislike_cnt:a}});return}q({like:e.isLike,dislike:e.isDislike??c,static:{...O.static,like_cnt:e.likeCnt,dislike_cnt:e.dislikeCnt??l}}),H(),window.sensors?.track?.(`detail_like_click`,{object_id:O.id,action:e.isLike?`点赞`:`取消点赞`,like_count:e.likeCnt})}catch(e){console.error(`点赞操作失败:`,e),S.error(N(`detailOperate.operateFailed`))}finally{F(!1)}},[W,O,H,P,B,N,q]),Y=_(()=>O.id,[O.id]),X=h(()=>{K(({isCollect:e})=>{q({collect:e})},Y)},[K,Y,q]),Z=h(()=>{c.show({mode:`select`,onCollect:async e=>{try{let n=await t({new_collection_id:e,content_id:O.id});if(n.code!==0)throw Error(n.message||N(`detailOperate.collectFailed`));q({collect:!0}),H(),S.success(N(`detailOperate.modifyCollectionSuccess`))}catch(e){console.error(`修改收藏夹失败:`,e),S.error(N(`detailOperate.collectFailed`))}}})},[O.id,H,N,q]),Q=h(e=>{let t=e||N(`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(d,{className:`w-[14px] h-[14px]`})}),x(`div`,{className:`flex items-center gap-[6px]`,children:[b(`span`,{className:`text-[14px] leading-[20px]`,children:N(`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),Z()},children:N(`detailOperate.modifyCollection`)})]}))},[Z,N]),$=h(async()=>{if(I)return;if(!B){i.getState().open();return}let e=O.collect||!1;L(!0),window.sensors?.track?.(`detail_fav_click`,{object_id:O.id,action:e?`取消收藏`:`收藏`});try{let t=await G({currentCollect:e,onUpdate:({isCollect:e})=>{q({collect:e})}});if(!t?.success){S.error(t?.message||N(`detailOperate.collectFailed`));return}H(),window.sensors?.track?.(`detail_fav_click`,{object_id:O.id,action:t.isCollect?`收藏`:`取消收藏`}),!e&&t.isCollect&&Q(t.collectionTitle),e&&t.isCollect===!1&&S.success(N(`detailOperate.uncollectSuccess`))}catch(e){console.error(`收藏操作失败:`,e),S.error(e?.message||N(`detailOperate.collectFailed`))}finally{L(!1)}},[G,O.collect,O.id,H,I,B,Q,N,q]),re=_(()=>o($,300),[$]);return x(n,{className:`w-full h-[42px] mt-[16px] flex items-center justify-between ${A?`pointer-events-none`:``}`,children:[x(n,{className:`w-[25%] h-full flex flex-col items-center justify-center ${P?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:J,children:[O.like?b(m,{className:`w-[20px] h-[20px] ${U.animationClass}`}):b(ee,{className:`w-[20px] h-[20px] text-text2`}),b(r,{className:`text-[12px] text-text2 leading-[20px]`,children:O.static?O.static.like_cnt===0?N(`detailOperate.like`):E(O.static?.like_cnt):N(`detailOperate.like`)})]}),x(n,{className:`w-[25%] h-full flex flex-col items-center justify-center ${I?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:re,children:[O.collect?b(p,{className:`w-[20px] h-[20px]`}):b(f,{className:`w-[20px] h-[20px] text-text2`}),b(r,{className:`text-[12px] text-text2 leading-[20px]`,children:N(`detailOperate.collection`)})]}),x(n,{className:`w-[25%] h-full flex flex-col items-center justify-center cursor-pointer`,onClick:X,children:[b(te,{className:`w-[20px] h-[20px] text-text2`}),b(r,{className:`text-[12px] text-text2 leading-[20px]`,children:N(`detailOperate.share`)})]})]})}function E(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 D(e){if(e==null)return 0;if(typeof e==`number`)return e;let t=Number(e);return Number.isNaN(t)?0:t}export{T as DetailOperate};
@@ -2,12 +2,6 @@
2
2
  import { VideoDetailPlayerClient } from "../video-detail-player/client.mjs";
3
3
  import { VideoDetailPlayer } from "../video-detail-player/server.mjs";
4
4
  import "../video-detail-player/index.mjs";
5
- import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
6
- import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
7
- import { MaterialMap } from "../../../../../utils/schema/utils.mjs";
8
- import { VideoDetailPlayerBridgeOnlyClient } from "../video-detail-player-bridge-only/client.mjs";
9
- import { VideoDetailPlayerBridgeOnly } from "../video-detail-player-bridge-only/server.mjs";
10
- import "../video-detail-player-bridge-only/index.mjs";
11
5
  import { VideoDetailInfoClient } from "../video-detail-info/client.mjs";
12
6
  import { VideoDetailInfo } from "../video-detail-info/server.mjs";
13
7
  import "../video-detail-info/index.mjs";
@@ -20,6 +14,9 @@ import "../video-detail-actions/index.mjs";
20
14
  import { VideoDetailRecommendClient } from "../video-detail-recommend/client.mjs";
21
15
  import { VideoDetailRecommend } from "../video-detail-recommend/server.mjs";
22
16
  import "../video-detail-recommend/index.mjs";
17
+ import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
18
+ import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
19
+ import { MaterialMap } from "../../../../../utils/schema/utils.mjs";
23
20
  import "../../../../../utils.mjs";
24
21
  import z$1 from "zod";
25
22
 
@@ -29,12 +26,7 @@ declare const videoDetailMaterials: MaterialMap<readonly [DefineMaterialOption<t
29
26
  renderer: "renderer";
30
27
  editor: "editor";
31
28
  }>>;
32
- }, z$1.core.$strip>, "video-detail-player", "视频模块">, DefineMaterialOption<typeof VideoDetailPlayerBridgeOnly, typeof VideoDetailPlayerBridgeOnlyClient, z$1.ZodObject<{
33
- mode: z$1.ZodOptional<z$1.ZodEnum<{
34
- renderer: "renderer";
35
- editor: "editor";
36
- }>>;
37
- }, z$1.core.$strip>, "video-detail-player-bridge-only", "视频模块">, DefineMaterialOption<typeof VideoDetailInfo, typeof VideoDetailInfoClient, z$1.ZodObject<{
29
+ }, z$1.core.$strip>, "video-detail-player", "视频模块">, DefineMaterialOption<typeof VideoDetailInfo, typeof VideoDetailInfoClient, z$1.ZodObject<{
38
30
  showTags: z$1.ZodBoolean & SchemaHasDefaultValue;
39
31
  showEpisodes: z$1.ZodBoolean & SchemaHasDefaultValue;
40
32
  mode: z$1.ZodOptional<z$1.ZodEnum<{
@@ -1,2 +1,2 @@
1
1
 
2
- import{getSchemaDefaultProps as e}from"../../../../../utils/schema/schema.mjs";import{generateMaterialMap as t}from"../../../../../utils/schema/utils.mjs";import{videoDetailInfoMaterial as n}from"../video-detail-info/material.mjs";import{videoDetailInfoTitleTagsEpisodesMaterial as r}from"../video-detail-info-title-tags-episodes/material.mjs";import{videoDetailPlayerMaterial as i}from"../video-detail-player/material.mjs";import{videoDetailPlayerBridgeOnlyMaterial as a}from"../video-detail-player-bridge-only/material.mjs";import{videoDetailRecommendMaterial as o}from"../video-detail-recommend/material.mjs";import{videoDetailActionsMaterial as s}from"../video-detail-actions/material.mjs";function c(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>typeof t==`number`&&Number.isFinite(t)?[e,String(t)]:[e,t]))}function l(t,n){let r={...e(t.propsSchema),...n??{}},i=t.propsSchema.safeParse(r);if(i.success)return{isValid:!0,props:i.data};let a=c(r),o=t.propsSchema.safeParse(a);return o.success?{isValid:!0,props:o.data}:{isValid:!1,props:r}}const u=t([i,a,n,r,s,o]);export{l as resolveMaterialProps,u as videoDetailMaterials};
2
+ import{getSchemaDefaultProps as e}from"../../../../../utils/schema/schema.mjs";import{generateMaterialMap as t}from"../../../../../utils/schema/utils.mjs";import{videoDetailInfoMaterial as n}from"../video-detail-info/material.mjs";import{videoDetailInfoTitleTagsEpisodesMaterial as r}from"../video-detail-info-title-tags-episodes/material.mjs";import{videoDetailPlayerMaterial as i}from"../video-detail-player/material.mjs";import{videoDetailRecommendMaterial as a}from"../video-detail-recommend/material.mjs";import{videoDetailActionsMaterial as o}from"../video-detail-actions/material.mjs";function s(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>typeof t==`number`&&Number.isFinite(t)?[e,String(t)]:[e,t]))}function c(t,n){let r={...e(t.propsSchema),...n??{}},i=t.propsSchema.safeParse(r);if(i.success)return{isValid:!0,props:i.data};let a=s(r),o=t.propsSchema.safeParse(a);return o.success?{isValid:!0,props:o.data}:{isValid:!1,props:r}}const l=t([i,n,r,o,a]);export{c as resolveMaterialProps,l as videoDetailMaterials};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{gContentGetVideoDetail as e}from"../../../../../service/generated/client.mjs";import{useRouter as t}from"../../../../../utils/use-compatible-router.mjs";import{notifyBridgeEpisodeChanged as n}from"../../../../../utils/login-modal-bridge.mjs";import{useRequest as r}from"../../../../../hooks/query/use-query.mjs";import{useKeepAliveState as i}from"../../../../common/keep-scroll-position/index.mjs";import{createContext as a,use as o,useCallback as s,useEffect as c,useMemo as l}from"react";import{jsx as u}from"react/jsx-runtime";import{useParams as d}from"next/navigation";const f=a(void 0),p=`funhub:video-detail-episode-sync`;function m(e,t){let n=String(e||``).split(`/`).filter(Boolean),r=n.findIndex(e=>e===`video`||e===`webview`);return r<0?!1:n[r+1]===t}function h(e){let t=Math.floor(Number(e)||1);return t>0?t:1}function g(e){typeof window>`u`||window.dispatchEvent(new CustomEvent(p,{detail:e}))}function _(e){return e.type===p&&e instanceof CustomEvent}function v(e,t){if(!(!e&&!t))return{information:e?.information??t?.information,currentSeriesNum:e?.currentSeriesNum??t?.currentSeriesNum,onEpisodeChange:e?.onEpisodeChange??t?.onEpisodeChange,onUpdateInformation:e?.onUpdateInformation??t?.onUpdateInformation,detailId:e?.detailId??t?.detailId,episodeIndex:e?.episodeIndex??t?.episodeIndex,resumeProgressSeconds:e?.resumeProgressSeconds??t?.resumeProgressSeconds,isShow:e?.isShow??t?.isShow,isWebView:e?.isWebView??t?.isWebView,isInformationLoading:e?.isInformationLoading??t?.isInformationLoading,isInformationResolved:e?.isInformationResolved??t?.isInformationResolved}}function y({value:e,children:t}){let n=o(f);return u(f,{value:l(()=>v(n,e)??e,[n,e]),children:t})}function b(){let e=o(f),t=x({enabled:e===void 0||e.onEpisodeChange===void 0||e.detailId===void 0||e.currentSeriesNum===void 0||e.episodeIndex===void 0||e.isInformationLoading===void 0||e.isInformationResolved===void 0,shouldRequestInformation:!e?.information});return l(()=>{let n=v(e,t);return n&&(e&&t&&e.onEpisodeChange===void 0?{...n,currentSeriesNum:t.currentSeriesNum??n.currentSeriesNum,episodeIndex:t.episodeIndex??n.episodeIndex,onEpisodeChange:t.onEpisodeChange??n.onEpisodeChange}:n)},[e,t])}function x(a){let{enabled:o,shouldRequestInformation:u}=a,f=d(),v=t(),y=f.level,b=Array.isArray(y)?y:typeof y==`string`?[y]:[],x=b[0]||``,S=b.findIndex(e=>e===`episode`),C=S>=0?b[S+1]:b[2],w=Math.max(1,Number(C)||1),[T,E]=i(`video-detail-material-series-num-${x}`,w);c(()=>{E(w)},[w,E]),c(()=>{if(!x||typeof window>`u`)return;let e=e=>{if(!_(e))return;let t=e.detail;if(!t||t.detailId!==x)return;let n=h(t.seriesNum);E(e=>e===n?e:n)};return window.addEventListener(p,e),()=>{window.removeEventListener(p,e)}},[x,E]);let D=s(e=>{if(!x)return;let t=h(e);E(t),g({detailId:x,seriesNum:t})},[x,E]),O=Math.max(1,Number(T)||1),k=Math.max(0,O-1),A=b[1]||``,j=typeof window<`u`&&window.isWebView===!0,{data:M,isPending:N,isFetching:P,isError:F,isSuccess:I}=r([`video-detail-material-fallback`,x],async()=>x?await e({id:x}):null,{enabled:o&&u&&!!x}),L=l(()=>{let e=M?.data?.video;if(!(!e||typeof e!=`object`))return{...e,content_type:1,episode_cnt:e.links?.length||0}},[M?.data?.video]),R=s(e=>{let t=Math.max(1,Math.floor(Number(e)||1));if(!x||typeof window>`u`)return;let r=`/video/${x}/${encodeURIComponent(A)}/episode/${t}`,{search:i,hash:a,pathname:o}=window.location,s=`${o}${i}${a}`,c=`${r}${i}${a}`,l=m(o,x);if(s!==c){j&&n({detailId:x,seriesNum:t,nextPath:r}),l&&typeof window.history?.replaceState==`function`?(window.history.replaceState(window.history.state,``,c),D(t)):v.replace(c,{scroll:!1});return}O!==t&&D(t)},[O,x,j,A,v,D]);if(o)return{information:L,currentSeriesNum:O,onEpisodeChange:R,detailId:x,episodeIndex:k,resumeProgressSeconds:0,isShow:!0,isWebView:j,isInformationLoading:u?!!x&&!L&&(N||P):!1,isInformationResolved:!x||!!L||!u||F||I}}export{y as VideoDetailMaterialRuntimeProvider,b as useVideoDetailMaterialRuntimeContext};
2
+ "use client";import{gContentGetVideoDetail as e}from"../../../../../service/generated/client.mjs";import{notifyBridgeEpisodeChanged as t}from"../../../../../utils/login-modal-bridge.mjs";import{useRequest as n}from"../../../../../hooks/query/use-query.mjs";import{useKeepAliveState as r}from"../../../../common/keep-scroll-position/index.mjs";import{createContext as i,use as a,useCallback as o,useEffect as s,useMemo as c}from"react";import{jsx as l}from"react/jsx-runtime";import{useParams as u,useRouter as d}from"next/navigation";const f=i(void 0),p=`funhub:video-detail-episode-sync`;function m(e,t){let n=String(e||``).split(`/`).filter(Boolean),r=n.findIndex(e=>e===`video`||e===`webview`);return r<0?!1:n[r+1]===t}function h(e){let t=Math.floor(Number(e)||1);return t>0?t:1}function g(e){typeof window>`u`||window.dispatchEvent(new CustomEvent(p,{detail:e}))}function _(e){return e.type===p&&e instanceof CustomEvent}function v(e,t){if(!(!e&&!t))return{information:e?.information??t?.information,currentSeriesNum:e?.currentSeriesNum??t?.currentSeriesNum,onEpisodeChange:e?.onEpisodeChange??t?.onEpisodeChange,onUpdateInformation:e?.onUpdateInformation??t?.onUpdateInformation,detailId:e?.detailId??t?.detailId,episodeIndex:e?.episodeIndex??t?.episodeIndex,resumeProgressSeconds:e?.resumeProgressSeconds??t?.resumeProgressSeconds,isShow:e?.isShow??t?.isShow,isWebView:e?.isWebView??t?.isWebView,isInformationLoading:e?.isInformationLoading??t?.isInformationLoading,isInformationResolved:e?.isInformationResolved??t?.isInformationResolved}}function y({value:e,children:t}){let n=a(f);return l(f,{value:c(()=>v(n,e)??e,[n,e]),children:t})}function b(){let e=a(f),t=x({enabled:e===void 0||e.onEpisodeChange===void 0||e.detailId===void 0||e.currentSeriesNum===void 0||e.episodeIndex===void 0||e.isInformationLoading===void 0||e.isInformationResolved===void 0,shouldRequestInformation:!e?.information});return c(()=>{let n=v(e,t);return n&&(e&&t&&e.onEpisodeChange===void 0?{...n,currentSeriesNum:t.currentSeriesNum??n.currentSeriesNum,episodeIndex:t.episodeIndex??n.episodeIndex,onEpisodeChange:t.onEpisodeChange??n.onEpisodeChange}:n)},[e,t])}function x(i){let{enabled:a,shouldRequestInformation:l}=i,f=u(),v=d(),y=f.level,b=Array.isArray(y)?y:typeof y==`string`?[y]:[],x=b[0]||``,S=b.findIndex(e=>e===`episode`),C=S>=0?b[S+1]:b[2],w=Math.max(1,Number(C)||1),[T,E]=r(`video-detail-material-series-num-${x}`,w);s(()=>{E(w)},[w,E]),s(()=>{if(!x||typeof window>`u`)return;let e=e=>{if(!_(e))return;let t=e.detail;if(!t||t.detailId!==x)return;let n=h(t.seriesNum);E(e=>e===n?e:n)};return window.addEventListener(p,e),()=>{window.removeEventListener(p,e)}},[x,E]);let D=o(e=>{if(!x)return;let t=h(e);E(t),g({detailId:x,seriesNum:t})},[x,E]),O=Math.max(1,Number(T)||1),k=Math.max(0,O-1),A=b[1]||``,j=typeof window<`u`&&(window.isWebView===!0||window.isWebview===!0),{data:M,isPending:N,isFetching:P,isError:F,isSuccess:I}=n([`video-detail-material-fallback`,x],async()=>x?await e({id:x}):null,{enabled:a&&l&&!!x}),L=c(()=>{let e=M?.data?.video;if(!(!e||typeof e!=`object`))return{...e,content_type:1,episode_cnt:e.links?.length||0}},[M?.data?.video]),R=o(e=>{let n=Math.max(1,Math.floor(Number(e)||1));if(!x||typeof window>`u`)return;let r=`${j?`/webview`:`/video`}/${x}/${encodeURIComponent(A)}/episode/${n}`,{search:i,hash:a,pathname:o}=window.location,s=`${o}${i}${a}`,c=`${r}${i}${a}`,l=m(o,x);if(s!==c){j&&t({detailId:x,seriesNum:n,nextPath:r}),l&&typeof window.history?.replaceState==`function`?(window.history.replaceState(window.history.state,``,c),D(n)):v.replace(c,{scroll:!1});return}O!==n&&D(n)},[O,x,j,A,v,D]);if(a)return{information:L,currentSeriesNum:O,onEpisodeChange:R,detailId:x,episodeIndex:k,resumeProgressSeconds:0,isShow:!0,isWebView:j,isInformationLoading:l?!!x&&!L&&(N||P):!1,isInformationResolved:!x||!!L||!l||F||I}}export{y as VideoDetailMaterialRuntimeProvider,b as useVideoDetailMaterialRuntimeContext};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import e from"../../../../../utils/get-res-url.mjs";import{decryptImageToUint8Array as t}from"../../../../../utils/decrypt-image-client.mjs";import{pInteractionBrowse as n}from"../../../../../service/generated/client.mjs";import{uint8ArrayToBase64 as r}from"../../../../../utils/uint8.mjs";import{batchQueryContentInteractions as i}from"../../../../../hooks/use-content-operate.mjs";import{useCallback as a,useEffect as o,useMemo as s}from"react";function c(e){let t=String(e||``).split(`/`).filter(Boolean),n=t.findIndex(e=>e===`video`||e===`webview`);if(n<0)return``;try{return decodeURIComponent(t[n+1]||``)}catch{return t[n+1]||``}}function l(l){let{enabled:u=!0,detailId:d=``,information:f,episodeIndex:p=0,currentSeriesNum:m=1}=l,h=s(()=>String(d||f?.id||``).trim()||(typeof window<`u`?c(window.location.pathname):``),[d,f?.id]),g=a(()=>{let t=f?.links?.[p]?.m3u8_url||``,n=process.env.NEXT_PUBLIC_API_BASE||(typeof window<`u`?window.location.origin:``),r=t?`${e()}/m3f/${t}`:``,i=t&&n?`${n}/api/content/processM3u8?url=${encodeURIComponent(r)}`:``,a=f?.name||``;return{posterUrl:f?.img_y||f?.img_x||f?.preview_images?.[0]||``,src:i,title:a}},[p,f]),_=a(async()=>{let{src:e,title:n,posterUrl:i}=g(),a=``;if(i)try{let e=await t(i);e&&(a=r(e.bytes))}catch(e){console.warn(`[webview bridge] getVideoInfoAsync poster failed:`,e)}return{poster:a,src:e,title:n}},[g]),v=a(async()=>{if(!h)return null;let e=await i([h],1);return e?.interaction_list?.[0]?e.interaction_list[0].browse_record:null},[h]),y=a(async e=>{if(!h)return;let t=e.browse_episode||m,r=Date.now(),i=String(e.browse_key||r);try{await n({app_id:0,content_type:1,content_id:h,browse_duration:Number(e.browse_duration||0),browse_episode:String(t),browse_key:i,browse_page_ts:r})}catch(e){console.error(`上报播放进度失败:`,e)}},[m,h]);o(()=>{if(!u||typeof window>`u`)return;let e=window;return e.__funhubWebViewBridgeReady=!0,e.__funhubWebViewBridgeDetailId=h,e.video=h?{[h]:f}:{},e.getVideoInfo=g,e.getVideoInfoAsync=_,e.getVideoBrowseRecordAsync=v,e.reportVideoBrowse=y,window.dispatchEvent(new CustomEvent(`funhub:webview-bridge-ready`,{detail:{detailId:h}})),()=>{e.getVideoInfoAsync===_&&delete e.getVideoInfoAsync,e.getVideoInfo===g&&delete e.getVideoInfo,e.getVideoBrowseRecordAsync===v&&delete e.getVideoBrowseRecordAsync,e.reportVideoBrowse===y&&delete e.reportVideoBrowse}},[g,v,_,u,f,y,h])}export{l as useVideoDetailWebViewBridge};
2
+ "use client";import e from"../../../../../utils/get-res-url.mjs";import{decryptImageToUint8Array as t}from"../../../../../utils/decrypt-image-client.mjs";import{pInteractionBrowse as n}from"../../../../../service/generated/client.mjs";import{uint8ArrayToBase64 as r}from"../../../../../utils/uint8.mjs";import{batchQueryContentInteractions as i}from"../../../../../hooks/use-content-operate.mjs";import{useCallback as a,useEffect as o,useMemo as s}from"react";function c(c){let{enabled:l=!0,detailId:u=``,information:d,episodeIndex:f=0,currentSeriesNum:p=1}=c,m=s(()=>String(u||d?.id||``).trim(),[u,d?.id]),h=a(async()=>{let n=d?.links?.[f]?.m3u8_url||``,i=n?`${process.env.NEXT_PUBLIC_API_BASE}/api/content/processM3u8?url=${encodeURIComponent(`${e()}/m3f/${n}`)}`:``,a=d?.img_y||d?.img_x||d?.preview_images?.[0]||``,o=``,s=await t(a);return s&&(o=r(s.bytes)),{poster:o,src:i,title:d?.name||``}},[f,d]),g=a(async()=>{if(!m)return null;let e=await i([m],1);return e?.interaction_list?.[0]?e.interaction_list[0].browse_record:null},[m]),_=a(async e=>{if(!m)return;let t=e.browse_episode||p,r=Date.now(),i=String(e.browse_key||r);try{await n({app_id:0,content_type:1,content_id:m,browse_duration:Number(e.browse_duration||0),browse_episode:String(t),browse_key:i,browse_page_ts:r})}catch(e){console.error(`上报播放进度失败:`,e)}},[p,m]);o(()=>{if(!l||typeof window>`u`)return;let e=window;return e.video=m?{[m]:d}:{},e.getVideoInfoAsync=h,e.getVideoBrowseRecordAsync=g,e.reportVideoBrowse=_,()=>{e.getVideoInfoAsync===h&&delete e.getVideoInfoAsync,e.getVideoBrowseRecordAsync===g&&delete e.getVideoBrowseRecordAsync,e.reportVideoBrowse===_&&delete e.reportVideoBrowse}},[g,h,l,d,_,m])}export{c as useVideoDetailWebViewBridge};
@@ -1,7 +1,7 @@
1
1
 
2
- import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
3
2
  import { VideoDetailActionsClient } from "./client.mjs";
4
3
  import { VideoDetailActions } from "./server.mjs";
4
+ import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
5
5
  import "../../../../../utils.mjs";
6
6
  import * as zod from "zod";
7
7
  import * as zod_v4_core0 from "zod/v4/core";
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{SeriesEpisodes as e}from"../../../../common/series-episodes/index.mjs";import{DetailIntroduction as t}from"../shared/detail-introduction.mjs";import{editorPreviewInformation as n}from"../shared/editor-preview.mjs";import{useVideoDetailMaterialRuntimeContext as r}from"../shared/runtime-context-provider.mjs";import{jsx as i,jsxs as a}from"react/jsx-runtime";function o({showTags:o=!1,showEpisodes:s=!0,mode:c=`renderer`}){let l=r(),u=l?.information,d=l?.currentSeriesNum??1,f=l?.onEpisodeChange,p=l?.isShow??!0,m=c===`editor`,h=m?n:u;if(!h)return null;let g=Math.max(1,Number(d||1)),_=m?e=>{}:f??(()=>{}),v=h?.is_more_link===`y`&&(h?.links?.length??0)>1;return a(`div`,{className:m?`pointer-events-none`:void 0,children:[i(t,{information:h,isShow:p,showTags:o}),s&&v&&i(e,{mode:`detail`,series_num:g,information:h,onEpisodeChange:_})]})}export{o as VideoDetailInfoClient};
2
+ "use client";import{SeriesEpisodes as e}from"../../../../common/series-episodes/index.mjs";import{DetailIntroduction as t}from"../shared/detail-introduction.mjs";import{editorPreviewInformation as n}from"../shared/editor-preview.mjs";import{useVideoDetailMaterialRuntimeContext as r}from"../shared/runtime-context-provider.mjs";import{jsx as i,jsxs as a}from"react/jsx-runtime";function o({showTags:o=!1,showEpisodes:s=!1,mode:c=`renderer`}){let l=r(),u=l?.information,d=l?.currentSeriesNum??1,f=l?.onEpisodeChange,p=l?.isShow??!0,m=c===`editor`,h=m?n:u;if(!h)return null;let g=Math.max(1,Number(d||1)),_=m?e=>{}:f??(()=>{}),v=h?.is_more_link===`y`&&(h?.links?.length??0)>1;return a(`div`,{className:m?`pointer-events-none`:void 0,children:[i(t,{information:h,isShow:p,showTags:o}),s&&v&&i(e,{mode:`detail`,series_num:g,information:h,onEpisodeChange:_})]})}export{o as VideoDetailInfoClient};
@@ -1,8 +1,8 @@
1
1
 
2
- import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
3
- import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
4
2
  import { VideoDetailInfoClient } from "./client.mjs";
5
3
  import { VideoDetailInfo } from "./server.mjs";
4
+ import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
5
+ import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
6
6
  import "../../../../../utils.mjs";
7
7
  import * as zod from "zod";
8
8
  import * as zod_v4_core0 from "zod/v4/core";
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineComponentPropsSchema as e,defineSwitchPropSchema as t,getSchemaDefaultProps as n}from"../../../../../utils/schema/schema.mjs";const r=e({showTags:t({label:`显示标签`,defaultValue:!1}),showEpisodes:t({label:`显示选集`,defaultValue:!0})});n(r);export{r as videoDetailInfoInspectorPropsSchema};
2
+ import{defineComponentPropsSchema as e,defineSwitchPropSchema as t,getSchemaDefaultProps as n}from"../../../../../utils/schema/schema.mjs";const r=e({showTags:t({label:`显示标签`,defaultValue:!1}),showEpisodes:t({label:`显示选集`,defaultValue:!1})});n(r);export{r as videoDetailInfoInspectorPropsSchema};
@@ -1,2 +1,2 @@
1
1
 
2
- import{VideoDetailMaterialRuntimeProvider as e}from"../shared/runtime-context-provider.mjs";import{VideoDetailInfoClient as t}from"./client.mjs";import{resolveVideoDetailRouteFromMaterialContext as n}from"../shared/material-route-context.mjs";import{getVideoDetailServerInformation as r}from"../shared/video-detail-server-data.mjs";import{jsx as i,jsxs as a}from"react/jsx-runtime";import o from"next/link";async function s(s){let{mode:l=`renderer`,showEpisodes:d=!0,detailId:f,currentSeriesNum:p,__route:m,...h}=s;if(l!==`renderer`)return i(t,{...h,showEpisodes:d,mode:l});let g=n(m),_=String(f||g.detailId||``).trim();if(!_)return i(t,{...h,showEpisodes:d,mode:l});let v=await r(_);if(!v)return i(t,{...h,showEpisodes:d,mode:l});let y=Math.max(1,Number(p||g.currentSeriesNum||1)),b=c(v),x=d&&v.is_more_link===`y`&&b.length>1;return a(e,{value:{information:v,detailId:_,currentSeriesNum:y,episodeIndex:Math.max(0,y-1),isShow:!0,isInformationLoading:!1,isInformationResolved:!0},children:[i(t,{...h,showEpisodes:!1,mode:l}),x&&i(`div`,{className:`w-full px-[12px] mt-[12px]`,children:i(`div`,{className:`flex flex-wrap gap-[8px]`,children:b.map(e=>{let t=e.seriesNum===y;return i(o,{href:u(_,v.name||``,e.seriesNum),className:`h-[28px] min-w-[40px] rounded-[6px] border px-[8px] text-[12px] leading-[26px] text-center ${t?`border-theme5 text-theme5 bg-theme5/10`:`border-line1 text-text2 bg-bg1`}`,children:e.label},e.key)})})})]})}function c(e){return(Array.isArray(e.links)?e.links:[]).map((e,t)=>{let n=e||{},r=typeof n.id==`string`?n.id:``,i=l(n.id,n.name,t+1);return{key:r||`episode-${i}-${t+1}`,seriesNum:i,label:`第${i}集`}})}function l(e,t,n){let r=Number(e);if(Number.isFinite(r)&&r>0)return Math.floor(r);let i=Number(t);return Number.isFinite(i)&&i>0?Math.floor(i):n}function u(e,t,n){return`/video/${e}/${encodeURIComponent(t||``)}/episode/${n}`}export{s as VideoDetailInfo};
2
+ import{VideoDetailMaterialRuntimeProvider as e}from"../shared/runtime-context-provider.mjs";import{VideoDetailInfoClient as t}from"./client.mjs";import{resolveVideoDetailRouteFromMaterialContext as n}from"../shared/material-route-context.mjs";import{getVideoDetailServerInformation as r}from"../shared/video-detail-server-data.mjs";import{jsx as i,jsxs as a}from"react/jsx-runtime";import o from"next/link";async function s(s){let{mode:l=`renderer`,showEpisodes:d=!1,detailId:f,currentSeriesNum:p,__route:m,...h}=s;if(l!==`renderer`)return i(t,{...h,showEpisodes:d,mode:l});let g=n(m),_=String(f||g.detailId||``).trim();if(!_)return i(t,{...h,showEpisodes:d,mode:l});let v=await r(_);if(!v)return i(t,{...h,showEpisodes:d,mode:l});let y=Math.max(1,Number(p||g.currentSeriesNum||1)),b=c(v),x=d&&v.is_more_link===`y`&&b.length>1;return a(e,{value:{information:v,detailId:_,currentSeriesNum:y,episodeIndex:Math.max(0,y-1),isShow:!0,isInformationLoading:!1,isInformationResolved:!0},children:[i(t,{...h,showEpisodes:!1,mode:l}),x&&i(`div`,{className:`w-full px-[12px] mt-[12px]`,children:i(`div`,{className:`flex flex-wrap gap-[8px]`,children:b.map(e=>{let t=e.seriesNum===y;return i(o,{href:u(_,v.name||``,e.seriesNum),className:`h-[28px] min-w-[40px] rounded-[6px] border px-[8px] text-[12px] leading-[26px] text-center ${t?`border-theme5 text-theme5 bg-theme5/10`:`border-line1 text-text2 bg-bg1`}`,children:e.label},e.key)})})})]})}function c(e){return(Array.isArray(e.links)?e.links:[]).map((e,t)=>{let n=e||{},r=typeof n.id==`string`?n.id:``,i=l(n.id,n.name,t+1);return{key:r||`episode-${i}-${t+1}`,seriesNum:i,label:`第${i}集`}})}function l(e,t,n){let r=Number(e);if(Number.isFinite(r)&&r>0)return Math.floor(r);let i=Number(t);return Number.isFinite(i)&&i>0?Math.floor(i):n}function u(e,t,n){return`/video/${e}/${encodeURIComponent(t||``)}/episode/${n}`}export{s as VideoDetailInfo};
@@ -1,8 +1,8 @@
1
1
 
2
- import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
3
- import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
4
2
  import { VideoDetailInfoTitleTagsEpisodesClient } from "./client.mjs";
5
3
  import { VideoDetailInfoTitleTagsEpisodes } from "./server.mjs";
4
+ import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
5
+ import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
6
6
  import "../../../../../utils.mjs";
7
7
  import * as zod from "zod";
8
8
  import * as zod_v4_core0 from "zod/v4/core";
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{pxToVw as e}from"../../../../../utils/helper.mjs";import{EmptyState as t}from"../../../../ui/empty.mjs";import{Skeleton as n}from"../../../../ui/skeleton.mjs";import{useRequest as r}from"../../../../../hooks/query/use-query.mjs";import{batchQueryContentInteractions as i}from"../../../../../hooks/use-content-operate.mjs";import a from"../../../../../assets/icons/detail/video_play.mjs";import o from"../../search-bar/variants/detail-search-bar/index.mjs";import{editorPreviewInformation as s}from"../shared/editor-preview.mjs";import{useVideoDetailMaterialRuntimeContext as c}from"../shared/runtime-context-provider.mjs";import{DetailHero as l}from"../shared/video-hero.mjs";import{useMemo as u}from"react";import{Fragment as d,jsx as f,jsxs as p}from"react/jsx-runtime";import{useTranslations as m}from"next-intl";function h({mode:h=`renderer`,children:g}){let _=m(`components.pages.videoDetail`),v=c(),y=v?.information,b=v?.episodeIndex??0,x=v?.currentSeriesNum??1,S=v?.resumeProgressSeconds??0,C=v?.isWebView??!1,w=v?.isInformationLoading??!1,T=v?.isInformationResolved??!!y,E=h===`editor`,D=E?{...s,id:``,mid:``}:y,O=E?0:b,k=D?.links?.[O]?.id||``,A=h===`renderer`&&!C&&!!D?.id,{data:j,isFetching:M,isFetchedAfterMount:N,isSuccess:P}=r(u(()=>[`video-detail-player-interaction`,D?.id,k,x],[k,x,D?.id]),async()=>D?.id?await i([D.id],1):null,{enabled:A,staleTime:0,refetchOnMount:`always`,refetchOnWindowFocus:!1}),F=u(()=>{if(!N||M||!P)return 0;let e=j?.interaction_list?.[0]?.browse_record,t=Number(e?.browse_duration||0);if(!Number.isFinite(t)||t<=0)return 0;let n=String(e?.browse_episode||``).trim();if(!n)return t;let r=Number.parseInt(n,10);return Number.isNaN(r)?0:r===x?t:0},[x,j,N,M,P]),I=E?0:F>0?F:S,L=D?.status===`1`;return E&&D?f(`div`,{className:`pointer-events-none`,children:f(l,{mode:h,isVideo:!0,information:D,episodeIndex:O,resumeProgressSeconds:I})}):p(`div`,{className:`w-full bg-bg2 text-text1 ${C?``:`pt-11`}`,children:[!C&&f(`div`,{className:`fixed h-[44px] bg-black top-0 left-0 right-0 z-[1000]`,children:f(o,{})}),p(`div`,{className:`mx-auto w-full max-w-[840px]`,children:[D&&!L&&f(t,{type:`no-content`,text:_(`videoDetailClient.videoUnavailable`)}),D&&L&&p(d,{children:[!C&&f(l,{mode:h,isVideo:!0,information:D,episodeIndex:O,resumeProgressSeconds:I}),g]}),!D&&w&&p(`div`,{className:`relative w-full overflow-hidden`,style:{height:e(241.875),maxHeight:e(242)},children:[f(n,{className:`h-full w-full rounded-none`}),f(`div`,{className:`absolute inset-0 z-[1] flex items-center justify-center pointer-events-none`,children:f(`div`,{className:`flex items-center justify-center w-10 h-10 rounded-full bg-[rgba(0,0,0,0.45)]`,children:f(a,{className:`w-[14px] h-[20px] text-white`})})})]}),!D&&!w&&T&&f(t,{type:`no-content`,text:_(`videoDetailClient.videoDeleted`)})]})]})}export{h as VideoDetailPlayerClient};
2
+ "use client";import{pxToVw as e}from"../../../../../utils/helper.mjs";import{EmptyState as t}from"../../../../ui/empty.mjs";import{Skeleton as n}from"../../../../ui/skeleton.mjs";import{useRequest as r}from"../../../../../hooks/query/use-query.mjs";import{batchQueryContentInteractions as i}from"../../../../../hooks/use-content-operate.mjs";import a from"../../../../../assets/icons/detail/video_play.mjs";import o from"../../search-bar/variants/detail-search-bar/index.mjs";import{editorPreviewInformation as s}from"../shared/editor-preview.mjs";import{useVideoDetailMaterialRuntimeContext as c}from"../shared/runtime-context-provider.mjs";import{useVideoDetailWebViewBridge as l}from"../shared/use-video-detail-webview-bridge.mjs";import{DetailHero as u}from"../shared/video-hero.mjs";import{useMemo as d}from"react";import{Fragment as f,jsx as p,jsxs as m}from"react/jsx-runtime";import{useTranslations as h}from"next-intl";function g({mode:g=`renderer`,children:_}){let v=h(`components.pages.videoDetail`),y=c(),b=y?.information,x=y?.episodeIndex??0,S=y?.currentSeriesNum??1,C=y?.resumeProgressSeconds??0,w=y?.isWebView??!1,T=y?.isInformationLoading??!1,E=y?.isInformationResolved??!!b;l({enabled:g===`renderer`,detailId:y?.detailId||b?.id||``,information:b,episodeIndex:x,currentSeriesNum:S});let D=g===`editor`,O=D?{...s,id:``,mid:``}:b,k=D?0:x,A=O?.links?.[k]?.id||``,j=g===`renderer`&&!w&&!!O?.id,{data:M,isFetching:N,isFetchedAfterMount:P,isSuccess:F}=r(d(()=>[`video-detail-player-interaction`,O?.id,A,S],[A,S,O?.id]),async()=>O?.id?await i([O.id],1):null,{enabled:j,staleTime:0,refetchOnMount:`always`,refetchOnWindowFocus:!1}),I=d(()=>{if(!P||N||!F)return 0;let e=M?.interaction_list?.[0]?.browse_record,t=Number(e?.browse_duration||0);if(!Number.isFinite(t)||t<=0)return 0;let n=String(e?.browse_episode||``).trim();if(!n)return t;let r=Number.parseInt(n,10);return Number.isNaN(r)?0:r===S?t:0},[S,M,P,N,F]),L=D?0:I>0?I:C,R=O?.status===`1`;return D&&O?p(`div`,{className:`pointer-events-none`,children:p(u,{mode:g,isVideo:!0,information:O,episodeIndex:k,resumeProgressSeconds:L})}):m(`div`,{className:`w-full bg-bg2 text-text1 ${w?``:`pt-11`}`,children:[!w&&p(`div`,{className:`fixed h-[44px] bg-black top-0 left-0 right-0 z-[1000]`,children:p(o,{})}),m(`div`,{className:`mx-auto w-full max-w-[840px]`,children:[O&&!R&&p(t,{type:`no-content`,text:v(`videoDetailClient.videoUnavailable`)}),O&&R&&m(f,{children:[!w&&p(u,{mode:g,isVideo:!0,information:O,episodeIndex:k,resumeProgressSeconds:L}),_]}),!O&&T&&m(`div`,{className:`relative w-full overflow-hidden`,style:{height:e(241.875),maxHeight:e(242)},children:[p(n,{className:`h-full w-full rounded-none`}),p(`div`,{className:`absolute inset-0 z-[1] flex items-center justify-center pointer-events-none`,children:p(`div`,{className:`flex items-center justify-center w-10 h-10 rounded-full bg-[rgba(0,0,0,0.45)]`,children:p(a,{className:`w-[14px] h-[20px] text-white`})})})]}),!O&&!T&&E&&p(t,{type:`no-content`,text:v(`videoDetailClient.videoDeleted`)})]})]})}export{g as VideoDetailPlayerClient};
@@ -1,8 +1,8 @@
1
1
 
2
- import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
3
- import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
4
2
  import { VideoDetailRecommendClient } from "./client.mjs";
5
3
  import { VideoDetailRecommend } from "./server.mjs";
4
+ import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
5
+ import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
6
6
  import "../../../../../utils.mjs";
7
7
  import * as zod from "zod";
8
8
  import * as zod_v4_core0 from "zod/v4/core";
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{pContentGetPopularVideoList as e}from"../../../../../service/generated/client.mjs";import{useRouter as t}from"../../../../../utils/use-compatible-router.mjs";import{Image as n}from"../../../../ui/image.mjs";import{Box as r}from"../../../../ui/box.mjs";import{Text as i}from"../../../../ui/text.mjs";import a from"../../../../../assets/icons/detail/video_flag.mjs";import{MiniThreeCard as o}from"../../../../common/cards/mini-three-card.mjs";import{HOME_RECOMMEND_DEFAULT_GRID_COLUMNS as s,HOME_RECOMMEND_DEFAULT_GRID_ROWS as c,HOME_RECOMMEND_DEFAULT_PLAY_COUNT_DELTA as l,HOME_RECOMMEND_DEFAULT_SHOW_EPISODE as u,HOME_RECOMMEND_DEFAULT_SHOW_PLAY_COUNT as ee,HOME_RECOMMEND_MAX_GRID_COLUMNS as d,HOME_RECOMMEND_MAX_GRID_ROWS as f}from"./home-recommend-default-config.mjs";import{HOME_RECOMMEND_CARD_CONFIG_FIELD as p}from"./home-recommend-preview.mjs";import{useCallback as m,useEffect as h,useLayoutEffect as te,useMemo as g,useRef as _,useState as v}from"react";import{jsx as y,jsxs as b}from"react/jsx-runtime";const ne={},re={list:[]};function x({variant:n,props:a=ne,data:o=re,mode:p=`renderer`}){let x=p===`editor`,C=t(),{list:w,title:oe,cursor:E}=o,D=g(()=>Array.isArray(w)?w:[],[w]),O=g(()=>Array.isArray(o.icons)?o.icons:[],[o.icons]),{rows:k,columns:se,moreLink:A,title:j,smartTagEnabled:M,smartTagIds:N,catId:le,showPlayCount:ue,playCountDelta:de,showEpisode:fe,enableInfinite:pe}=a,I=pe===!0&&M===!0,L=!x&&I&&D.length>=16,R=g(()=>Array.isArray(N)?N.map(e=>String(e||``).trim()).filter(Boolean):[],[N]),z=typeof le==`string`?le.trim():``,[B,me]=v(0),[he,ge]=v(D),[_e,ve]=v(O),[V,H]=v(()=>P(E)),[ye,be]=v(!1),xe=_(null),U=_(null),W=_(!1);h(()=>{ge(D),ve(O),H(P(E))},[E,O,D]);let Se=ae(k,c,f),G=ae(se,s,d),K=I?16:n===`grid`?Se*G:16,Ce=Se*G,we=x&&n===`grid`,q=we?he.slice(0,Ce):he,J=we?_e.slice(0,Ce):_e,Te=n===`waterfall`?6:4,Y=q.length>0?Math.max(0,q.length-Te):-1,Ee=!!V,De=j&&j.trim()||oe||``,X=ue??ee,Z=Number(de??l),Q=fe??u,Oe=!I,$=Oe?ie(A):``,ke=Oe&&!!$,Ae=m(async()=>{let t=V;if(!(!L||!t||W.current)){W.current=!0,be(!0);try{let n=await e({cursor:t,page_size:K,tags:R.length>0?R:void 0,cat_id:z||void 0}),r=Array.isArray(n.data?.videos)?n.data.videos:[],i=P(n.data?.cursor);r.length>0&&ge(e=>e.concat(r)),H(e=>{if(!(!r.length||!i))return i===e?void 0:i})}catch(e){console.error(`推荐位加载下一页失败(client)`,e),H(void 0)}finally{W.current=!1,be(!1)}}},[V,z,K,R,L]),je=m(()=>{if($){if($.startsWith(`http`)){window.location.href=$;return}C.push($)}},[$,C]);h(()=>{let e=U.current;if(!e||!L||!Ee)return;let t=new IntersectionObserver(e=>{!e[0]?.isIntersecting||ye||Ae()},{root:null,threshold:0});return t.observe(e),()=>{t.disconnect()}},[Ae,Ee,ye,q.length,K,L,Y]),te(()=>{let e=xe.current;if(!e||n!==`waterfall`)return;let t=()=>{let t=e.clientWidth||0;me(t>0?(t-12)/2:0)};t();let r=new ResizeObserver(t);return r.observe(e),()=>{r.disconnect()}},[n]);let Me=g(()=>n===`waterfall`?ce(q,J,B):{left:[],right:[]},[B,J,q,n]);return q.length?b(r,{className:`w-full mt-[16px]`,children:[b(r,{className:`flex items-center justify-between px-[12px] mb-[8px]`,children:[y(i,{className:`flex-1 min-w-0 text-text1 text-[18px] leading-[26px] font-bold line-clamp-1`,children:De}),ke&&y(i,{className:`text-text3 text-[12px] leading-[18px] cursor-pointer`,onClick:je,children:`更多`})]}),n===`grid`&&y(r,{className:`w-full flex flex-wrap px-[12px]`,children:q.map((e,t)=>{let r=J[t],i=T(e),a=X&&(i?.showPlayCount??!0),o=i?.playCountDelta??Z,s=i?.showEpisode??Q,c=t%G,l=G>1?{paddingLeft:12*c/G,paddingRight:12*(G-c-1)/G}:void 0;return y(`div`,{ref:t===Y?U:void 0,className:`min-w-0`,style:{width:`${100/G}%`,...l||{}},children:y(S,{variant:n,item:e,icon:r,index:t,showPlayCount:a,playCountDelta:o,showEpisode:s,widthStyle:{width:`100%`}})},F(e,t))})}),n===`waterfall`&&b(r,{ref:xe,className:`w-full px-[12px] flex gap-[12px]`,children:[y(r,{className:`flex-1 min-w-0 flex flex-col`,children:Me.left.map(e=>{let t=T(e.item),r=X&&(t?.showPlayCount??!0),i=t?.playCountDelta??Z,a=t?.showEpisode??Q;return y(`div`,{ref:e.index===Y?U:void 0,children:y(S,{variant:n,item:e.item,icon:e.icon,index:e.index,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:{width:`100%`}})},F(e.item,e.index))})}),y(r,{className:`flex-1 min-w-0 flex flex-col`,children:Me.right.map(e=>{let t=T(e.item),r=X&&(t?.showPlayCount??!0),i=t?.playCountDelta??Z,a=t?.showEpisode??Q;return y(`div`,{ref:e.index===Y?U:void 0,children:y(S,{variant:n,item:e.item,icon:e.icon,index:e.index,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:{width:`100%`}})},F(e.item,e.index))})})]})]}):null}function S({variant:e,item:t,icon:n,index:s,showPlayCount:c,playCountDelta:l,showEpisode:u,widthStyle:ee}){let d=oe(t),f=t.name||t?.title||``,p=k(se(t.static?.browse_cnt??0,l)),m=D(t,u),h=M(t,n,s);return y(o,{url:d,text:f,className:`w-full`,style:ee,topRightChild:h?y(C,{url:h}):void 0,bottomLeftChild:c?b(r,{className:`h-[20px] leading-[20px] text-[#fff] text-[12px] px-[4px] rounded-[4px] bg-[#333] ml-[4px] flex items-center`,children:[y(a,{className:`w-[16px] h-[auto] text-[#fff] mr-[4px]`}),p]}):null,bottomRightChild:u?m&&y(i,{className:`text-[#fff] text-[12px] leading-[18px] pr-2`,children:m}):null,textChild:y(r,{className:`py-[4px]`,children:y(i,{as:`h3`,className:`text-text1 text-[16px] leading-[24px] ${e===`waterfall`?`break-words line-clamp-3`:`line-clamp-1`}`,children:f})}),linkPath:w(t)})}function C({url:e}){return y(r,{className:`relative w-[40px] h-[20px]`,children:y(n,{src:e,alt:`corner`,width:40,height:20,className:`w-full h-auto`})})}function w(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id||``}/${t}/episode/1`}function ie(e){return e?e.trim():``}function ae(e,t,n){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.min(n,Math.floor(r))}function T(e){return e[p]}function oe(e){return e.img_y||e.img_x||e?.coverUrl}function E(e){return typeof e==`string`?e:``}function D(e,t){if(!t)return``;if(O(e)){let t=e.update_status===`0`,n=Number(e.episode_cnt||e.links?.length||0);return n>0?`${t?`更新至`:`全`}${n}集`:``}return j(Number(e.duration||0))}function O(e){if(Number(e.type??0)===2)return!0;let t=Number(e.episode_cnt||e.links?.length||0);return Number.isFinite(t)&&t>1}function k(e){return!Number.isFinite(e)||e<=0?`0`:e>=1e6?`${A(e/1e6)}M`:e>=1e3?`${A(e/1e3)}k`:Math.floor(e).toString()}function se(e,t){let n=Number(e||0),r=Number(t||0);return!Number.isFinite(n)||!Number.isFinite(r)?0:Math.max(0,n+r)}function A(e){let t=e.toFixed(1);return t.endsWith(`.0`)?t.slice(0,-2):t}function j(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 M(e,t,n){return E(e.badge_url)||E(t?.material_url)||``}function ce(e,t,n){let r=[],i=[],a=n<=0,o=0,s=0;return e.forEach((e,c)=>{let l=t[c];if(a){c%2==0?r.push({item:e,icon:l,index:c}):i.push({item:e,icon:l,index:c});return}let u=N(n,e);o<=s?(r.push({item:e,icon:l,index:c}),o+=u):(i.push({item:e,icon:l,index:c}),s+=u)}),{left:r,right:i}}function N(e,t){if(!e)return 0;let n=e*1.3461538461538463,r=D(t,!0)?18:0;return n+20+r+6+16}function P(e){if(typeof e==`string`)return e.trim()||void 0}function F(e,t){return e.id?`home-recommend-${e.id}`:`home-recommend-${t}`}export{x as default};
2
+ "use client";import{pContentGetPopularVideoList 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 i from"../../../../../assets/icons/detail/video_flag.mjs";import{MiniThreeCard as a}from"../../../../common/cards/mini-three-card.mjs";import{HOME_RECOMMEND_DEFAULT_GRID_COLUMNS as o,HOME_RECOMMEND_DEFAULT_GRID_ROWS as s,HOME_RECOMMEND_DEFAULT_PLAY_COUNT_DELTA as c,HOME_RECOMMEND_DEFAULT_SHOW_EPISODE as l,HOME_RECOMMEND_DEFAULT_SHOW_PLAY_COUNT as u,HOME_RECOMMEND_MAX_GRID_COLUMNS as ee,HOME_RECOMMEND_MAX_GRID_ROWS as te}from"./home-recommend-default-config.mjs";import{HOME_RECOMMEND_CARD_CONFIG_FIELD as d}from"./home-recommend-preview.mjs";import{useCallback as f,useEffect as p,useLayoutEffect as m,useMemo as h,useRef as g,useState as _}from"react";import{jsx as v,jsxs as y}from"react/jsx-runtime";import{useRouter as ne}from"next/navigation";const re={},ie={list:[]};function b({variant:t,props:i=re,data:a=ie,mode:d=`renderer`}){let b=d===`editor`,S=ne(),{list:C,title:se,cursor:T}=a,E=h(()=>Array.isArray(C)?C:[],[C]),D=h(()=>Array.isArray(a.icons)?a.icons:[],[a.icons]),{rows:O,columns:ce,moreLink:k,title:A,smartTagEnabled:j,smartTagIds:M,catId:ue,showPlayCount:de,playCountDelta:fe,showEpisode:pe,enableInfinite:me}=i,F=me===!0&&j===!0,I=!b&&F&&E.length>=16,L=h(()=>Array.isArray(M)?M.map(e=>String(e||``).trim()).filter(Boolean):[],[M]),R=typeof ue==`string`?ue.trim():``,[z,he]=_(0),[ge,_e]=_(E),[ve,ye]=_(D),[B,V]=_(()=>N(T)),[be,xe]=_(!1),Se=g(null),H=g(null),U=g(!1);p(()=>{_e(E),ye(D),V(N(T))},[T,D,E]);let Ce=oe(O,s,te),W=oe(ce,o,ee),G=F?16:t===`grid`?Ce*W:16,we=Ce*W,Te=b&&t===`grid`,K=Te?ge.slice(0,we):ge,q=Te?ve.slice(0,we):ve,Ee=t===`waterfall`?6:4,J=K.length>0?Math.max(0,K.length-Ee):-1,De=!!B,Oe=A&&A.trim()||se||``,Y=de??u,X=Number(fe??c),Z=pe??l,ke=!F,Q=ke?ae(k):``,Ae=ke&&!!Q,je=f(async()=>{let t=B;if(!(!I||!t||U.current)){U.current=!0,xe(!0);try{let n=await e({cursor:t,page_size:G,tags:L.length>0?L:void 0,cat_id:R||void 0}),r=Array.isArray(n.data?.videos)?n.data.videos:[],i=N(n.data?.cursor);r.length>0&&_e(e=>e.concat(r)),V(e=>{if(!(!r.length||!i))return i===e?void 0:i})}catch(e){console.error(`推荐位加载下一页失败(client)`,e),V(void 0)}finally{U.current=!1,xe(!1)}}},[B,R,G,L,I]),Me=f(()=>{Q&&(Q.startsWith(`http`)?window.location.href=Q:S.push(Q))},[Q,S]);p(()=>{let e=H.current;if(!e||!I||!De)return;let t=new IntersectionObserver(e=>{!e[0]?.isIntersecting||be||je()},{root:null,threshold:0});return t.observe(e),()=>{t.disconnect()}},[je,De,be,K.length,G,I,J]),m(()=>{let e=Se.current;if(!e||t!==`waterfall`)return;let n=()=>{let t=e.clientWidth||0;he(t>0?(t-12)/2:0)};n();let r=new ResizeObserver(n);return r.observe(e),()=>{r.disconnect()}},[t]);let $=h(()=>t===`waterfall`?le(K,q,z):{left:[],right:[]},[z,q,K,t]);return K.length?y(n,{className:`w-full mt-[16px]`,children:[y(n,{className:`flex items-center justify-between px-[12px] mb-[8px]`,children:[v(r,{className:`flex-1 min-w-0 text-text1 text-[18px] leading-[26px] font-bold line-clamp-1`,children:Oe}),Ae&&v(r,{className:`text-text3 text-[12px] leading-[18px] cursor-pointer`,onClick:Me,children:`更多`})]}),t===`grid`&&v(n,{className:`w-full flex flex-wrap px-[12px]`,children:K.map((e,n)=>{let r=q[n],i=w(e),a=Y&&(i?.showPlayCount??!0),o=i?.playCountDelta??X,s=i?.showEpisode??Z,c=n%W,l=W>1?{paddingLeft:12*c/W,paddingRight:12*(W-c-1)/W}:void 0;return v(`div`,{ref:n===J?H:void 0,className:`min-w-0`,style:{width:`${100/W}%`,...l||{}},children:v(x,{variant:t,item:e,icon:r,index:n,showPlayCount:a,playCountDelta:o,showEpisode:s,widthStyle:{width:`100%`}})},P(e,n))})}),t===`waterfall`&&y(n,{ref:Se,className:`w-full px-[12px] flex gap-[12px]`,children:[v(n,{className:`flex-1 min-w-0 flex flex-col`,children:$.left.map(e=>{let n=w(e.item),r=Y&&(n?.showPlayCount??!0),i=n?.playCountDelta??X,a=n?.showEpisode??Z;return v(`div`,{ref:e.index===J?H:void 0,children:v(x,{variant:t,item:e.item,icon:e.icon,index:e.index,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:{width:`100%`}})},P(e.item,e.index))})}),v(n,{className:`flex-1 min-w-0 flex flex-col`,children:$.right.map(e=>{let n=w(e.item),r=Y&&(n?.showPlayCount??!0),i=n?.playCountDelta??X,a=n?.showEpisode??Z;return v(`div`,{ref:e.index===J?H:void 0,children:v(x,{variant:t,item:e.item,icon:e.icon,index:e.index,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:{width:`100%`}})},P(e.item,e.index))})})]})]}):null}function x({variant:e,item:t,icon:o,index:s,showPlayCount:c,playCountDelta:l,showEpisode:u,widthStyle:ee}){let te=se(t),d=t.name||t?.title||``,f=O(ce(t.static?.browse_cnt??0,l)),p=E(t,u),m=j(t,o,s);return v(a,{url:te,text:d,className:`w-full`,style:ee,topRightChild:m?v(S,{url:m}):void 0,bottomLeftChild:c?y(n,{className:`h-[20px] leading-[20px] text-[#fff] text-[12px] px-[4px] rounded-[4px] bg-[#333] ml-[4px] flex items-center`,children:[v(i,{className:`w-[16px] h-[auto] text-[#fff] mr-[4px]`}),f]}):null,bottomRightChild:u?p&&v(r,{className:`text-[#fff] text-[12px] leading-[18px] pr-2`,children:p}):null,textChild:v(n,{className:`py-[4px]`,children:v(r,{as:`h3`,className:`text-text1 text-[16px] leading-[24px] ${e===`waterfall`?`break-words line-clamp-3`:`line-clamp-1`}`,children:d})}),linkPath:C(t)})}function S({url:e}){return v(n,{className:`relative w-[40px] h-[20px]`,children:v(t,{src:e,alt:`corner`,width:40,height:20,className:`w-full h-auto`})})}function C(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id||``}/${t}/episode/1`}function ae(e){return e?e.trim():``}function oe(e,t,n){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.min(n,Math.floor(r))}function w(e){return e[d]}function se(e){return e.img_y||e.img_x||e?.coverUrl}function T(e){return typeof e==`string`?e:``}function E(e,t){if(!t)return``;if(D(e)){let t=Number(e.episode_cnt||e.links?.length||0);return t>0?`全${t}集`:``}return A(Number(e.duration||0))}function D(e){if(Number(e.type??0)===2)return!0;let t=Number(e.episode_cnt||e.links?.length||0);return Number.isFinite(t)&&t>1}function O(e){return!Number.isFinite(e)||e<=0?`0`:e>=1e6?`${k(e/1e6)}M`:e>=1e3?`${k(e/1e3)}k`:Math.floor(e).toString()}function ce(e,t){let n=Number(e||0),r=Number(t||0);return!Number.isFinite(n)||!Number.isFinite(r)?0:Math.max(0,n+r)}function k(e){let t=e.toFixed(1);return t.endsWith(`.0`)?t.slice(0,-2):t}function A(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 j(e,t,n){return T(e.badge_url)||T(t?.material_url)||``}function le(e,t,n){let r=[],i=[],a=n<=0,o=0,s=0;return e.forEach((e,c)=>{let l=t[c];if(a){c%2==0?r.push({item:e,icon:l,index:c}):i.push({item:e,icon:l,index:c});return}let u=M(n,e);o<=s?(r.push({item:e,icon:l,index:c}),o+=u):(i.push({item:e,icon:l,index:c}),s+=u)}),{left:r,right:i}}function M(e,t){if(!e)return 0;let n=e*1.3461538461538463,r=E(t,!0)?18:0;return n+20+r+6+16}function N(e){if(typeof e==`string`)return e.trim()||void 0}function P(e,t){return e.id?`home-recommend-${e.id}`:`home-recommend-${t}`}export{b as default};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useRouter as e}from"../../../../utils/use-compatible-router.mjs";import{Image as t}from"../../../ui/image.mjs";import{Box as n}from"../../../ui/box.mjs";import{Text as r}from"../../../ui/text.mjs";import i from"../../../../assets/icons/right_arrow.mjs";import a from"../../../../assets/images/marquee.mjs";import o from"./marquee.module.mjs";import{defaultMarqueePeriod as s}from"./schema.mjs";import{useEffect as c,useMemo as l,useRef as u,useState as d}from"react";import{X as f}from"lucide-react";import{jsx as p,jsxs as m}from"react/jsx-runtime";import{useTranslations as h}from"next-intl";const g=[],_=`marquee_list`;let v=null;function y(e,t=20){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t).join(``)}...`}function b(e,t){if(!e)return!1;if(t===`once`)return!0;let n=new Date(e),r=new Date;return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()}function x(){if(v)return v;let e=localStorage.getItem(_);if(!e)return v={},{};try{let t=JSON.parse(e);if(!t||typeof t!=`object`)return{};let n={};return Object.entries(t).forEach(([e,t])=>{if(!t||typeof t!=`object`)return;let r=t.closedAt;typeof r!=`number`||Number.isNaN(r)||(n[e]={closedAt:r})}),v=n,n}catch{return v={},{}}}function S(e){v=e,localStorage.setItem(_,JSON.stringify(e))}function C(e){return x()[e]??{}}function w(e,t){S({...x(),[e]:t})}function T(e,t){return b(e.closedAt,t)}function E(_){let v=h(`components.biz.business.marquee`),{marqueeKey:b,contents:x=g,click:S,close:E,displayStrategy:D,mode:O=`renderer`}=_,k=O===`editor`,A=e(),j=u(!1),[M,N]=d(k),[P,F]=d(k),[I,L]=d(!1),[R,z]=d(0);c(()=>{L(!0)},[]);let B=l(()=>{let e=D?.period??s,t=e.start,n=e.end;if(!t&&!n)return!0;let r=Date.now(),i=t?new Date(t).getTime():0,a=n?new Date(n).getTime():2**53-1;return r>=i&&r<=a},[D?.period]),V=l(()=>(x??[]).map(e=>({...e,text:y(String(e?.text??``))})).filter(e=>!!e.text),[x]),H=b?.trim()??``;if(c(()=>{z(0)},[l(()=>V.map(e=>`${e.text??``}::${e.link??``}`).join(`|`),[V]),H]),c(()=>{k||H||j.current||process.env.NODE_ENV===`production`||(j.current=!0,console.warn(`[MarqueeClient] marqueeKey is required in renderer mode.`))},[k,H]),c(()=>{if(I){if(k){N(!0),F(!0);return}if(!D?.rule||!B||V.length===0){N(!1),F(!0);return}if(!H){N(!1),F(!0);return}N(!T(C(H),D.rule)),F(!0)}},[D?.rule,k,I,B,V.length,H]),!k&&(!I||!P||!M||!B)||V.length===0)return null;let U=V[R%V.length],W=S?.enabled===!0,G=S?.link||U.link,K=W&&!!G,q=E?.enabled===!0;function J(){!H||!D?.rule||V.length===0||w(H,{...C(H),closedAt:Date.now()})}let Y=e=>{e.stopPropagation(),N(!1),J()},X=()=>{k||K&&G&&A.push(G)},Z=()=>{k||!M||V.length<=1||z(e=>(e+1)%V.length)},Q=k?o[`marquee-item-paused`]:V.length>1?o[`marquee-item-once`]:o[`marquee-item-loop`];return p(n,{className:k?`px-3 py-2 w-full bg-bg1 pointer-events-none`:`px-3 py-2 w-full bg-bg1`,children:m(n,{className:`pl-[2px] pr-[12px] py-[2px] flex items-center w-full cursor-pointer relative rounded-[8px] overflow-hidden ${o[`marquee-shell`]}`,onClick:X,children:[p(n,{className:`relative shrink-0 w-[36px] h-[36px] mr-[4px]`,children:p(t,{src:typeof a==`string`?a:a.src,alt:v(`noticeAlt`),fill:!0,className:`object-cover`,unoptimized:!0})}),p(n,{className:`flex-1 overflow-hidden relative h-[22px] ml-1`,children:p(n,{className:`absolute inset-y-0 left-0 flex items-center whitespace-nowrap ${Q}`,onAnimationEnd:Z,children:p(r,{className:`inline-block text-[14px] text-[#f59e0b] leading-[22px] font-medium`,children:U.text})},`marquee-item-${R}`)}),m(n,{className:`flex items-center gap-[12px] shrink-0 ml-[4px]`,children:[K&&p(i,{className:`w-[16px] h-[16px] text-[#f59e0b]`}),q&&p(n,{className:`opacity-30 hover:opacity-100 transition-opacity`,onClick:Y,children:p(f,{className:`w-[12px] h-[12px] text-[#F59E0B]`})})]})]})})}export{E as MarqueeClient};
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 r from"../../../../assets/icons/right_arrow.mjs";import i from"../../../../assets/images/marquee.mjs";import a from"./marquee.module.mjs";import{defaultMarqueePeriod as o}from"./schema.mjs";import{useEffect as s,useMemo as c,useRef as l,useState as u}from"react";import{X as d}from"lucide-react";import{jsx as f,jsxs as p}from"react/jsx-runtime";import{useTranslations as m}from"next-intl";import{useRouter as h}from"next/navigation";const g=[],_=`marquee_list`;let v=null;function y(e,t=20){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t).join(``)}...`}function b(e,t){if(!e)return!1;if(t===`once`)return!0;let n=new Date(e),r=new Date;return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()}function x(){if(v)return v;let e=localStorage.getItem(_);if(!e)return v={},{};try{let t=JSON.parse(e);if(!t||typeof t!=`object`)return{};let n={};return Object.entries(t).forEach(([e,t])=>{if(!t||typeof t!=`object`)return;let r=t.closedAt;typeof r!=`number`||Number.isNaN(r)||(n[e]={closedAt:r})}),v=n,n}catch{return v={},{}}}function S(e){v=e,localStorage.setItem(_,JSON.stringify(e))}function C(e){return x()[e]??{}}function w(e,t){S({...x(),[e]:t})}function T(e,t){return b(e.closedAt,t)}function E(_){let v=m(`components.biz.business.marquee`),{marqueeKey:b,contents:x=g,click:S,close:E,displayStrategy:D,mode:O=`renderer`}=_,k=O===`editor`,A=h(),j=l(!1),[M,N]=u(k),[P,F]=u(k),[I,L]=u(!1),[R,z]=u(0);s(()=>{L(!0)},[]);let B=c(()=>{let e=D?.period??o,t=e.start,n=e.end;if(!t&&!n)return!0;let r=Date.now(),i=t?new Date(t).getTime():0,a=n?new Date(n).getTime():2**53-1;return r>=i&&r<=a},[D?.period]),V=c(()=>(x??[]).map(e=>({...e,text:y(String(e?.text??``))})).filter(e=>!!e.text),[x]),H=b?.trim()??``;if(s(()=>{z(0)},[c(()=>V.map(e=>`${e.text??``}::${e.link??``}`).join(`|`),[V]),H]),s(()=>{k||H||j.current||process.env.NODE_ENV===`production`||(j.current=!0,console.warn(`[MarqueeClient] marqueeKey is required in renderer mode.`))},[k,H]),s(()=>{if(I){if(k){N(!0),F(!0);return}if(!D?.rule||!B||V.length===0){N(!1),F(!0);return}if(!H){N(!1),F(!0);return}N(!T(C(H),D.rule)),F(!0)}},[D?.rule,k,I,B,V.length,H]),!k&&(!I||!P||!M||!B)||V.length===0)return null;let U=V[R%V.length],W=S?.enabled===!0,G=S?.link||U.link,K=W&&!!G,q=E?.enabled===!0;function J(){!H||!D?.rule||V.length===0||w(H,{...C(H),closedAt:Date.now()})}let Y=e=>{e.stopPropagation(),N(!1),J()},X=()=>{k||K&&G&&A.push(G)},Z=()=>{k||!M||V.length<=1||z(e=>(e+1)%V.length)},Q=k?a[`marquee-item-paused`]:V.length>1?a[`marquee-item-once`]:a[`marquee-item-loop`];return f(t,{className:k?`px-3 py-2 w-full bg-bg1 pointer-events-none`:`px-3 py-2 w-full bg-bg1`,children:p(t,{className:`pl-[2px] pr-[12px] py-[2px] flex items-center w-full cursor-pointer relative rounded-[8px] overflow-hidden ${a[`marquee-shell`]}`,onClick:X,children:[f(t,{className:`relative shrink-0 w-[36px] h-[36px] mr-[4px]`,children:f(e,{src:typeof i==`string`?i:i.src,alt:v(`noticeAlt`),fill:!0,className:`object-cover`,unoptimized:!0})}),f(t,{className:`flex-1 overflow-hidden relative h-[22px] ml-1`,children:f(t,{className:`absolute inset-y-0 left-0 flex items-center whitespace-nowrap ${Q}`,onAnimationEnd:Z,children:f(n,{className:`inline-block text-[14px] text-[#f59e0b] leading-[22px] font-medium`,children:U.text})},`marquee-item-${R}`)}),p(t,{className:`flex items-center gap-[12px] shrink-0 ml-[4px]`,children:[K&&f(r,{className:`w-[16px] h-[16px] text-[#f59e0b]`}),q&&f(t,{className:`opacity-30 hover:opacity-100 transition-opacity`,onClick:Y,children:f(d,{className:`w-[12px] h-[12px] text-[#F59E0B]`})})]})]})})}export{E as MarqueeClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{cn as e}from"../../../../../utils/cn.mjs";import{Button as t}from"../../../../ui/button.mjs";import{useUserStore as n}from"../../../../../store/modules/user-store.mjs";import{gUserGetUserInfo as r,gUserViewUserInfo as i}from"../../../../../service/generated/client.mjs";import{useRouter as a}from"../../../../../utils/use-compatible-router.mjs";import{Box as o}from"../../../../ui/box.mjs";import{Skeleton as s}from"../../../../ui/skeleton.mjs";import{Text as c}from"../../../../ui/text.mjs";import{useLoginModalStore as l}from"../../../../../store/modules/login-modal-store.mjs";import{useRequest as u}from"../../../../../hooks/query/use-query.mjs";import{LeftArrowIcon as d}from"../../../../common/icons/left-arrow.mjs";import{SettingIcon as f}from"../../../../common/icons/setting.mjs";import{UserProfileAvatar as p}from"./user-profile-avatar.mjs";import{UserProfileCoverBackground as m}from"./user-profile-cover-background.mjs";import{useEffect as ee,useMemo as te,useState as h}from"react";import{jsx as g,jsxs as _}from"react/jsx-runtime";import{useTranslations as v}from"next-intl";import y from"next/link";const b=n.persist,x=`https://guadd-sg-ccs-sing-dev.s3.ap-southeast-1.amazonaws.com/default/default_avatar.png`,S=`/images/mine/img_mine_head_bg.png`;function C({showBackButton:n,isMine:r,enableCustomBackground:i,className:a}){return _(o,{className:e(`flex flex-col relative`,a),children:[_(o,{className:`absolute top-0 p-3 z-10 flex items-center justify-between w-full`,children:[g(t,{variant:`ghost`,size:`icon-xs`,className:e(`h-4 w-4 p-0 hover:bg-transparent`,{invisible:!n}),disabled:!0,children:g(d,{className:`w-4 h-4`})}),g(o,{className:e({invisible:!r}),children:g(f,{})})]}),g(o,{className:i?`h-33.75`:`h-24`,children:g(s,{className:`h-full w-full rounded-none`})}),_(o,{className:`flex-1 px-3`,children:[_(o,{className:`relative flex justify-end`,children:[g(s,{className:`absolute bottom-3 left-0 h-22 w-22 rounded-full`}),g(o,{className:`py-4 h-12`})]}),_(o,{className:`flex items-center justify-between gap-1`,children:[g(s,{className:`h-7 w-[132px]`}),g(s,{className:`h-10 w-[104px] rounded-full shrink-0`})]}),_(o,{className:`min-h-11 pt-1 pb-0 flex flex-col gap-2`,children:[g(s,{className:`h-4 w-[76%]`}),g(s,{className:`h-4 w-[58%]`})]})]})]})}function w({id:s,enableCustomBackground:w=!0,showBackButton:T=!0,requireLogin:E=!1,isEditorPreview:D=!1,className:O,mode:k=`renderer`}){let A=v(`components.pages.profile`),j=D||k===`editor`,M=!j,N=a(),{open:ne}=l(),{isLogin:P,userId:F,token:re}=n(),[ie,I]=h(!1);ee(()=>{if(!b){I(!0);return}I(b.hasHydrated());let e=b.onHydrate(()=>{I(!1)}),t=b.onFinishHydration(()=>{I(!0)});return()=>{e(),t()}},[]);let L=j?!1:P&&!!F&&!!re,R=j?``:F,z=R,B=s==null||!!s&&!!z&&s===z,V=B?[`user-profile`,`mine`]:[`user-profile`,`profile`,s],{data:H,isLoading:U}=u(j?[`editor-preview`,...V]:V,()=>s?i({target_user_id:s,user_id:R||s}):r({user_id:s||R||``}),{staleTime:0,enabled:M&&(!!s||!!R)}),W=te(()=>{let e=H?H.data:void 0;return e?{userId:e.user_id,isFollowing:e.is_following||!1,name:e.nick_name||`User${s??``}`,avatar:e.avatar||x,followingCnt:e.following_count??0,followersCnt:e.follower_count??0,likeCnt:e.like_count??0,signature:e.signature||``,background:e.bg_image||S}:{}},[s,H]),G=j||E&&B&&!L,K=B&&L&&!G,q=!L,J=w&&K,Y=w&&q,ae={name:A(`client.welcomeToPlanet`),description:A(`client.exploreAdventures`),avatar:x,followingCnt:0,followersCnt:0,likeCnt:0,background:S};function X(){ne()}function oe(){N.back()}let se=G?g(t,{className:`rounded-full`,size:`lg`,onClick:X,children:A(`client.loginNow`)}):B?g(y,{href:`/edit`,children:g(t,{variant:`outline`,className:`rounded-full`,children:A(`client.editProfile`)})}):null,Z=G?ae:W,Q=Z.name||``,$=Z.description||Z.signature||``,ce=Z.avatar||``;return M&&U&&!H?g(C,{showBackButton:T,isMine:B,enableCustomBackground:w,className:O}):_(o,{className:e(`flex flex-col relative`,O),children:[_(o,{className:`absolute top-0 p-3 z-10 flex items-center justify-between w-full`,children:[g(t,{variant:`ghost`,size:`icon-xs`,onClick:oe,className:e(`h-4 w-4 p-0 hover:bg-transparent`,{invisible:!T}),children:g(d,{className:`w-4 h-4`})}),g(y,{href:`/settings`,className:e({invisible:!B}),children:g(f,{})})]}),g(m,{isMine:J,enableCustomBackground:w,src:Z.background,onUnauthorizedClick:Y?X:void 0}),_(o,{className:`flex-1 px-3`,children:[_(o,{className:`relative flex justify-end`,children:[g(p,{isMine:K,src:ce,alt:Q||`avatar`,onUnauthorizedClick:q?X:void 0}),g(o,{className:`flex divide-x divide-text1/5 py-4 h-12`})]}),_(o,{className:`flex items-center justify-between gap-1`,children:[P&&B?g(y,{href:`/edit`,children:g(c,{as:`p`,className:`text-text1 max-w-[14em] text-xl overflow-hidden whitespace-nowrap text-ellipsis font-bold `,children:Q})}):g(c,{as:`p`,className:`text-text1 max-w-[14em] text-xl overflow-hidden whitespace-nowrap text-ellipsis font-bold `,children:Q}),se]}),$&&g(o,{className:`min-h-11 pt-1 pb-0`,children:g(c,{as:`p`,className:`text-sm line-clamp-2 break-all text-text1/66`,children:$})})]})]})}export{w as UserProfileHeaderClient};
2
+ "use client";import{cn as e}from"../../../../../utils/cn.mjs";import{Button as t}from"../../../../ui/button.mjs";import{useUserStore as n}from"../../../../../store/modules/user-store.mjs";import{gUserGetUserInfo as r,gUserViewUserInfo as i}from"../../../../../service/generated/client.mjs";import{Box as a}from"../../../../ui/box.mjs";import{Skeleton as o}from"../../../../ui/skeleton.mjs";import{Text as s}from"../../../../ui/text.mjs";import{useLoginModalStore as c}from"../../../../../store/modules/login-modal-store.mjs";import{useRequest as l}from"../../../../../hooks/query/use-query.mjs";import{LeftArrowIcon as u}from"../../../../common/icons/left-arrow.mjs";import{SettingIcon as d}from"../../../../common/icons/setting.mjs";import{UserProfileAvatar as f}from"./user-profile-avatar.mjs";import{UserProfileCoverBackground as ee}from"./user-profile-cover-background.mjs";import{useEffect as te,useMemo as p,useState as m}from"react";import{jsx as h,jsxs as g}from"react/jsx-runtime";import{useTranslations as _}from"next-intl";import v from"next/link";import{useRouter as y}from"next/navigation";const b=n.persist,x=`https://guadd-sg-ccs-sing-dev.s3.ap-southeast-1.amazonaws.com/default/default_avatar.png`,S=`/images/mine/img_mine_head_bg.png`;function C({showBackButton:n,isMine:r,enableCustomBackground:i,className:s}){return g(a,{className:e(`flex flex-col relative`,s),children:[g(a,{className:`absolute top-0 p-3 z-10 flex items-center justify-between w-full`,children:[h(t,{variant:`ghost`,size:`icon-xs`,className:e(`h-4 w-4 p-0 hover:bg-transparent`,{invisible:!n}),disabled:!0,children:h(u,{className:`w-4 h-4`})}),h(a,{className:e({invisible:!r}),children:h(d,{})})]}),h(a,{className:i?`h-33.75`:`h-24`,children:h(o,{className:`h-full w-full rounded-none`})}),g(a,{className:`flex-1 px-3`,children:[g(a,{className:`relative flex justify-end`,children:[h(o,{className:`absolute bottom-3 left-0 h-22 w-22 rounded-full`}),h(a,{className:`py-4 h-12`})]}),g(a,{className:`flex items-center justify-between gap-1`,children:[h(o,{className:`h-7 w-[132px]`}),h(o,{className:`h-10 w-[104px] rounded-full shrink-0`})]}),g(a,{className:`min-h-11 pt-1 pb-0 flex flex-col gap-2`,children:[h(o,{className:`h-4 w-[76%]`}),h(o,{className:`h-4 w-[58%]`})]})]})]})}function w({id:o,enableCustomBackground:w=!0,showBackButton:T=!0,requireLogin:E=!1,isEditorPreview:D=!1,className:O,mode:k=`renderer`}){let A=_(`components.pages.profile`),j=D||k===`editor`,M=!j,ne=y(),{open:re}=c(),{isLogin:N,userId:P,token:F}=n(),[ie,I]=m(!1);te(()=>{if(!b){I(!0);return}I(b.hasHydrated());let e=b.onHydrate(()=>{I(!1)}),t=b.onFinishHydration(()=>{I(!0)});return()=>{e(),t()}},[]);let L=j?!1:N&&!!P&&!!F,R=j?``:P,z=R,B=o==null||!!o&&!!z&&o===z,V=B?[`user-profile`,`mine`]:[`user-profile`,`profile`,o],{data:H,isLoading:U}=l(j?[`editor-preview`,...V]:V,()=>o?i({target_user_id:o,user_id:R||o}):r({user_id:o||R||``}),{staleTime:0,enabled:M&&(!!o||!!R)}),W=p(()=>{let e=H?H.data:void 0;return e?{userId:e.user_id,isFollowing:e.is_following||!1,name:e.nick_name||`User${o??``}`,avatar:e.avatar||x,followingCnt:e.following_count??0,followersCnt:e.follower_count??0,likeCnt:e.like_count??0,signature:e.signature||``,background:e.bg_image||S}:{}},[o,H]),G=j||E&&B&&!L,K=B&&L&&!G,q=!L,J=w&&K,Y=w&&q,ae={name:A(`client.welcomeToPlanet`),description:A(`client.exploreAdventures`),avatar:x,followingCnt:0,followersCnt:0,likeCnt:0,background:S};function X(){re()}function oe(){ne.back()}let se=G?h(t,{className:`rounded-full`,size:`lg`,onClick:X,children:A(`client.loginNow`)}):B?h(v,{href:`/edit`,children:h(t,{variant:`outline`,className:`rounded-full`,children:A(`client.editProfile`)})}):null,Z=G?ae:W,Q=Z.name||``,$=Z.description||Z.signature||``,ce=Z.avatar||``;return M&&U&&!H?h(C,{showBackButton:T,isMine:B,enableCustomBackground:w,className:O}):g(a,{className:e(`flex flex-col relative`,O),children:[g(a,{className:`absolute top-0 p-3 z-10 flex items-center justify-between w-full`,children:[h(t,{variant:`ghost`,size:`icon-xs`,onClick:oe,className:e(`h-4 w-4 p-0 hover:bg-transparent`,{invisible:!T}),children:h(u,{className:`w-4 h-4`})}),h(v,{href:`/settings`,className:e({invisible:!B}),children:h(d,{})})]}),h(ee,{isMine:J,enableCustomBackground:w,src:Z.background,onUnauthorizedClick:Y?X:void 0}),g(a,{className:`flex-1 px-3`,children:[g(a,{className:`relative flex justify-end`,children:[h(f,{isMine:K,src:ce,alt:Q||`avatar`,onUnauthorizedClick:q?X:void 0}),h(a,{className:`flex divide-x divide-text1/5 py-4 h-12`})]}),g(a,{className:`flex items-center justify-between gap-1`,children:[N&&B?h(v,{href:`/edit`,children:h(s,{as:`p`,className:`text-text1 max-w-[14em] text-xl overflow-hidden whitespace-nowrap text-ellipsis font-bold `,children:Q})}):h(s,{as:`p`,className:`text-text1 max-w-[14em] text-xl overflow-hidden whitespace-nowrap text-ellipsis font-bold `,children:Q}),se]}),$&&h(a,{className:`min-h-11 pt-1 pb-0`,children:h(s,{as:`p`,className:`text-sm line-clamp-2 break-all text-text1/66`,children:$})})]})]})}export{w as UserProfileHeaderClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{mergeStyles as e}from"../../../../../utils/styles/helpers.mjs";import{pxToVw as t}from"../../../../../../../utils/helper.mjs";import{useRouter as n}from"../../../../../../../utils/use-compatible-router.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{defaultProps as i}from"../defaults/default-props.mjs";import a from"../../../../../../../assets/icons/left_arrow.mjs";import o from"../../../../../basics/search/variants/simple-search/index.mjs";import{jsx as s,jsxs as c}from"react/jsx-runtime";const l={},u={list:[]};function d({props:d=l,styles:f,events:p,data:m=u}){let h={...i,...d},g=n(),{logo:_,search:v,gap:y=i.gap}=h,{list:b}=m,x=()=>{p?.onSearchClick?.()},S=f?e(f,{}):void 0;return c(r,{as:`header`,className:`w-full bg-black flex justify-between items-center px-[16px] py-[8px] h-11`,style:{...y>0?{gap:t(y)}:void 0,...S},children:[s(`div`,{className:`flex items-center`,children:s(a,{className:`mr-4 cursor-pointer`,onClick:()=>{g.back()}})}),s(o,{props:v,events:{onClick:x}})]})}export{d as default};
2
+ "use client";import{mergeStyles as e}from"../../../../../utils/styles/helpers.mjs";import{pxToVw as t}from"../../../../../../../utils/helper.mjs";import{Box as n}from"../../../../../../ui/box.mjs";import{defaultProps as r}from"../defaults/default-props.mjs";import i from"../../../../../../../assets/icons/left_arrow.mjs";import a from"../../../../../basics/search/variants/simple-search/index.mjs";import{jsx as o,jsxs as s}from"react/jsx-runtime";import{useRouter as c}from"next/navigation";const l={},u={list:[]};function d({props:d=l,styles:f,events:p,data:m=u}){let h={...r,...d},g=c(),{logo:_,search:v,gap:y=r.gap}=h,{list:b}=m,x=()=>{p?.onSearchClick?.()},S=f?e(f,{}):void 0;return s(n,{as:`header`,className:`w-full bg-black flex justify-between items-center px-[16px] py-[8px] h-11`,style:{...y>0?{gap:t(y)}:void 0,...S},children:[o(`div`,{className:`flex items-center`,children:o(i,{className:`mr-4 cursor-pointer`,onClick:()=>{g.back()}})}),o(a,{props:v,events:{onClick:x}})]})}export{d as default};
@@ -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{useRouter as n}from"../../../../utils/use-compatible-router.mjs";import{Box as r}from"../../../ui/box.mjs";import{Text as i}from"../../../ui/text.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,useSearchParams as m}from"next/navigation";function h(e,t){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t).join(``)}...`}function g(g){let{title:_,rows:v=1,clearText:y,confirmDescription:b,storageKey:x=`guest`,onHistoryClick:S,mode:C=`renderer`}=g,w=_??`搜索历史`,T=y??`清空`,E=b??`确定要清除所有搜索历史吗?`,D=l(()=>[`搜索历史1`,`搜索历史2`,`搜索历史3`],[]),[O,k]=u([]),[A,j]=u(!1),M=n(),N=p(),P=m(),F=`search_history_${x}`,I=s(()=>{let e=[];try{let t=localStorage.getItem(F);if(t)try{let n=JSON.parse(t);e=Array.isArray(n)?n:[]}catch{e=[]}k(e)}catch(e){console.error(`Failed to parse search history`,e),k([])}},[F]);c(()=>(I(),t.on(a.SEARCH_HISTORY_UPDATE,I),()=>t.off(a.SEARCH_HISTORY_UPDATE,I)),[I]);let L=()=>{k([]),localStorage.removeItem(F),j(!1),t.emit(a.SEARCH_HISTORY_UPDATE)},R=l(()=>(O.length?O:C===`editor`?D:[]).slice(0,v*10),[O,C,D,v]);if(R.length===0)return null;let z=e=>{if(S){S(e);return}let t=new URLSearchParams(P.toString());t.set(`q`,e);let n=N.includes(`/search-result`)?N:`/search-result`;M.push(`${n}?${t.toString()}`)};return f(r,{className:`px-4 py-2`,children:[f(r,{className:`flex justify-between items-center mb-2`,children:[d(i,{className:`text-[16px] font-bold text-text1`,children:w}),d(e,{variant:`ghost`,size:`sm`,className:`text-text3 text-[12px] p-0 h-auto`,onClick:()=>j(!0),children:T})]}),d(r,{className:`flex flex-wrap gap-2 overflow-hidden`,style:{maxHeight:`${v*30}px`},children:R.map((e,t)=>d(r,{className:`px-3 py-1 bg-bg2 rounded-full cursor-pointer`,onClick:()=>z(e),children:d(i,{className:`text-[14px] text-text2`,children:h(e,8)})},t))}),d(o,{open:A,onOpenChange:j,onConfirm:L,title:``,description:E})]})}export{g 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{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(e,t){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t).join(``)}...`}function g(g){let{title:_,rows:v=1,clearText:y,confirmDescription:b,storageKey:x=`guest`,onHistoryClick:S,mode:C=`renderer`}=g,w=_??`搜索历史`,T=y??`清空`,E=b??`确定要清除所有搜索历史吗?`,D=c(()=>[`搜索历史1`,`搜索历史2`,`搜索历史3`],[]),[O,k]=l([]),[A,j]=l(!1),M=p(),N=f(),P=m(),F=`search_history_${x}`,I=o(()=>{let e=[];try{let t=localStorage.getItem(F);if(t)try{let n=JSON.parse(t);e=Array.isArray(n)?n:[]}catch{e=[]}k(e)}catch(e){console.error(`Failed to parse search history`,e),k([])}},[F]);s(()=>(I(),t.on(i.SEARCH_HISTORY_UPDATE,I),()=>t.off(i.SEARCH_HISTORY_UPDATE,I)),[I]);let L=()=>{k([]),localStorage.removeItem(F),j(!1),t.emit(i.SEARCH_HISTORY_UPDATE)},R=c(()=>(O.length?O:C===`editor`?D:[]).slice(0,v*10),[O,C,D,v]);if(R.length===0)return null;let z=e=>{if(S){S(e);return}let t=new URLSearchParams(P.toString());t.set(`q`,e);let n=N.includes(`/search-result`)?N:`/search-result`;M.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:w}),u(e,{variant:`ghost`,size:`sm`,className:`text-text3 text-[12px] p-0 h-auto`,onClick:()=>j(!0),children:T})]}),u(n,{className:`flex flex-wrap gap-2 overflow-hidden`,style:{maxHeight:`${v*30}px`},children:R.map((e,t)=>u(n,{className:`px-3 py-1 bg-bg2 rounded-full cursor-pointer`,onClick:()=>z(e),children:u(r,{className:`text-[14px] text-text2`,children:h(e,8)})},t))}),u(a,{open:A,onOpenChange:j,onConfirm:L,title:``,description:E})]})}export{g as SearchHistoryClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useRouter as e}from"../../../../utils/use-compatible-router.mjs";import{Box as t}from"../../../ui/box.mjs";import{Input as n}from"../../../ui/input.mjs";import{Text as r}from"../../../ui/text.mjs";import i from"../../../../assets/icons/left_arrow.mjs";import a from"../../../../assets/icons/search.mjs";import o from"../../../../assets/icons/clear.mjs";import{useCallback as s,useState as c}from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";import{usePathname as d,useSearchParams as f}from"next/navigation";function p(e){if(!e||typeof e!=`string`)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>e==null?``:String(e).trim()).filter(Boolean):[]}catch{return[]}}function m(m){let{placeholder:h,defaultPlaceholder:g,searchLabel:_,storageKey:v=`guest`,onSearch:y,mode:b=`renderer`}=m,x=h||(g??`请输入搜索内容`),S=_??`搜索`,C=b===`editor`,[w,T]=c(``),E=e(),D=d(),O=f(),k=`search_history_${v}`,A=s(e=>{if(C)return;let t=e.trim();if(t){try{let e=[t,...p(localStorage.getItem(k)).filter(e=>e!==t)].slice(0,20);localStorage.setItem(k,JSON.stringify(e))}catch(e){console.error(`Failed to save search history`,e)}if(y)y(t);else{let e=new URLSearchParams(O.toString());e.set(`q`,t);let n=D.includes(`/search-result`)?D:`/search-result`;E.push(`${n}?${e.toString()}`)}}},[k,C,y,D,E,O]);return u(t,{className:`px-3 py-2 bg-bg1 flex items-center gap-3 w-full${C?` pointer-events-none`:``}`,children:[l(t,{className:`shrink-0 cursor-pointer active:opacity-70`,onClick:()=>{C||E.back()},children:l(i,{className:`w-4 h-4 text-text1`})}),u(t,{className:`flex-1 flex items-center gap-1 bg-bg2 border border-theme5 rounded-[20px] px-2 py-1.5 overflow-hidden`,children:[l(t,{className:`p-1 shrink-0`,children:l(a,{className:`w-[14px] h-[14px] text-text3`})}),l(n,{className:`flex-1 border-none bg-transparent p-0 h-auto text-[14px] leading-[22px] focus-visible:ring-0 text-text1 placeholder:text-text3`,placeholder:x,value:w,maxLength:128,onChange:e=>T(e.target.value),onKeyDown:e=>e.key===`Enter`&&A(w)}),w&&l(o,{className:`w-[15px] h-[15px] text-text3 shrink-0 cursor-pointer active:opacity-70`,onClick:()=>T(``)})]}),l(t,{className:`shrink-0 cursor-pointer active:opacity-70`,onClick:()=>A(w),children:l(r,{className:`text-[16px] text-text1 leading-[24px] font-normal`,children:S})})]})}export{m as SearchInputClient};
2
+ "use client";import{Box as e}from"../../../ui/box.mjs";import{Input as t}from"../../../ui/input.mjs";import{Text as n}from"../../../ui/text.mjs";import r from"../../../../assets/icons/left_arrow.mjs";import i from"../../../../assets/icons/search.mjs";import a from"../../../../assets/icons/clear.mjs";import{useCallback as o,useState as s}from"react";import{jsx as c,jsxs as l}from"react/jsx-runtime";import{usePathname as u,useRouter as d,useSearchParams as f}from"next/navigation";function p(e){if(!e||typeof e!=`string`)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>e==null?``:String(e).trim()).filter(Boolean):[]}catch{return[]}}function m(m){let{placeholder:h,defaultPlaceholder:g,searchLabel:_,storageKey:v=`guest`,onSearch:y,mode:b=`renderer`}=m,x=h||(g??`请输入搜索内容`),S=_??`搜索`,C=b===`editor`,[w,T]=s(``),E=d(),D=u(),O=f(),k=`search_history_${v}`,A=o(e=>{if(C)return;let t=e.trim();if(t){try{let e=[t,...p(localStorage.getItem(k)).filter(e=>e!==t)].slice(0,20);localStorage.setItem(k,JSON.stringify(e))}catch(e){console.error(`Failed to save search history`,e)}if(y)y(t);else{let e=new URLSearchParams(O.toString());e.set(`q`,t);let n=D.includes(`/search-result`)?D:`/search-result`;E.push(`${n}?${e.toString()}`)}}},[k,C,y,D,E,O]);return l(e,{className:`px-3 py-2 bg-bg1 flex items-center gap-3 w-full${C?` pointer-events-none`:``}`,children:[c(e,{className:`shrink-0 cursor-pointer active:opacity-70`,onClick:()=>{C||E.back()},children:c(r,{className:`w-4 h-4 text-text1`})}),l(e,{className:`flex-1 flex items-center gap-1 bg-bg2 border border-theme5 rounded-[20px] px-2 py-1.5 overflow-hidden`,children:[c(e,{className:`p-1 shrink-0`,children:c(i,{className:`w-[14px] h-[14px] text-text3`})}),c(t,{className:`flex-1 border-none bg-transparent p-0 h-auto text-[14px] leading-[22px] focus-visible:ring-0 text-text1 placeholder:text-text3`,placeholder:x,value:w,maxLength:128,onChange:e=>T(e.target.value),onKeyDown:e=>e.key===`Enter`&&A(w)}),w&&c(a,{className:`w-[15px] h-[15px] text-text3 shrink-0 cursor-pointer active:opacity-70`,onClick:()=>T(``)})]}),c(e,{className:`shrink-0 cursor-pointer active:opacity-70`,onClick:()=>A(w),children:c(n,{className:`text-[16px] text-text1 leading-[24px] font-normal`,children:S})})]})}export{m as SearchInputClient};
@@ -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{useMemo as r}from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{usePathname as o}from"next/navigation";import s from"next/link";const c=[];function l(e){return e.split(`?`)[0].replace(/\/+$/,``)||`/`}function u(e){if(e.configType===1)switch(e.functionPageType){case`搜索`:return`/search`;case`个人中心`:return`/user/mine`;case`内容列表`:return`/video-list?tags=${e.tags}&title=${e.title}`;default:return`/`}let t=(e.domainId??``).toString().trim();return t?`/domain/${t}`:`/`}function d(e,t){let n=l(t);if(e.configType===1){let t=l(u(e).split(`?`)[0]);return n===t||n.startsWith(`${t}/`)}let r=e.domainId.trim();if(!r)return n===`/`||n.startsWith(`/category/`);let i=`/domain/${r}`;return n===i||n.startsWith(`${i}/`)}function f(e,t){return e.findIndex(e=>d(e,t))}function p(l){let{items:d=c,mode:p=`renderer`}=l,m=o(),h=r(()=>{if(p===`editor`)return 0;let e=f(d??[],m);return e>=0?e:0},[d,m,p]),g=r(()=>(d??[]).some(e=>e.label.trim()!==``),[d]);if(!d?.length)return null;function _(e){p===`editor`&&e.preventDefault()}let v=`flex min-w-0 flex-1 cursor-pointer flex-col items-center justify-center ${g?`gap-1`:``}`;return i(t,{className:`fixed bottom-0 left-0 right-0 z-50 h-[var(--tab-bar-height)] border-t border-line1 bg-bg1 py-3 backdrop-blur-[2px] shadow-[0px_-4px_10px_0px_rgba(0,0,0,0.02)]`,children:i(t,{className:`flex w-full items-center`,children:d.map((r,o)=>{let c=h===o,l=c?r.activeIcon:r.icon,d=r.label;return a(s,{href:u(r),className:v,"data-index":o,"data-webview-nav":`spa`,onClick:_,children:[i(t,{className:`relative size-[22px] shrink-0`,children:l?i(e,{src:l,alt:d,fill:!0,className:`object-contain`}):i(t,{"data-active":c,className:`size-full rounded-sm bg-text3 data-[active=true]:bg-theme5`})}),g&&i(n,{"data-active":c,className:`truncate text-center text-[10px] leading-[10px] font-medium min-w-0 max-w-full px-0.5 text-text2 data-[active=true]:text-theme5`,children:d})]},o)})})})}export{p as TabBarClient};
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{useMemo as r}from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import o from"next/link";import{usePathname as s}from"next/navigation";const c=[];function l(e){return e.split(`?`)[0].replace(/\/+$/,``)||`/`}function u(e){if(e.configType===1)switch(e.functionPageType){case`搜索`:return`/search`;case`个人中心`:return`/user/mine`;case`内容列表`:return`/video-list?tags=${e.tags}&title=${e.title}`;default:return`/`}let t=(e.domainId??``).toString().trim();return t?`/domain/${t}`:`/`}function d(e,t){let n=l(t);if(e.configType===1){let t=l(u(e).split(`?`)[0]);return n===t||n.startsWith(`${t}/`)}let r=e.domainId.trim();if(!r)return n===`/`||n.startsWith(`/category/`);let i=`/domain/${r}`;return n===i||n.startsWith(`${i}/`)}function f(e,t){return e.findIndex(e=>d(e,t))}function p(l){let{items:d=c,mode:p=`renderer`}=l,m=s(),h=r(()=>{if(p===`editor`)return 0;let e=f(d??[],m);return e>=0?e:0},[d,m,p]),g=r(()=>(d??[]).some(e=>e.label.trim()!==``),[d]);if(!d?.length)return null;function _(e){p===`editor`&&e.preventDefault()}let v=`flex min-w-0 flex-1 cursor-pointer flex-col items-center justify-center ${g?`gap-1`:``}`;return i(t,{className:`fixed bottom-0 left-0 right-0 z-50 h-[var(--tab-bar-height)] border-t border-line1 bg-bg1 py-3 backdrop-blur-[2px] shadow-[0px_-4px_10px_0px_rgba(0,0,0,0.02)]`,children:i(t,{className:`flex w-full items-center`,children:d.map((r,s)=>{let c=h===s,l=c?r.activeIcon:r.icon,d=r.label;return a(o,{href:u(r),className:v,"data-index":s,"data-webview-nav":`spa`,onClick:_,children:[i(t,{className:`relative size-[22px] shrink-0`,children:l?i(e,{src:l,alt:d,fill:!0,className:`object-contain`}):i(t,{"data-active":c,className:`size-full rounded-sm bg-text3 data-[active=true]:bg-theme5`})}),g&&i(n,{"data-active":c,className:`truncate text-center text-[10px] leading-[10px] font-medium min-w-0 max-w-full px-0.5 text-text2 data-[active=true]:text-theme5`,children:d})]},s)})})})}export{p as TabBarClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useRouter as e}from"../../../../utils/use-compatible-router.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{useMemo as r,useState as i}from"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{usePathname as s,useSearchParams as c}from"next/navigation";const l=[];function u(e,t){if(e.length<=t)return[...e];let n=[...e];for(let e=0;e<t;e++){let t=e+Math.floor(Math.random()*(n.length-e));[n[e],n[t]]=[n[t],n[e]]}return n.slice(0,t)}function d(d){let{title:f,items:p=l,onItemClick:m,mode:h=`renderer`}=d,g=h===`editor`,_=e(),v=s(),y=c(),[b,x]=i(0),S=r(()=>u(p,6),[p,b]);if(p.length===0)return null;let C=e=>{if(m){m(e);return}let t=new URLSearchParams(y.toString());t.set(`q`,e);let n=v.includes(`/search-result`)?v:`/search-result`;_.push(`${n}?${t.toString()}`)};return o(t,{className:`bg-bg1 p-3 flex flex-col gap-3 w-full${g?` pointer-events-none`:``}`,children:[a(t,{className:`flex items-center justify-between w-full`,children:a(n,{className:`text-[18px] font-bold text-text1 leading-[26px]`,children:f})}),a(t,{className:`grid grid-cols-2 gap-x-1 gap-y-1 w-full`,children:S.map((e,r)=>a(t,{className:`flex items-center h-[32px] cursor-pointer active:opacity-70 transition-opacity overflow-hidden`,onClick:()=>C(e.label),children:a(n,{className:`text-[14px] text-text1 leading-[22px] truncate w-full`,children:e.label})},`${b}-${r}`))})]})}export{d as TextRecommendClient};
2
+ "use client";import{Box as e}from"../../../ui/box.mjs";import{Text as t}from"../../../ui/text.mjs";import{useMemo as n,useState as r}from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{usePathname as o,useRouter as s,useSearchParams as c}from"next/navigation";const l=[];function u(e,t){if(e.length<=t)return[...e];let n=[...e];for(let e=0;e<t;e++){let t=e+Math.floor(Math.random()*(n.length-e));[n[e],n[t]]=[n[t],n[e]]}return n.slice(0,t)}function d(d){let{title:f,items:p=l,onItemClick:m,mode:h=`renderer`}=d,g=h===`editor`,_=s(),v=o(),y=c(),[b,x]=r(0),S=n(()=>u(p,6),[p,b]);if(p.length===0)return null;let C=e=>{if(m){m(e);return}let t=new URLSearchParams(y.toString());t.set(`q`,e);let n=v.includes(`/search-result`)?v:`/search-result`;_.push(`${n}?${t.toString()}`)};return a(e,{className:`bg-bg1 p-3 flex flex-col gap-3 w-full${g?` pointer-events-none`:``}`,children:[i(e,{className:`flex items-center justify-between w-full`,children:i(t,{className:`text-[18px] font-bold text-text1 leading-[26px]`,children:f})}),i(e,{className:`grid grid-cols-2 gap-x-1 gap-y-1 w-full`,children:S.map((n,r)=>i(e,{className:`flex items-center h-[32px] cursor-pointer active:opacity-70 transition-opacity overflow-hidden`,onClick:()=>C(n.label),children:i(t,{className:`text-[14px] text-text1 leading-[22px] truncate w-full`,children:n.label})},`${b}-${r}`))})]})}export{d as TextRecommendClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useRouter as e}from"../../../utils/use-compatible-router.mjs";import{replaceAtUserElementHtmlStr as t}from"../../../utils/tools.mjs";import{Fragment as n,jsx as r}from"react/jsx-runtime";import i from"html-react-parser";const a=[];function o(o){let{text:s=``,atUsers:c=a,enableNavigation:l=!0}=o,u=t({text:s,atUsers:c}),d=e();return r(n,{children:i(u,{replace:e=>{if(e.type===`tag`&&e.attribs&&e.attribs.class===`mention`){let t=e.attribs[`data-id`];if(!t)return e;let n=e.children&&e.children[0]?e.children[0].data:``;return r(`span`,{className:`mention text-theme1 transition-colors ${l?`hover:text-theme1/80 cursor-pointer`:``}`,"data-id":t,style:{pointerEvents:l?`auto`:`none`},onClick:l?e=>{e.preventDefault(),e.stopPropagation();let n=`/profile/${t}`;d.push(n)}:void 0,children:n})}return e}})})}export{o as default};
2
+ "use client";import{replaceAtUserElementHtmlStr as e}from"../../../utils/tools.mjs";import{Fragment as t,jsx as n}from"react/jsx-runtime";import{useRouter as r}from"next/navigation";import i from"html-react-parser";const a=[];function o(o){let{text:s=``,atUsers:c=a,enableNavigation:l=!0}=o,u=e({text:s,atUsers:c}),d=r();return n(t,{children:i(u,{replace:e=>{if(e.type===`tag`&&e.attribs&&e.attribs.class===`mention`){let t=e.attribs[`data-id`];if(!t)return e;let r=e.children&&e.children[0]?e.children[0].data:``;return n(`span`,{className:`mention text-theme1 transition-colors ${l?`hover:text-theme1/80 cursor-pointer`:``}`,"data-id":t,style:{pointerEvents:l?`auto`:`none`},onClick:l?e=>{e.preventDefault(),e.stopPropagation();let n=`/profile/${t}`;d.push(n)}:void 0,children:r})}return e}})})}export{o as default};