@funhub/platform 0.2.12 → 0.2.14
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.
- package/dist/biz.mjs +1 -1
- package/dist/common.d.mts +2 -1
- package/dist/common.mjs +1 -1
- package/dist/components/biz/basics/logo/variants/basic-logo/runtime/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/ad-match.mjs +1 -1
- package/dist/components/biz/business/advertisement/banner-ad/client.d.mts +3 -1
- package/dist/components/biz/business/advertisement/banner-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/banner-ad/schema.d.mts +12 -0
- package/dist/components/biz/business/advertisement/floating-ad/client.d.mts +2 -0
- package/dist/components/biz/business/advertisement/floating-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/floating-ad/schema.d.mts +12 -0
- package/dist/components/biz/business/advertisement/icon-ad/client.d.mts +3 -1
- package/dist/components/biz/business/advertisement/icon-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/icon-ad/schema.d.mts +12 -0
- package/dist/components/biz/business/advertisement/popup-ad/client.d.mts +3 -1
- package/dist/components/biz/business/advertisement/popup-ad/client.mjs +2 -2
- package/dist/components/biz/business/advertisement/popup-ad/schema.d.mts +3 -1
- package/dist/components/biz/business/advertisement/text-ad/client.d.mts +3 -1
- package/dist/components/biz/business/advertisement/text-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/text-ad/schema.d.mts +12 -0
- package/dist/components/biz/business/detail/shared/detail-info-tags.mjs +1 -1
- package/dist/components/biz/business/detail/shared/detail-info-title.mjs +1 -1
- package/dist/components/biz/business/detail/shared/detail-operate.mjs +1 -1
- package/dist/components/biz/business/detail/shared/video-hero.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-server-data.mjs +1 -1
- package/dist/components/biz/business/image-text-recommend/client.mjs +1 -1
- package/dist/components/biz/business/large-feature-grid/client.mjs +1 -1
- package/dist/components/biz/business/nav-bar/variants/basic-nav-bar/runtime/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/user-profile-avatar.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/shell.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/tracking.mjs +2 -0
- package/dist/components/biz/business/search-bar/variants/basic-search-bar/runtime/client.mjs +1 -1
- package/dist/components/biz/business/search-history/client.mjs +1 -1
- package/dist/components/biz/business/tab-bar/client.mjs +1 -1
- package/dist/components/common/analytics-init/analytics-init.mjs +1 -1
- package/dist/components/common/analytics-init/index.d.mts +2 -1
- package/dist/components/common/analytics-init/sensor-init.d.mts +20 -0
- package/dist/components/common/analytics-init/sensor-init.mjs +2 -0
- package/dist/components/common/list/user-activity-list/user-activity-list-item.d.mts +2 -0
- package/dist/components/common/list/user-activity-list/user-activity-list-item.mjs +1 -1
- package/dist/components/common/list/user-activity-list/user-activity-list.d.mts +2 -0
- package/dist/components/common/list/user-activity-list/user-activity-list.mjs +1 -1
- package/dist/components/common/list/waterfall-recommend/waterfall-recommend.d.mts +4 -1
- package/dist/components/common/list/waterfall-recommend/waterfall-recommend.mjs +1 -1
- package/dist/components/common/login-dialog/login-dialog.mjs +1 -1
- package/dist/components/common/series-episodes/index.mjs +1 -1
- package/dist/components/common/top-nav-bar/client.mjs +1 -1
- package/dist/components/common/video-player/index.d.mts +2 -0
- package/dist/components/common/video-player/index.mjs +3 -3
- package/dist/components/common/video-player/preroll-skip-button-content.mjs +2 -0
- package/dist/components/common/video-player/video-blind-ad-overlay.mjs +1 -1
- package/dist/components/common/video-player/video-preroll-ad-overlay.mjs +2 -0
- package/dist/components/common/video-player/video-preroll-ad.mjs +2 -0
- package/dist/components/pages/(follow)/_components/header-nav/index.mjs +1 -1
- package/dist/components/pages/collection-add/page.mjs +1 -1
- package/dist/components/pages/collection-create/form.mjs +1 -1
- package/dist/components/pages/collection-detail/detail.mjs +1 -1
- package/dist/components/pages/edit/page.mjs +1 -1
- package/dist/components/pages/feed-series/feed-series-client.mjs +1 -1
- package/dist/components/pages/feedback/_components/feedback-form.mjs +1 -1
- package/dist/components/pages/fullscreen-feed/page.mjs +1 -1
- package/dist/components/pages/home/client.mjs +1 -1
- package/dist/components/pages/home/index.mjs +1 -1
- package/dist/components/pages/login/index.mjs +1 -1
- package/dist/components/pages/login/login-client.mjs +1 -1
- package/dist/components/pages/login/register.mjs +1 -1
- package/dist/components/pages/login/tracking.mjs +2 -0
- package/dist/components/pages/post-detail/post-detail-client.mjs +1 -1
- package/dist/components/pages/publish/page-client.mjs +1 -1
- package/dist/components/pages/search/hot-recommend.mjs +1 -1
- package/dist/components/pages/search/page-client.mjs +1 -1
- package/dist/components/pages/search/search-result/search-user.mjs +1 -1
- package/dist/components/pages/search/search-result/search-video-info.mjs +1 -1
- package/dist/components/pages/search/search-result/shared.mjs +1 -1
- package/dist/components/pages/search/tracking.mjs +2 -0
- package/dist/components/pages/search-result/page-client.mjs +1 -1
- package/dist/components/pages/search-result/tracking.mjs +2 -0
- package/dist/components/pages/settings/_components/settings.mjs +1 -1
- package/dist/components/pages/user-follow/_components/post-tab.mjs +1 -1
- package/dist/components/pages/video-detail/video-detail-client.mjs +1 -1
- package/dist/components/pages/video-list/video-list-client.mjs +1 -1
- package/dist/components/ui/badge.d.mts +1 -1
- package/dist/components/ui/button.d.mts +1 -1
- package/dist/components/ui/image.d.mts +4 -4
- package/dist/components/ui/link.mjs +1 -1
- package/dist/types.d.mts +166 -33
- package/dist/utils/tracking.d.mts +231 -0
- package/dist/utils/tracking.mjs +2 -0
- package/dist/utils.d.mts +2 -1
- package/dist/utils.mjs +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionUnifiedBatchLikeDislike as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{Text as a}from"../../../../../../ui/text.mjs";import{useMutation as o,usePaginated as s,useUpdateRequest as c}from"../../../../../../../hooks/query/use-query.mjs";import{PostList as l}from"../../../../../../common/list/post-list/post-list.mjs";import{
|
|
2
|
+
"use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionUnifiedBatchLikeDislike as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{Text as a}from"../../../../../../ui/text.mjs";import{useMutation as o,usePaginated as s,useUpdateRequest as c}from"../../../../../../../hooks/query/use-query.mjs";import{PostList as l}from"../../../../../../common/list/post-list/post-list.mjs";import{trackProfilePageClick as u}from"../../../tracking.mjs";import{ProfileMainEmptyState as d}from"../../empty-state.mjs";import{CollectVideoWaterfall as f}from"../collect-tab/video-waterfall.mjs";import{getLikeData as ee,likeContentType as p}from"../../utils.mjs";import{useEffect as m,useMemo as h,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import{toast as y}from"sonner";import{useTranslations as b}from"next-intl";import{parseAsString as x,useQueryState as te}from"nuqs";function S(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}function C(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n?.name||n?.text||n?.content||``,coverImage:n?.cover_image_thumbnail||n?.cover_image||n?.cover_horizontal_image_thumbnail||``,publishTime:r??0}}function w(e){let{detail:t}=e,{user_info:n,info:r,statics_cnt:i,publish_time:a,parent_content_info:o}=t,s=(Array.isArray(r?.tags)?r.tags:[]).map(e=>typeof e==`string`?e.trim():e&&typeof e==`object`&&`name`in e?String(e.name||``).trim():``).find(Boolean)||``,c=String(r?.img_type||``).trim().toLowerCase(),l=c===`long`||!c&&!!r?.cover_horizontal_image_thumbnail,u=l?r?.cover_horizontal_image_thumbnail||r?.img_x||r?.cover_image_thumbnail||r?.img_y||r?.cover_image||``:r?.cover_image_thumbnail||r?.img_y||r?.cover_horizontal_image_thumbnail||r?.img_x||r?.cover_image||``;return{id:e.id,is_more_link:r?.is_more_link||!1,title:r?.name||r?.text||r?.content||``,coverImage:u,duration:Number(r?.video_duration??0),progress:e.content_play_progress?.percent??0,seriesNum:e.content_play_progress?.series_num,authorName:n?.name||``,viewCount:r?.play_count??i?.browse_cnt??0,publishTime:a??0,type:o?.type,imgType:c||(l?`long`:`short`),score:r?.score,metaPrimaryText:s}}const T=[`video`,`post`];function E({mode:E=`renderer`,targetUserId:D,queryKeyPrefix:O,isMine:ne=!1}){let k=b(`components.pages.profile.components.tabs`),A=E===`renderer`,j=O??[],[M,N]=te(`likeTab`,x.withDefault(`video`)),P=h(()=>T.includes(M)?M:`video`,[M]),[F,I]=g(!1),[L,R]=g(()=>new Set),z=t(e=>e.userId),B=c(),V=[...j,`user-like-video`],H=[...j,`user-like-post`],U=s({key:V,initialPageParam:1,async queryFn(e){return ee({targetUserId:D,page:e,contentType:p.video})},options:{staleTime:0,enabled:A},getNextPageParam(e,t){if(typeof e?.data?.has_more==`boolean`)return e.data.has_more?t.length+1:void 0;if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=s({key:H,options:{staleTime:0,enabled:A},initialPageParam:1,async queryFn(e){return{data:{list:[],total:0,has_more:!1}}},getNextPageParam(e,t){if(typeof e?.data?.has_more==`boolean`)return e.data.has_more?t.length+1:void 0;if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),G=P===`video`?U:W,K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(w))??[],q=W.data?.pages.flatMap(e=>(e.data?.list??[]).map(C))??[],J=P===`video`?K:q,Y=P===`video`?K.length===0&&!G.isFetching:q.length===0&&!G.isFetching,X=new Set(J.map(e=>e.id)),Z=P===`video`,{mutateAsync:re,isPending:Q}=o(async e=>await n({app_id:0,user_id:z,action:`cancel_like`,content_ids:e,content_type:Z?1:2}));m(()=>{R(new Set)},[P]),m(()=>{M!==P&&N(P)},[P,M,N]);let ie=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ae=()=>{L.size===X.size&&X.size>0?R(new Set):R(new Set(X))},oe=async()=>{if(!(L.size===0||Q)){if(!z){y.error(k(`likeTab.pleaseLogin`));return}try{let e=Array.from(L),t=await re(e);if(t.code===0){y.success(k(`likeTab.unlikedSuccess`));let t=new Set(e);B(Z?V:H,e=>S(e,t,e=>e.id)),R(new Set),I(!1)}else y.error(t.message||k(`likeTab.unlikeFailed`))}catch(e){console.error(`取消点赞失败`,e),y.error(k(`likeTab.operationFailed`))}}},$=async()=>{A&&await G.fetchNextPage()};return v(r,{children:[_(r,{className:``,onClick:e=>{u(e,`content_item`)},children:P===`video`?Y?_(d,{text:k(`likeTab.emptyContent`)}):_(f,{list:K,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,emptyText:k(`likeTab.emptyContent`)}):Y?_(d,{text:k(`likeTab.emptyContent`)}):_(l,{list:q,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,emptyText:k(`likeTab.emptyContent`),isEditMode:F,selectedIds:L,onToggleSelection:ie})}),F&&v(r,{className:`fixed left-0 z-10 flex w-full items-center justify-between bg-bg1 px-3 py-2 bottom-[var(--tab-bar-occupied-height)]`,children:[v(r,{className:`flex items-center gap-2`,children:[_(i,{checked:L.size===X.size&&X.size>0,onCheckedChange:ae}),_(a,{className:`text-sm text-text1`,children:k(`likeTab.selectAll`)})]}),_(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Q,onClick:oe,children:k(Q?`likeTab.processing`:`likeTab.delete`)})]})]})}export{E as LikeTab};
|
package/dist/components/biz/business/search-bar/variants/basic-search-bar/runtime/client.mjs
CHANGED
|
@@ -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{
|
|
2
|
+
"use client";import{mergeStyles as e}from"../../../../../utils/styles/helpers.mjs";import{pxToVw as t}from"../../../../../../../utils/helper.mjs";import{trackPageClick as n}from"../../../../../../../utils/tracking.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import i from"../../../../../basics/logo/variants/basic-logo/index.mjs";import a from"../../../../../basics/search/variants/basic-search/index.mjs";import{defaultProps as o}from"../defaults/default-props.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{logo:h,search:g,gap:_=o.gap,pageKey:v=`home`,pageName:y=`首页`}={...o,...d},{list:b}=m;function x(){p?.onLogoClick?.()}function S(e,t){p?.onLogoChannelChange?.(e,t)}function C(){n(v,y,null,`search_bar`),p?.onSearchClick?.()}let w=f?e(f,{}):void 0;return c(r,{as:`header`,className:`w-full flex items-center px-[12px] py-[8px]`,style:{..._>0?{gap:t(_)}:void 0,...w},children:[s(i,{props:h,events:{onClick:x,onChannelChange:S},data:b}),s(a,{props:g,events:{onClick:C}})]})}export{d as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import e from"../../../../utils/event-bus.mjs";import{useUserStore as t}from"../../../../store/modules/user-store.mjs";import{
|
|
2
|
+
"use client";import e from"../../../../utils/event-bus.mjs";import{useUserStore as t}from"../../../../store/modules/user-store.mjs";import{trackKeywordClick as n}from"../../../../utils/tracking.mjs";import{useRouter as r}from"../../../../utils/use-compatible-router.mjs";import{Box as i}from"../../../ui/box.mjs";import{Text as a}from"../../../ui/text.mjs";import{eventKey as o}from"../../../../constants/event-key.mjs";import{useSearchHistory as s}from"../../../../hooks/use-search-history.mjs";import{DeleteConfirmDialog as c}from"../../../common/delete-confirm-dialog/delete-confirm-dialog.mjs";import{DeleteIcon as l}from"../../../common/icons/delete.mjs";import{useLayoutEffect as u,useMemo as d,useRef as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{usePathname as g,useSearchParams as _}from"next/navigation";function v(e,t){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t).join(``)}...`}function y(y){let{title:b,rows:x=2,clearText:S,confirmDescription:C,onHistoryClick:w,mode:T=`renderer`}=y,E=T===`editor`,D=b??`搜索历史`,O=S??`清空`,k=C??`确定要清除所有搜索历史吗?`,A=d(()=>[`海市蜃楼`,`迷雾追凶`,`夜行者`,`狂飙`,`三大队`,`破冰行动`],[]),[j,M]=p(!1),[N,P]=p(null),F=f(null),I=f([]),L=f(null),R=r(),z=g(),B=_(),{userInfo:V}=t(),{history:H,addHistory:U,clearHistory:W}=s({storageKey:V?.user_id||`guest`}),G=()=>{W(),M(!1),e.emit(o.SEARCH_HISTORY_UPDATE)},K=d(()=>(H.length?H:T===`editor`?A:[]).slice(0,x*10),[H,T,A,x]);if(u(()=>{if(K.length===0){P(null);return}let e=F.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect(),n=[];I.current.slice(0,K.length).forEach(e=>{if(!e)return;let r=e.getBoundingClientRect(),i=Math.round(r.top-t.top),a=Math.round(r.bottom-t.top),o=n.find(e=>Math.abs(e.top-i)<=1);if(o){o.bottom=Math.max(o.bottom,a);return}n.push({top:i,bottom:a})}),n.sort((e,t)=>e.top-t.top);let r=n.slice(0,x).reduce((e,t)=>Math.max(e,t.bottom),0);P(e=>e===r?e:r)},n=()=>{L.current!=null&&cancelAnimationFrame(L.current),L.current=requestAnimationFrame(()=>{L.current=null,t()})};if(n(),typeof ResizeObserver>`u`)return()=>{L.current!=null&&(cancelAnimationFrame(L.current),L.current=null)};let r=new ResizeObserver(()=>{n()});return r.observe(e),I.current.slice(0,K.length).forEach(e=>{e&&r.observe(e)}),()=>{r.disconnect(),L.current!=null&&(cancelAnimationFrame(L.current),L.current=null)}},[K,x]),K.length===0)return null;let q=(e,t)=>{if(n({keyword:e,click_item_id:``,click_item_type_key:``,click_item_type_name:``,click_position:t,search_trace_id:``}),U(e),w){w(e);return}let r=new URLSearchParams(B.toString());r.set(`q`,e);let i=z.includes(`/search-result`)?z:`/search-result`;R.push(`${i}?${r.toString()}`)};return h(i,{className:E?`mt-[24px] px-[16px] py-[16px]`:`mt-[24px] px-[16px] py-0`,children:[h(i,{className:`mb-[15px] flex items-center justify-between`,children:[m(a,{className:`font-['PingFang_SC'] text-[16px] font-medium not-italic leading-normal text-white`,children:D}),m(`button`,{type:`button`,"aria-label":O,className:`flex h-[24px] w-[24px] shrink-0 items-center justify-center text-white/50`,onClick:()=>M(!0),children:m(l,{className:`h-[24px] w-[24px]`})})]}),m(i,{ref:F,className:`flex flex-wrap content-start items-center gap-[6px] overflow-hidden`,style:N?{maxHeight:`${N}px`}:void 0,children:K.map((e,t)=>m(i,{ref:e=>{I.current[t]=e},className:`flex min-w-[56px] cursor-pointer items-center justify-center rounded-full px-[8px] py-[4px] ${E?`bg-[#1F1F1F]/10`:`bg-white/20`}`,onClick:()=>q(e,t),children:m(a,{className:`max-w-full whitespace-nowrap font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[20px] text-white`,children:v(e,8)})},t))}),m(c,{open:j,onOpenChange:M,onConfirm:G,title:``,description:k})]})}export{y as SearchHistoryClient};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{
|
|
2
|
+
"use client";import{trackNavigation as e}from"../../../../utils/tracking.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{useMemo as i}from"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{usePathname as s}from"next/navigation";import c from"next/link";const l=[],u={backgroundColor:`rgba(5, 1, 15, 0.9)`,backdropFilter:`blur(4px)`,WebkitBackdropFilter:`blur(4px)`,paddingBottom:`env(safe-area-inset-bottom, 0px)`},d={background:`rgba(1, 0, 2, 0.80)`,boxShadow:`0 12px 100px rgba(255, 255, 255, 0.20)`,backdropFilter:`blur(8px)`,WebkitBackdropFilter:`blur(8px)`};function f(e){return e.split(`?`)[0].replace(/\/+$/,``)||`/`}function p(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 m(e,t){let n=f(t);if(e.configType===1){let t=f(p(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 h(e,t){return e.findIndex(e=>m(e,t))}function g(e){return typeof e.show_nav_name==`boolean`?e.show_nav_name:typeof e.showNavName==`boolean`?e.showNavName:!0}function _(f){let{items:m=l,mode:_=`renderer`}=f,v=s(),y=i(()=>{if(_===`editor`)return 0;let e=h(m??[],v);return e>=0?e:0},[m,v,_]),b=i(()=>(m??[]).some(e=>g(e)&&e.label.trim()!==``),[m]);if(!m?.length)return null;function x(t,n){_===`editor`?t.preventDefault():e({navigation_key:`navigation_${n.label}`,navigation_name:n.label})}let S=`size-full rounded-[6px] bg-white/20`;return a(n,{as:`nav`,"aria-label":`Bottom navigation`,className:`fixed bottom-0 left-0 right-0 z-50 flex flex-col items-center`,style:u,children:a(n,{className:`my-[4px] flex h-[56px] w-[358px] items-center justify-between rounded-[100px] px-[40px]`,style:d,children:m.map((e,i)=>{let s=y===i,l=s?e.activeIcon:e.icon,u=e.label,d=g(e)&&u.trim()!==``,f=p(e),m=b?s?`gap-[5px]`:`gap-[4px]`:``,h=s?`whitespace-nowrap text-center text-[12px] leading-[16px] font-normal text-[#C043E8]`:`whitespace-nowrap text-center text-[12px] leading-[16px] font-normal text-[#BFBFBF]`;return o(c,{href:f,className:`flex flex-col items-center justify-center ${m}`,"aria-current":s?`page`:void 0,"data-index":i,"data-webview-nav":`spa`,onClick:t=>x(t,e),children:[a(n,{className:`relative size-5 shrink-0`,children:l?a(t,{src:l,alt:u,fill:!0,className:`object-contain`}):a(n,{className:s?`${S} bg-[#C043E8]`:S})}),b&&d?a(r,{"data-active":s,className:h,children:u}):null]},i)})})})}export{_ as TabBarClient};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{useUserStore as e}from"../../../store/modules/user-store.mjs";import{useEffect as t,useRef as n}from"react";const r=`funhub-web-sdk-script`;function i(e){return{appId:process.env.NEXT_PUBLIC_TRACK_APP_ID
|
|
2
|
+
"use client";import{useUserStore as e}from"../../../store/modules/user-store.mjs";import{useEffect as t,useRef as n}from"react";const r=`funhub-web-sdk-script`;function i(e){return{appId:process.env.NEXT_PUBLIC_TRACK_APP_ID,uid:e||``,channel:process.env.NEXT_PUBLIC_TRACK_CHANNEL,domain:process.env.NEXT_PUBLIC_TRACK_DOMAIN,prod:process.env.NODE_ENV===`production`}}function a(){return typeof window>`u`||window.WebSDK?Promise.resolve():(window.__funhubWebSdkLoader||(window.__funhubWebSdkLoader=new Promise((e,t)=>{let n=document.getElementById(r);if(n){n.addEventListener(`load`,()=>e(),{once:!0}),n.addEventListener(`error`,()=>t(Error(`load web sdk failed`)),{once:!0});return}let i=document.createElement(`script`);i.id=r,i.async=!0,i.src=`/web-sdk-v1.js`,i.onload=()=>e(),i.onerror=()=>t(Error(`load web sdk failed`)),document.head.appendChild(i)})),window.__funhubWebSdkLoader)}function o(){let r=e(e=>e.userId),o=n(``);return t(()=>{let e=!1;async function t(){if(await a(),e||!window.WebSDK?.init)return;let t=i(r),n=JSON.stringify(t);if(n===o.current)return;window.WebSDK.init(t);let s=window.WebSDK.track.bind(window.WebSDK);window.WebSDK.track=e=>s(e),o.current=n}return t(),()=>{e=!0}},[r]),null}export{o as AnalyticsInit};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
//#region components/common/analytics-init/sensor-init.d.ts
|
|
3
|
+
declare global {
|
|
4
|
+
interface Window {
|
|
5
|
+
sensorsDataAnalytic201505?: {
|
|
6
|
+
init: (options: Record<string, unknown>) => void;
|
|
7
|
+
quick: (method: string) => void;
|
|
8
|
+
track: (event: string, properties?: Record<string, unknown>) => void;
|
|
9
|
+
};
|
|
10
|
+
sensors?: Window['sensorsDataAnalytic201505'];
|
|
11
|
+
__funhubSensorSdkLoader?: Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 在应用根部初始化神策埋点 SDK,初始化后挂载到 window.sensors 供全局使用。
|
|
16
|
+
* 使用模块级 sensorInitialized 标志确保跨组件重挂载只初始化一次。
|
|
17
|
+
*/
|
|
18
|
+
declare function SensorInit(): null;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { SensorInit };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{userSelectors as e}from"../../../store/modules/user-store.mjs";import{useEffect as t}from"react";const n=`funhub-sensor-sdk-script`;let r=!1;function i(){let e=`__funhub_device_id`,t=localStorage.getItem(e);return t||(t=crypto.randomUUID().replace(/-/g,``),localStorage.setItem(e,t)),t}function a(){let e=`__funhub_session_id`,t=sessionStorage.getItem(e);return t||(t=crypto.randomUUID().replace(/-/g,``),sessionStorage.setItem(e,t)),t}function o(){let e=navigator.userAgent;return/android/i.test(e)?`Android`:/iPad|iPhone|iPod/.test(e)?`iOS`:`PC`}function s(){return{channel:process.env.NEXT_PUBLIC_TRACK_CHANNEL||``,event_id:crypto.randomUUID().replace(/-/g,``),app_id:process.env.NEXT_PUBLIC_TRACK_APP_ID||``,uid:e.getUserId()||``,sid:a(),client_ts:Math.floor(Date.now()/1e3),device:o(),device_id:i(),user_agent:navigator.userAgent,device_brand:``,device_model:``}}function c(){return{server_url:process.env.NEXT_PUBLIC_SENSOR_SERVER_URL,is_track_single_page:!1,use_client_time:!0,send_type:`beacon`,heatmap:{clickmap:`not_collect`,scroll_notice_map:`not_collect`}}}function l(){return typeof window>`u`||window.sensorsDataAnalytic201505?Promise.resolve():(window.__funhubSensorSdkLoader||(window.__funhubSensorSdkLoader=new Promise((e,t)=>{let r=document.getElementById(n);if(r){r.addEventListener(`load`,()=>e(),{once:!0}),r.addEventListener(`error`,()=>t(Error(`load sensor sdk failed`)),{once:!0});return}let i=document.createElement(`script`);i.id=n,i.async=!0,i.src=`/sensorsdata.js`,i.onload=()=>e(),i.onerror=()=>t(Error(`load sensor sdk failed`)),document.head.appendChild(i)})),window.__funhubSensorSdkLoader)}function u(){return t(()=>{let e=!1;async function t(){if(r||(await l(),e))return;let t=window.sensorsDataAnalytic201505;if(!t)return;let n=c();if(!n||r)return;r=!0,t.init(n),t.quick(`autoTrack`);let i=t.track.bind(t);t.track=(e,t)=>{let n={...s()};return n.payload={...t},i(e,n)},window.sensors=t}return t(),()=>{e=!0}},[]),null}export{u as SensorInit};
|
|
@@ -94,6 +94,8 @@ interface UserActivityListItemProps {
|
|
|
94
94
|
onActionSuccess?: () => void;
|
|
95
95
|
/** 收藏状态变化回调 */
|
|
96
96
|
onCollectChange?: (contentId: string, isCollected: boolean) => void;
|
|
97
|
+
/** 点击内容主体并跳转时的额外回调,用于外部埋点等场景。 */
|
|
98
|
+
onItemClick?: (contentId: string) => void;
|
|
97
99
|
}
|
|
98
100
|
/**
|
|
99
101
|
* 用户动态列表项
|
|
@@ -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{Avatar as n,AvatarFallback as r,AvatarImage as i}from"../../../ui/avatar.mjs";import{Box as a}from"../../../ui/box.mjs";import{Checkbox as o}from"../../../ui/checkbox.mjs";import{Text as s}from"../../../ui/text.mjs";import{Time as c}from"../../../ui/time.mjs";import{useMediaPreview as l}from"../../media-preview/index.mjs";import{useContentOperate as u}from"../../../../hooks/use-content-operate.mjs";import d from"../../../../assets/icons/detail/video_play.mjs";import{ActivityCommentButton as f,ActivityDeleteButton as p,ActivityDislikeButton as ee,ActivityLikeButton as te,ActivityShareButton as m}from"./user-activity-list-actions.mjs";import{useEffect as h,useRef as ne,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import{toast as y}from"sonner";import{useTranslations as b}from"next-intl";const x=[],
|
|
2
|
+
"use client";import{useRouter as e}from"../../../../utils/use-compatible-router.mjs";import{Image as t}from"../../../ui/image.mjs";import{Avatar as n,AvatarFallback as r,AvatarImage as i}from"../../../ui/avatar.mjs";import{Box as a}from"../../../ui/box.mjs";import{Checkbox as o}from"../../../ui/checkbox.mjs";import{Text as s}from"../../../ui/text.mjs";import{Time as c}from"../../../ui/time.mjs";import{useMediaPreview as l}from"../../media-preview/index.mjs";import{useContentOperate as u}from"../../../../hooks/use-content-operate.mjs";import d from"../../../../assets/icons/detail/video_play.mjs";import{ActivityCommentButton as f,ActivityDeleteButton as p,ActivityDislikeButton as ee,ActivityLikeButton as te,ActivityShareButton as m}from"./user-activity-list-actions.mjs";import{useEffect as h,useRef as ne,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import{toast as y}from"sonner";import{useTranslations as b}from"next-intl";const x=[],re={post:2};function S({medias:e=x,className:n=``,onItemClick:r}){let i=b(`components.ui.list.userActivityList`),o=(e||[]).filter(Boolean).slice(0,9);if(!o.length)return null;function s(e){r?.(e)}function c(e,n,o){let{is_video:c,media_url:l,cover_image:u}=e||{},f=!!c,p=f?u||l||``:l||``;return p?v(a,{className:o||`relative w-full h-full`,onClick:e=>{r&&(e.stopPropagation(),e.preventDefault(),s(n))},children:[_(t,{src:p,alt:i(`userActivityListItem.mediaAlt`),fill:!0,className:`object-cover`}),f&&_(a,{className:`absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-[rgba(0,0,0,0.5)] rounded-full`,children:_(d,{width:36,height:36})})]},n):null}if(o.length===1){let{is_video:e,media_url:t,cover_image:r}=o[0]||{};return _(a,{className:n,children:_(a,{className:`w-full rounded-xl overflow-hidden`,children:c({is_video:e,media_url:t,cover_image:r,__src:e?r||t||``:t||``},0,`relative w-full aspect-square`)})})}return o.length===2?_(a,{className:n,children:_(a,{className:`w-full flex gap-0.5 rounded-xl overflow-hidden`,children:o.map((e,t)=>_(a,{className:`flex-1 aspect-square relative`,children:c(e,t)},t))})}):o.length===3?_(a,{className:n,children:v(a,{className:`w-full h-89.25 flex gap-0.5 rounded-xl overflow-hidden`,children:[_(a,{className:`w-[56.65%] h-full relative`,children:c(o[0],0)}),_(a,{className:`flex-1 flex flex-col gap-0.5`,children:o.slice(1).map((e,t)=>_(a,{className:`w-full flex-1 relative`,children:c(e,t+1)},t))})]})}):o.length===4?_(a,{className:n,children:_(a,{className:`w-full h-89.25 rounded-xl overflow-hidden grid grid-cols-2 grid-rows-2 gap-0.5`,children:o.map((e,t)=>_(a,{className:`w-full h-full relative`,children:c(e,t)},t))})}):o.length===5?_(a,{className:n,children:v(a,{className:`w-full rounded-xl overflow-hidden flex flex-col gap-0.5`,children:[_(a,{className:`w-full h-49.5 flex gap-0.5`,children:o.slice(0,2).map((e,t)=>_(a,{className:`flex-1 h-full relative`,children:c(e,t)},t))}),_(a,{className:`w-full h-33.5 flex gap-0.5`,children:o.slice(2).map((e,t)=>_(a,{className:`flex-1 h-full relative`,children:c(e,t+2)},t))})]})}):o.length===6?_(a,{className:n,children:v(a,{className:`w-full rounded-xl overflow-hidden flex flex-col gap-0.5`,children:[v(a,{className:`w-full h-67.5 flex gap-0.5`,children:[_(a,{className:`w-67.5 h-full relative`,children:c(o[0],0)}),_(a,{className:`flex-1 grid grid-cols-1 grid-rows-2 gap-0.5`,children:o.slice(1,3).map((e,t)=>_(a,{className:`w-full h-full relative`,children:c(e,t+1)},t))})]}),_(a,{className:`w-full h-33.5 grid grid-cols-3 grid-rows-1 gap-0.5`,children:o.slice(3).map((e,t)=>_(a,{className:`w-full h-full relative`,children:c(e,t+3)},t))})]})}):o.length===7?_(a,{className:n,children:v(a,{className:`w-full rounded-xl overflow-hidden flex gap-0.5`,children:[_(a,{className:`w-76 h-67.5 grid grid-cols-2 grid-rows-2 gap-0.5`,children:o.slice(0,4).map((e,t)=>_(a,{className:`w-full h-full relative`,children:c(e,t)},t))}),_(a,{className:`flex-1 grid grid-cols-1 grid-rows-3 gap-0.5`,children:o.slice(4).map((e,t)=>_(a,{className:`w-full h-full relative`,children:c(e,t+4)},t))})]})}):o.length===8?_(a,{className:n,children:v(a,{className:`w-full rounded-xl overflow-hidden flex flex-col gap-0.5`,children:[_(a,{className:`w-full h-33.5 flex gap-0.5 items-center`,children:o.slice(0,2).map((e,t)=>_(a,{className:`flex-1 h-full relative`,children:c(e,t)},t))}),_(a,{className:`w-full h-67.5 grid grid-cols-3 grid-rows-2 gap-0.5`,children:o.slice(2).map((e,t)=>_(a,{className:`w-full h-full relative`,children:c(e,t+2)},t))})]})}):_(a,{className:n,children:_(a,{className:`w-full h-101.5 rounded-xl overflow-hidden grid grid-cols-3 grid-rows-3 gap-0.5`,children:o.slice(0,9).map((e,t)=>_(a,{className:`w-full h-full relative`,children:c(e,t)},t))})})}function C(t){let d=b(`components.ui.list.userActivityList`),{content_id:x,author:C,rightSlot:w,create_time:T,content:E,medias:D,canEdit:O=!1,isDeleting:ie=!1,isEditMode:ae=!1,isSelected:oe=!1,onToggle:se,interaction:ce,like_count:k=0,is_liked:A=!1,onLikeSuccess:le,dislike_count:j=0,is_dislike:M=!1,is_collected:ue,onDislikeSuccess:N,comment_count:P=0,onDelete:F,onShare:I,onShareSuccess:L,onActionSuccess:R,onCollectChange:z,onItemClick:B}=t,V=ce?.is_collected??ue??!1,[H,U]=g({isLiked:A,likeCount:k,isDisliked:M,dislikeCount:j,isCollected:V}),[W,G]=g(!1),[de,K]=g(!1),q=ne(null),J=D?.filter(Boolean)??[],Y=C?.nickname||C?.nick_name||``,fe=C?.avatar||C?.avatar_url||``;h(()=>{U({isLiked:A,likeCount:k,isDisliked:M,dislikeCount:j,isCollected:V})},[j,M,A,k,V]),h(()=>{G(!1)},[E]),h(()=>()=>{q.current&&=(clearTimeout(q.current),null)},[]);function pe(e){U(t=>({...t,isLiked:e.isLiked,likeCount:e.count,isDisliked:e.isDisliked??t.isDisliked,dislikeCount:e.dislikeCount??t.dislikeCount})),le?.(e)}function me(e){U(t=>({...t,isDisliked:e.isDisliked,dislikeCount:e.count,isLiked:e.isLiked??t.isLiked,likeCount:e.likeCount??t.likeCount})),N?.(e)}let{handleToCollectionOperate:he}=u({id:x||``,isLike:H.isLiked,isDislike:H.isDisliked,isCollect:H.isCollected,likeCnt:H.likeCount,dislikeCnt:H.dislikeCount,contentType:re.post});function X(){q.current&&=(clearTimeout(q.current),null)}function Z(e){U(t=>({...t,isCollected:e})),R?.(),x&&z?.(x,e)}function Q(e){if(!x){y.error(d(`userActivityListItem.collectFailed`));return}if(!de){if(K(!0),X(),!he({currentCollect:e,onUpdate:({isCollect:e})=>{X(),Z(e),K(!1)}})){y.error(d(`userActivityListItem.collectFailed`)),K(!1);return}q.current=setTimeout(()=>{K(!1),q.current=null},300)}}function ge(e){return!!(e&&e.length>180)}function _e(){G(e=>!e)}let $=e(),ve=()=>{B?.(x??``),$.push(`/post/${x}`)},ye=e=>{e.stopPropagation(),e.preventDefault(),$.push(`/profile/${C?.user_id}`)},be=()=>{$.push(`/post/${x}?tab=comment`)},xe=l();function Se(e){let t=J.map(e=>({src:e.media_url,type:e.is_video?`video`:`image`,cover:e.cover_image}));t.length&&xe.open(t,e)}return _(a,{className:`flex items-start gap-2 p-3`,children:v(a,{className:`flex-1 min-w-0`,children:[v(a,{className:`flex items-center gap-2 mb-3`,children:[v(a,{className:`flex items-center gap-2 shrink-0`,children:[ae&&_(o,{checked:oe,onCheckedChange:se}),v(n,{className:`w-10 h-10`,onClick:ye,children:[_(i,{src:fe,alt:Y}),_(r,{})]})]}),v(a,{className:`flex-1 min-w-0`,children:[_(s,{as:`p`,className:`text-sm text-text1 line-clamp-1 font-medium`,children:Y}),_(a,{className:`h-[1em]`,children:_(c,{value:T,className:`text-xs text-text3`,format:`YYYY-MM-DD HH:mm`})})]}),w&&_(a,{className:`shrink-0`,onClick:e=>{e.stopPropagation(),e.preventDefault()},children:w}),O&&_(p,{onClick:F,disabled:ie})]}),v(a,{onClick:ve,children:[v(a,{className:`mb-3`,children:[E&&v(a,{children:[_(s,{className:`text-sm text-text1 leading-5 whitespace-pre-wrap text-ellipsis ${W?`break-all`:`line-clamp-3`}`,dangerouslySetInnerHTML:{__html:E}}),ge(E)&&_(a,{className:`mt-1 text-xs text-text3`,onClick:e=>{e.stopPropagation(),e.preventDefault(),_e()},children:d(W?`userActivityListItem.collapse`:`userActivityListItem.expand`)})]}),J.length>0&&_(S,{className:`mt-2`,medias:J,onItemClick:Se})]}),v(a,{className:`flex items-center justify-around text-text3 *:min-w-20`,onClick:e=>{e.stopPropagation(),e.preventDefault()},children:[_(te,{contentId:x||``,count:H.likeCount,isLiked:H.isLiked,isDisliked:H.isDisliked,dislikeCount:H.dislikeCount,onLikeSuccess:pe,onSuccess:R}),_(ee,{contentId:x||``,count:H.dislikeCount,isDisliked:H.isDisliked,isLiked:H.isLiked,likeCount:H.likeCount,onDislikeSuccess:me,onSuccess:R}),_(f,{count:P,onClick:be}),_(m,{isCollected:H.isCollected,contentId:x||``,userId:C?.user_id??``,onShareSuccess:L,onClick:I,onCollect:()=>Q(!1),onUncollect:()=>Q(!0)})]})]})]})})}export{C as UserActivityListItem,S as UserActivityMediaGrid};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Box as e}from"../../../ui/box.mjs";import{List as t}from"../../../ui/list.mjs";import{Text as n}from"../../../ui/text.mjs";import{normalizeTimeToMilliseconds as r}from"../../../ui/time.mjs";import{UserActivityListItemSkeleton as i}from"../../skeleton/user-activity-list-item-skeleton.mjs";import{UserActivityListItem as a}from"./user-activity-list-item.mjs";import{useEffect as o,useMemo as s,useState as c}from"react";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";import{useTranslations as f}from"next-intl";function p(e){let t=r(e);if(!t)return!1;let n=new Date(t),i=new Date;return n.getFullYear()===i.getFullYear()&&n.getMonth()===i.getMonth()&&n.getDate()===i.getDate()}function m(e){let t=r(e);if(!t)return!1;let n=new Date(t),i=new Date;return i.setDate(i.getDate()-1),n.getFullYear()===i.getFullYear()&&n.getMonth()===i.getMonth()&&n.getDate()===i.getDate()}function h(r){let h=f(`components.ui.list`),[g,_]=c(!1),{list:v,loading:y,hasMore:b=!1,loadMore:x,showGroupHeaders:S=!0,emptyText:C,canEdit:w=!1,isEditMode:T,selectedIds:E,onToggleSelection:D,onActionSuccess:O}=r,
|
|
2
|
+
"use client";import{Box as e}from"../../../ui/box.mjs";import{List as t}from"../../../ui/list.mjs";import{Text as n}from"../../../ui/text.mjs";import{normalizeTimeToMilliseconds as r}from"../../../ui/time.mjs";import{UserActivityListItemSkeleton as i}from"../../skeleton/user-activity-list-item-skeleton.mjs";import{UserActivityListItem as a}from"./user-activity-list-item.mjs";import{useEffect as o,useMemo as s,useState as c}from"react";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";import{useTranslations as f}from"next-intl";function p(e){let t=r(e);if(!t)return!1;let n=new Date(t),i=new Date;return n.getFullYear()===i.getFullYear()&&n.getMonth()===i.getMonth()&&n.getDate()===i.getDate()}function m(e){let t=r(e);if(!t)return!1;let n=new Date(t),i=new Date;return i.setDate(i.getDate()-1),n.getFullYear()===i.getFullYear()&&n.getMonth()===i.getMonth()&&n.getDate()===i.getDate()}function h(r){let h=f(`components.ui.list`),[g,_]=c(!1),{list:v,loading:y,hasMore:b=!1,loadMore:x,showGroupHeaders:S=!0,emptyText:C,canEdit:w=!1,isEditMode:T,selectedIds:E,onToggleSelection:D,onActionSuccess:O,onItemClick:k}=r,A=C??h(`userActivityList.empty`);o(()=>{_(!0)},[]);let j=S&&g,{todayList:M,yesterdayList:N,earlierList:P}=s(()=>{if(!j)return{todayList:[],yesterdayList:[],earlierList:v};let e=[],t=[],n=[];for(let r of v)p(r.create_time)?e.push(r):m(r.create_time)?t.push(r):n.push(r);return{todayList:e,yesterdayList:t,earlierList:n}},[v,j]);return y&&v.length===0?u(e,{className:`bg-bg1`,children:Array.from({length:3}).map((e,t)=>u(i,{isEditMode:T},`user-activity-list-item-skeleton-${t}`))}):u(l,{children:u(t,{loading:y,loadMore:x,hasMore:b,empty:`no-content`,emptyText:A,children:j?d(l,{children:[M.length>0&&d(l,{children:[u(e,{className:` `,children:u(n,{className:`text-lg text-text1`,children:h(`userActivityList.today`)})}),M.map(e=>u(a,{...e,canEdit:w,isEditMode:T,isSelected:E?.has(e.content_id??``),onToggle:()=>D?.(e.content_id??``),onActionSuccess:O,is_dislike:e.interaction?.is_dislike||e.is_dislike,is_liked:e.interaction?.is_liked||e.is_liked,is_collected:e.is_collected||e.interaction?.is_collected,onItemClick:k},e.content_id))]}),N.length>0&&d(l,{children:[u(e,{className:` `,children:u(n,{className:`text-lg text-text1`,children:h(`userActivityList.yesterday`)})}),N.map(e=>u(a,{...e,canEdit:w,isEditMode:T,isSelected:E?.has(e.content_id??``),onToggle:()=>D?.(e.content_id??``),onActionSuccess:O,is_dislike:e.interaction?.is_dislike||e.is_dislike,is_liked:e.interaction?.is_liked||e.is_liked,is_collected:e.is_collected||e.interaction?.is_collected,onItemClick:k},e.content_id))]}),P.length>0&&d(l,{children:[u(e,{className:` `,children:u(n,{className:`text-lg text-text1`,children:h(`userActivityList.earlier`)})}),P.map(e=>u(a,{...e,canEdit:w,isEditMode:T,isSelected:E?.has(e.content_id??``),onToggle:()=>D?.(e.content_id??``),onActionSuccess:O,is_dislike:e.interaction?.is_dislike||e.is_dislike,is_liked:e.interaction?.is_liked||e.is_liked,is_collected:e.is_collected||e.interaction?.is_collected,onItemClick:k},e.content_id))]})]}):v.map(e=>u(a,{...e,canEdit:w,isEditMode:T,isSelected:E?.has(e.content_id??``),onToggle:()=>D?.(e.content_id??``),onActionSuccess:O,is_dislike:e.interaction?.is_dislike||e.is_dislike,is_liked:e.interaction?.is_liked||e.is_liked,is_collected:e.is_collected||e.interaction?.is_collected,onItemClick:k},e.content_id??``))})})}export{h as UserActivityList};
|
|
@@ -88,6 +88,8 @@ interface WaterfallRecommendProps {
|
|
|
88
88
|
selectedIds?: Set<string>;
|
|
89
89
|
/** 切换某项选中状态。 */
|
|
90
90
|
onToggleSelection?: (id: string) => void;
|
|
91
|
+
/** 点击某卡片时回调(非选择模式)。 */
|
|
92
|
+
onItemClick?: (item: WaterfallRecommendItem) => void;
|
|
91
93
|
}
|
|
92
94
|
/**
|
|
93
95
|
* 纯 UI 瀑布流组件。
|
|
@@ -108,7 +110,8 @@ declare function WaterfallRecommend({
|
|
|
108
110
|
getItemRef,
|
|
109
111
|
selectionMode,
|
|
110
112
|
selectedIds,
|
|
111
|
-
onToggleSelection
|
|
113
|
+
onToggleSelection,
|
|
114
|
+
onItemClick
|
|
112
115
|
}: WaterfallRecommendProps): react_jsx_runtime0.JSX.Element;
|
|
113
116
|
//#endregion
|
|
114
117
|
export { WaterfallRecommend, WaterfallRecommendCardKind, WaterfallRecommendColumnName, WaterfallRecommendColumns, WaterfallRecommendItem, WaterfallRecommendProps };
|
|
@@ -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 r from"../../../ui/link.mjs";import i from"../../../../assets/icons/detail/video_flag.mjs";import{CollectionSelectIcon as a,CollectionSelectedIcon as o}from"../collection-list/collection-select-icon.mjs";import{RECOMMEND_BADGE_IMAGE_CLASS_NAME as s,RECOMMEND_TOP_LEFT_BADGE_WRAPPER_CLASS_NAME as c,normalizeRecommendBadgeUrl as l}from"./recommend-badge-style.mjs";import{WATERFALL_SHORT_CARD_ASPECT_RATIO as u,WATERFALL_TALL_CARD_ASPECT_RATIO as d,buildWaterfallRecommendLegacyDisplay as f}from"./waterfall-recommend-display.mjs";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";const g={backgroundImage:`var(--gradient-card-mask-strong)`};function _({title:e,moreHref:i,onMoreClick:a,moreIcon:o,columns:s,sectionClassName:c=`w-full`,headerClassName:l=`mb-[16px] flex items-center justify-between px-[16px]`,titleClassName:u=`flex-1 min-w-0 text-[18px] leading-[24px] font-medium line-clamp-1 text-text2`,moreLinkClassName:d=`ml-[8px] flex size-[24px] shrink-0 items-center justify-center opacity-50`,containerClassName:f=`relative flex w-full gap-[15px] px-[16px]`,overlay:p,footer:g,getItemRef:_,selectionMode:y=!1,selectedIds:b,onToggleSelection:x}){return h(t,{className:c,children:[h(t,{className:l,children:[m(n,{className:u,children:e}),o&&i&&m(r,{href:i,"aria-label":`更多`,className:d,children:o}),o&&!i&&a&&m(`button`,{type:`button`,"aria-label":`更多`,className:d,onClick:a,children:o})]}),h(t,{className:f,children:[m(t,{className:`flex-1 min-w-0 flex flex-col`,children:s.left.map((e,t)=>m(`div`,{ref:_?.({item:e,column:`left`,columnIndex:t}),children:m(v,{item:e,selectionMode:y,selectedIds:b,onToggleSelection:x})},e.key))}),m(t,{className:`flex-1 min-w-0 flex flex-col`,children:s.right.map((e,t)=>m(`div`,{ref:_?.({item:e,column:`right`,columnIndex:t}),children:m(v,{item:e,selectionMode:y,selectedIds:b,onToggleSelection:x})},e.key))}),p]}),g]})}function v({item:_,selectionMode:v=!1,selectedIds:y,onToggleSelection:b}){let
|
|
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"../../../ui/link.mjs";import i from"../../../../assets/icons/detail/video_flag.mjs";import{CollectionSelectIcon as a,CollectionSelectedIcon as o}from"../collection-list/collection-select-icon.mjs";import{RECOMMEND_BADGE_IMAGE_CLASS_NAME as s,RECOMMEND_TOP_LEFT_BADGE_WRAPPER_CLASS_NAME as c,normalizeRecommendBadgeUrl as l}from"./recommend-badge-style.mjs";import{WATERFALL_SHORT_CARD_ASPECT_RATIO as u,WATERFALL_TALL_CARD_ASPECT_RATIO as d,buildWaterfallRecommendLegacyDisplay as f}from"./waterfall-recommend-display.mjs";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";const g={backgroundImage:`var(--gradient-card-mask-strong)`};function _({title:e,moreHref:i,onMoreClick:a,moreIcon:o,columns:s,sectionClassName:c=`w-full`,headerClassName:l=`mb-[16px] flex items-center justify-between px-[16px]`,titleClassName:u=`flex-1 min-w-0 text-[18px] leading-[24px] font-medium line-clamp-1 text-text2`,moreLinkClassName:d=`ml-[8px] flex size-[24px] shrink-0 items-center justify-center opacity-50`,containerClassName:f=`relative flex w-full gap-[15px] px-[16px]`,overlay:p,footer:g,getItemRef:_,selectionMode:y=!1,selectedIds:b,onToggleSelection:x,onItemClick:S}){return h(t,{className:c,children:[h(t,{className:l,children:[m(n,{className:u,children:e}),o&&i&&m(r,{href:i,"aria-label":`更多`,className:d,onClick:a,children:o}),o&&!i&&a&&m(`button`,{type:`button`,"aria-label":`更多`,className:d,onClick:a,children:o})]}),h(t,{className:f,children:[m(t,{className:`flex-1 min-w-0 flex flex-col`,children:s.left.map((e,t)=>m(`div`,{ref:_?.({item:e,column:`left`,columnIndex:t}),children:m(v,{item:e,selectionMode:y,selectedIds:b,onToggleSelection:x,onItemClick:S})},e.key))}),m(t,{className:`flex-1 min-w-0 flex flex-col`,children:s.right.map((e,t)=>m(`div`,{ref:_?.({item:e,column:`right`,columnIndex:t}),children:m(v,{item:e,selectionMode:y,selectedIds:b,onToggleSelection:x,onItemClick:S})},e.key))}),p]}),g]})}function v({item:_,selectionMode:v=!1,selectedIds:y,onToggleSelection:b,onItemClick:x}){let S=_.cardKind===`short`?u:d,C=_.selectionId??``,w=!!(C&&y?.has(C)),T=f(_),E=l(T.topLeftBadgeImageUrl);function D(){!v||!C||b?.(C)}let O=h(p,{children:[h(t,{className:`relative w-full overflow-hidden rounded-[8px] bg-[#18111f]`,style:{aspectRatio:S},children:[_.coverUrl&&m(e,{src:_.coverUrl,alt:_.title||`推荐封面`,fill:!0,objectFit:`cover`,className:`object-cover`}),m(t,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:g,"aria-hidden":!0}),v&&m(t,{className:`pointer-events-none absolute left-[8px] top-[8px] z-20`,children:m(w?o:a,{})}),!v&&h(p,{children:[E&&m(t,{className:c,children:m(e,{src:E,alt:`角标`,width:96,height:18,className:s})}),T.topRightScoreText&&m(n,{as:`span`,className:`absolute right-[8px] top-[8px] z-10 shrink-0 text-[14px] leading-[22px] font-semibold text-[#FFC24B]`,children:T.topRightScoreText}),h(t,{className:`absolute left-[8px] right-[8px] bottom-[10px] z-10 flex items-end justify-between gap-[8px]`,children:[m(t,{className:`flex min-w-0 items-center gap-[4px]`,children:T.bottomLeftHeatText&&h(p,{children:[m(i,{className:`h-[16px] w-[16px] shrink-0 text-white`}),m(n,{as:`span`,className:`min-w-0 truncate text-[14px] leading-[20px] text-white`,children:T.bottomLeftHeatText})]})}),T.bottomRightEpisodeText&&m(n,{as:`span`,className:`shrink-0 text-[14px] leading-[20px] text-white`,children:T.bottomRightEpisodeText})]})]})]}),!v&&m(t,{className:`mt-[8px] overflow-hidden`,children:m(n,{as:`h3`,className:`line-clamp-2 text-[16px] leading-[22px] text-[--color-text-white80]`,children:T.title})})]});return v?m(`button`,{type:`button`,className:`mb-[16px] block w-full cursor-pointer border-0 bg-transparent p-0 text-left`,onClick:D,"aria-pressed":w,disabled:!C,children:O}):m(r,{href:_.href,className:`mb-[16px] block w-full`,onClick:()=>x?.(_),children:O})}export{_ as WaterfallRecommend};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{ensureGuestIdentity as e}from"../../../store/modules/user-store.mjs";import{Dialog as t,DialogContent as n}from"../../ui/dialog.mjs";import{useLoginModalStore as r}from"../../../store/modules/login-modal-store.mjs";import{
|
|
2
|
+
"use client";import{ensureGuestIdentity as e}from"../../../store/modules/user-store.mjs";import{Dialog as t,DialogContent as n}from"../../ui/dialog.mjs";import{useLoginModalStore as r}from"../../../store/modules/login-modal-store.mjs";import{trackLoginPageClick as i,trackLoginPageView as a}from"../../pages/login/tracking.mjs";import{Login as o}from"../../pages/login/index.mjs";import{useEffect as s,useRef as c}from"react";import{jsx as l}from"react/jsx-runtime";function u(u){let{contentClassName:d}=u,{isOpen:f,setOpen:p,entryStep:m}=r(),h=c(0);return s(()=>{e()},[]),s(()=>{f&&(h.current=Date.now(),a(0))},[f]),l(t,{open:f,onOpenChange:p,children:l(n,{showCloseButton:!1,className:`bg-transparent !m-0 !p-0 !fixed !inset-0 !w-screen !h-screen !max-w-none !rounded-none !top-0 !left-0 !translate-x-0 !translate-y-0 !transform-none z-[9999] !pointer-events-auto ${d||``}`,onClickCapture:e=>{e.target.closest(`[data-slot="checkbox"]`)&&i(e,`dialog_button`)},onClick:e=>{let t=e.target.closest(`button`);t&&t.dataset.skipDialogTrack!==`true`&&i(e,`dialog_button`)},children:l(o,{initialStep:m??`login`},`${f?`open`:`closed`}-${m??`login`}`)})})}export{u as LoginDialog};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Box as e}from"../../ui/box.mjs";import{Text as t}from"../../ui/text.mjs";import{Sheet as n,SheetContent as r,SheetHeader as i,SheetTitle as a}from"../../ui/sheet.mjs";import{Switch as o}from"../../ui/switch.mjs";import{useKeepAliveState as s}from"../keep-scroll-position/index.mjs";import c from"../../../assets/icons/common/right_arrow.mjs";import l from"../../ui/popup.mjs";import{useCallback as u,useEffect as d,useMemo as f,useRef as p,useState as m}from"react";import{Fragment as h,jsx as g,jsxs as _}from"react/jsx-runtime";import{toast as v}from"sonner";import{useTranslations as ee}from"next-intl";const y=`funhub:detail-series-popup-query`,b=`funhub:detail-series-popup-close`;function x(e){return e.type===y&&e instanceof CustomEvent}function S({active:e}){return e?_(`svg`,{width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`shrink-0`,"aria-hidden":!0,children:[g(`circle`,{cx:`16`,cy:`12`,r:`3`,fill:`white`}),g(`path`,{d:`M8 5H16C19.866 5 23 8.13401 23 12C23 15.866 19.866 19 16 19H8C4.13401 19 1 15.866 1 12C1 8.13401 4.13401 5 8 5ZM16 15C17.6569 15 19 13.6569 19 12C19 10.3431 17.6569 9 16 9C14.3431 9 13 10.3431 13 12C13 13.6569 14.3431 15 16 15Z`,fill:`#9054E5`})]}):_(`svg`,{width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`shrink-0`,"aria-hidden":!0,children:[g(`path`,{d:`M1.5 12C1.5 8.68629 4.18629 6 7.5 6H16.5C19.8137 6 22.5 8.68629 22.5 12C22.5 15.3137 19.8137 18 16.5 18H7.5C4.18629 18 1.5 15.3137 1.5 12Z`,stroke:`currentColor`,strokeWidth:`1.5`,strokeOpacity:`0.6`}),g(`circle`,{cx:`9`,cy:`12`,r:`3`,fill:`rgba(255,255,255,0.6)`})]})}function C(){return g(`svg`,{width:`20`,height:`20`,viewBox:`0 0 20 20`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`block h-[20px] w-[20px]`,"aria-hidden":!0,children:g(`path`,{d:`M10 8.61116L14.8611 3.75L16.25 5.13889L11.3889 10L16.25 14.8611L14.8611 16.25L10 11.3889L5.13889 16.25L3.75 14.8611L8.61111 10L3.75 5.13889L5.13889 3.75L10 8.61116Z`,fill:`currentColor`})})}function w(e,t){let n=String(t||``).trim();if(!n)return e;let r=e.replace(/\s+/g,``);return n.replace(/\s+/g,``)===r?e:`${e} ${n}`}function T(e,t,n){return(e||[]).map((e,r)=>{let i=Number.parseInt(e?.id||``,10),a=Number.isNaN(i)?r+1:i,o=e?.name||``,s=w(n(a),o);return{id:e?.id||`${t}-${a}`,series_num:a,title:s}})}function E(e,t,n){return(e||[]).map((e,r)=>{let i=Number(e?.id),a=Number.isNaN(i)?r+1:i,o=n(a);return{id:e?.id||`${t}-${a}`,series_num:a,title:o}})}function D(e,t,n){return e<=0?n(`singleContent`):n(t===`1`?`completedSeriesTotal`:`ongoingSeriesTotal`,{total:e})}function O(){return g(`span`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0 overflow-hidden rounded-[8px] p-[0.5px]`,style:{backgroundImage:`linear-gradient(90deg, rgba(255,30,172,0.7) 0%, rgba(108,67,238,0) 100%), linear-gradient(180deg, #9756E3 0%, #6C43EE 100%)`},children:g(`span`,{className:`block h-full w-full`,style:{borderRadius:`7.5px`,backgroundColor:`#000000`,backgroundImage:`linear-gradient(90deg, rgba(246,206,255,0.1) 0%, rgba(246,206,255,0.1) 100%), linear-gradient(90deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0.1) 100%)`}})})}function k(e){return e.mode===`detail`?g(j,{information:e.information,series_num:e.series_num,onEpisodeChange:e.onEpisodeChange}):g(A,{open:e.open,variant:e.variant,title:e.title,videoTitle:e.videoTitle,updateStatus:e.updateStatus,summaryText:e.summaryText,seriesList:e.seriesList,activeEpisodeId:e.activeEpisodeId,showEpisodeTitle:e.showEpisodeTitle,onToggleTitle:e.onToggleTitle,onClose:e.onClose,onSelectEpisode:e.onSelectEpisode,popupBodyStyle:e.popupBodyStyle,popupStylePreset:e.popupStylePreset})}function A({open:s,variant:c,title:h,videoTitle:v,updateStatus:y,summaryText:b,seriesList:x,activeEpisodeId:E,showEpisodeTitle:k=!1,onToggleTitle:A,onClose:j,onSelectEpisode:M,popupBodyStyle:N,popupStylePreset:P=`default`}){let F=ee(`components.common.seriesEpisodes`),I=!!A,L=I&&k,R=c===`popup`&&P===`detail-style-one`,z=p(null),B=p(null),V=f(()=>T(x,`episode`,e=>F(`episodeLabel`,{episode:e})),[x,F]),H=f(()=>{if(V.length===0)return[];let e=[];return V.forEach((t,n)=>{let r=Math.floor(n/50);e[r]||(e[r]=[]),e[r].push(t)}),e},[V,50]),U=f(()=>{if(!E)return 0;let e=V.findIndex(e=>e.id===E);return e<0?0:Math.floor(e/50)},[E,V,50]),[W,G]=m(U);d(()=>{G(U)},[U]);let K=f(()=>typeof b==`string`&&b.trim()?b:D(V.length,y,F),[V.length,b,F,y]),q=h||F(`selectorTitle`),J=String(v||``).trim(),Y=u(e=>w(F(`episodeLabel`,{episode:e.series_num}),J),[J,F]);function X(){let e=z.current;if(e){B.current&&=(window.cancelAnimationFrame(B.current),null),e.scrollTop=0;try{e.scrollTo({top:0,left:0,behavior:`auto`})}catch{}B.current=window.requestAnimationFrame(()=>{B.current=null;let e=z.current;e&&(e.scrollTop=0)})}}d(()=>{s&&X()},[s,k,W]);function Z(e){A&&(A(e),X())}function Q(e){M?.(e.id,e.series_num),j()}let $=L?2:5,te=H.length>1?g(`div`,{className:`shrink-0 w-full flex gap-[8px] overflow-x-auto`,children:H.map((e,t)=>{if(e.length===0)return null;let n=t===W,r=t*50+1,i=Math.min((t+1)*50,V.length);return _(`div`,{className:`shrink-0 px-[16px] py-[6px] rounded-[16px] text-[14px] transition-colors cursor-pointer relative overflow-hidden ${n?`text-theme5 bg-bg2`:`text-text2 bg-bg2`}`,onClick:()=>{G(t),X()},children:[r,`-`,i,n&&g(`div`,{className:`absolute w-full h-full top-0 left-0 opacity-20 bg-theme5`})]},`series-group-${t}`)})}):null,ne=_(`div`,{className:`pb-[8px] flex justify-between`,children:[g(`span`,{className:`text-[16px] text-text1`,children:K}),I&&_(`div`,{className:`flex items-center gap-[4px]`,children:[g(o,{size:`sm`,className:`data-checked:bg-theme5 h-[20px] w-[33px]`,checked:k,onCheckedChange:e=>{Z(!!e)}}),g(`button`,{type:`button`,className:`text-[16px] text-text1`,onClick:()=>{Z(!k)},children:F(`episodeTitle`)})]})]}),re=g(`div`,{className:`grid w-full gap-2 ${$===2?`grid-cols-2`:`grid-cols-5`}`,children:(H[W]||[]).map((e,t)=>{let n=!!(E&&e.id===E);return g(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Q(e)},className:`flex items-center justify-center w-full h-[60px] rounded-[8px] border border-line1 border-solid text-[16px] cursor-pointer select-none transition-colors relative overflow-hidden ${n?`font-bold text-theme5 bg-line1`:`text-text1`} ${L?`h-[72px] px-[10px] text-[14px]`:``} ${t%$===0?``:`border-l-0`}`,children:L?g(`span`,{className:`block w-full truncate leading-[22px]`,children:Y(e)}):e.series_num},e.id)})}),ie=H.length>1?g(`div`,{className:`flex gap-[8px] overflow-x-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden`,children:H.map((e,t)=>{if(e.length===0)return null;let n=t===W,r=t*50+1,i=Math.min((t+1)*50,V.length);return g(`button`,{type:`button`,className:`flex h-[28px] w-[72px] shrink-0 items-center justify-center rounded-[100px] px-[4px] transition-colors ${n?`bg-[linear-gradient(90deg,#9756E3_0%,#6C43EE_100%)] text-white`:`bg-white/20 text-white`}`,onClick:()=>{G(t),X()},children:_(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[20px]`,children:[r,`-`,i]})},`series-popup-group-${t}`)})}):null,ae=_(`div`,{className:`flex items-center justify-between`,children:[g(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[24px] text-white/60`,children:K}),I&&_(`button`,{type:`button`,className:`flex items-center gap-[3px] text-white/60`,onClick:()=>{Z(!k)},children:[g(S,{active:k}),g(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[24px] text-white/60`,children:F(`episodeTitle`)})]})]}),oe=L?g(`div`,{className:`flex w-full flex-col gap-[12px]`,children:(H[W]||[]).map(e=>{let t=!!(E&&e.id===E);return _(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Q(e)},className:`relative flex w-full items-start overflow-hidden rounded-[8px] px-[16px] py-[18px] text-left transition-colors ${t?R?``:`border border-[#FF1EFF] bg-[linear-gradient(90deg,rgba(246,206,255,0.1)_0%,rgba(246,206,255,0.1)_100%),linear-gradient(90deg,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0.1)_100%)]`:`bg-white/10`}`,children:[t&&R&&g(O,{}),g(`span`,{className:`relative z-[1] block w-full truncate font-['PingFang_SC'] text-[14px] ${t?`font-medium leading-[16px] text-[#CA3FE9]`:`font-normal leading-[16px] text-white/80`}`,children:Y(e)})]},`popup-${e.id}`)})}):g(`div`,{className:`grid w-full grid-cols-[repeat(6,52px)] justify-between gap-y-[8px]`,children:(H[W]||[]).map(e=>{let t=!!(E&&e.id===E);return _(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Q(e)},className:`relative flex h-[52px] w-[52px] items-center justify-center overflow-hidden rounded-[8px] transition-colors ${t?R?`text-[#9756E3]`:`border border-[#E62AFF]/90 bg-[linear-gradient(90deg,rgba(246,206,255,0.1)_0%,rgba(246,206,255,0.1)_100%),linear-gradient(90deg,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0.1)_100%)] text-[#9756E3]`:`bg-white/10 text-white/80`}`,children:[t&&R&&g(O,{}),g(`span`,{className:`relative z-[1] font-['PingFang_SC'] text-[16px] font-medium not-italic leading-[16px]`,children:e.series_num})]},`popup-${e.id}`)})});return c===`sheet`?g(n,{open:s,onOpenChange:e=>!e&&j(),children:_(r,{side:`bottom`,showCloseButton:!0,className:`min-h-[50vh] bg-bg1 text-text1 rounded-t-2xl border-t border-white/10`,children:[g(i,{className:`pt-3 pb-0`,children:g(a,{className:`flex items-center justify-between text-lg text-text1`,children:q})}),_(`div`,{className:`px-4 pb-2 flex flex-col gap-3`,children:[te,ne]}),g(`div`,{ref:z,className:`flex-1 h-0 pt-[4px] pb-[12px] overflow-y-auto px-4`,children:re})]})}):g(l,{open:s,onOpenChange:e=>{e||j()},showCloseButton:!1,className:`!gap-0 !border-0 !bg-transparent !p-0 !shadow-none`,overlayClassName:`bg-black/50 backdrop-blur-0`,children:_(e,{className:`flex h-full w-full flex-col overflow-hidden rounded-t-[16px] bg-black text-text1`,style:{height:`70vh`,...N},children:[_(e,{className:`shrink-0 flex items-center justify-between px-[16px] pt-[32px]`,children:[g(t,{className:`font-['PingFang_SC'] text-[18px] font-medium not-italic leading-[24px] text-white`,children:q}),g(`button`,{type:`button`,"aria-label":`关闭`,className:`flex h-[24px] w-[24px] items-center justify-center text-white opacity-60`,onClick:j,children:g(`span`,{className:`flex h-[24px] w-[24px] items-center overflow-hidden p-[2px]`,children:g(C,{})})})]}),g(e,{className:`flex-1 h-0 w-full px-[16px] pb-[24px]`,children:_(e,{className:`flex h-full flex-col`,children:[ie&&g(e,{className:`mt-[16px] shrink-0`,children:ie}),g(e,{className:`mt-[16px] shrink-0`,children:ae}),g(e,{ref:z,className:`flex-1 overflow-y-auto pb-[17px] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden ${L?`mt-[12px]`:`mt-[8px]`}`,children:oe})]})})]})})}function j({information:n,series_num:r,onEpisodeChange:i}){let a=ee(`components.common`),[o,l]=s(`detail-series-popup-${n.id}`,!1),[S,C]=s(`detail-series-title-toggle-${n.id}`,!1),[w,T]=s(`detail-series-scroll-left-${n.id}`,null),[D,k]=m(r);d(()=>{k(r)},[n.id,r]),d(()=>{if(typeof window>`u`)return;let e=()=>{l(!1)};return window.addEventListener(b,e),()=>{window.removeEventListener(b,e)}},[l]),d(()=>{if(typeof window>`u`)return;let e=e=>{if(!x(e))return;let t=e.detail||{};t.open=!!t.open||!!o};return window.addEventListener(y,e),()=>{window.removeEventListener(y,e)}},[o]);let j=f(()=>E((n.links||[]).map(e=>({id:e.id,name:e.name})),n.id||`episode`,e=>a(`seriesEpisodes.episodeLabel`,{episode:e})),[n.id,n.links,a]),M=n.update_status===`1`?a(`seriesEpisodes.completedSeriesTotal`,{total:n.links.length}):a(`seriesEpisodes.ongoingSeriesUpdatedTo`,{total:n.links.length}),N=f(()=>n.links[D-1]?.id||n.links[0]?.id||``,[n.links,D]),P=p(null),F=p(null),I=p(null),L=p(!1),R=p(null),z=p(null),B=p(null),[V,H]=m(!1),U=u((e,t=`smooth`)=>{let n=P.current?.querySelector(`[data-content-id="${e}"]`);if(n&&P.current){let e=P.current,r=Math.max(0,n.offsetLeft-10);e.scrollTo({left:r,behavior:t})}},[]),W=u(()=>{z.current!==null&&(window.clearTimeout(z.current),z.current=null)},[]),G=u(()=>{B.current!==null&&(window.clearTimeout(B.current),B.current=null)},[]),K=u(()=>{R.current!==null&&(v.dismiss(R.current),R.current=null),W(),G()},[G,W]),q=u(()=>{F.current=null,I.current=null,K(),H(!1)},[K]),J=u((e,t)=>{G(),B.current=window.setTimeout(()=>{B.current=null,F.current===e&&q()},Math.max(0,t))},[G,q]);d(()=>{L.current=!1},[n.id]),d(()=>{if(L.current||!N)return;let e=window.requestAnimationFrame(()=>{let e=P.current;e&&(typeof w==`number`?e.scrollTo({left:Math.max(0,w),behavior:`auto`}):(U(N,`auto`),T(Math.max(0,Math.round(e.scrollLeft)))),L.current=!0)});return()=>{window.cancelAnimationFrame(e)}},[N,w,U,T]),d(()=>{let e=F.current;!e||e!==r||J(e,1e3)},[J,r]),d(()=>()=>{q()},[q]);let Y=u((e,t,n)=>{let r=P.current;if(!r||!e)return t;let i=r.querySelector(`[data-content-id="${e}"]`);if(!i)return t;let a=r.getBoundingClientRect();if(a.width<=0||typeof n!=`number`||(n-a.left)/a.width<.5)return t;let o=i.offsetLeft+i.offsetWidth/2,s=r.clientWidth/2,c=Math.max(0,r.scrollWidth-r.clientWidth),l=Math.min(c,Math.max(0,o-s));return r.scrollTo({left:l,behavior:`smooth`}),Math.round(l)},[]),X=u((e,t=`inline`,o,s)=>{if(e!==D){if(!n.links[e-1]){v.error(a(`seriesEpisodes.episodeNotFound`));return}if(typeof window<`u`&&window.isWebView===!0){try{k(e);let c=o||n.links[e-1]?.id||``,l=Math.max(0,Math.round(P.current?.scrollLeft||0));t===`popup`?(c&&U(c,`auto`),T(Math.max(0,Math.round(P.current?.scrollLeft||0)))):T(Y(c,l,s)),H(!0),K(),R.current=v.loading(a(`seriesEpisodes.episodeSwitching`)),F.current=e,I.current=t,z.current=window.setTimeout(()=>{F.current===e&&(k(r),q(),v.error(a(`seriesEpisodes.episodeSwitchFailed`)))},3e3),i(e)}catch(e){k(r),q(),console.error(`切换剧集失败`,e),v.error(a(`seriesEpisodes.episodeSwitchFailed`))}return}try{k(e);let c=o||n.links[e-1]?.id||``,l=Math.max(0,Math.round(P.current?.scrollLeft||0));t===`popup`?(c&&U(c,`auto`),T(Math.max(0,Math.round(P.current?.scrollLeft||0)))):T(Y(c,l,s)),H(!0),K(),R.current=v.loading(a(`seriesEpisodes.episodeSwitching`)),F.current=e,I.current=t,z.current=window.setTimeout(()=>{F.current===e&&(k(r),q(),v.error(a(`seriesEpisodes.episodeSwitchFailed`)))},8e3),i(e)}catch(e){k(r),q(),console.error(`切换剧集失败`,e),v.error(a(`seriesEpisodes.episodeSwitchFailed`))}}},[q,K,n.links,i,D,r,Y,U,T,a]),[Z,Q]=m(`70vh`),$=u(()=>{if(typeof window>`u`)return;if(window.isWebView===!0){Q(`100vh`);return}let e=document.getElementById(`selectPopupPosition`),t=window.visualViewport?.height||window.innerHeight;if(!e){Q(`70vh`);return}let n=Math.max(0,t-e.offsetTop);if(n<=0){Q(`70vh`);return}Q(`${n}px`)},[]);return d(()=>{if(!o)return;$();let e=()=>{$()};return window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[$,o]),j.length<=1?null:_(h,{children:[_(e,{className:`w-full mt-[16px] flex flex-col items-end mb-[4px]`,children:[_(e,{className:`w-fit flex items-center px-[12px] h-[28px]`,onClick:()=>l(!0),children:[g(t,{className:`text-[14px] text-text2 leading-[20px]`,children:M}),g(c,{className:`w-[11px] h-[18px] ml-[4px] text-text2`})]}),g(`div`,{ref:P,className:`w-full mt-[12px] overflow-x-auto px-[12px] flex gap-x-[8px] ${S?`h-[76px]`:`h-[60px]`} ${V?`touch-none`:``}`,children:j.map((e,n)=>_(`div`,{"data-content-id":e.id,className:`relative shrink-0 h-[full] overflow-hidden px-[18px] rounded-[8px] border border-line1 flex items-center ${S?`w-[162px]`:`w-[60px] !px-[0] justify-center`} ${e.id===N?`border-transparent bg-transparent`:``}`,onClick:t=>{X(n+1,`inline`,e.id,t.clientX)},children:[e.id===N&&g(O,{}),g(t,{className:`relative z-[1] text-[16px] text-text1 leading-[22px] line-clamp-2 ${e.id===N?`font-bold !text-[#CA3FE9]`:``}`,children:S?e.title:e.series_num})]},e.id))})]}),g(A,{title:a(`seriesEpisodes.selectorTitle`),videoTitle:n.name,variant:`popup`,open:o,updateStatus:n.update_status,summaryText:M,seriesList:(n.links||[]).map(e=>({id:e.id,name:e.name})),activeEpisodeId:N,showEpisodeTitle:S,onToggleTitle:e=>{C(e)},onClose:()=>l(!1),onSelectEpisode:(e,t)=>{l(!1),X(t,`popup`,e)},popupBodyStyle:{height:Z},popupStylePreset:`default`})]})}export{O as DetailStyleOneActiveBorderLayer,k as SeriesEpisodes};
|
|
2
|
+
"use client";import{trackPageClick as e}from"../../../utils/tracking.mjs";import{Box as t}from"../../ui/box.mjs";import{Text as n}from"../../ui/text.mjs";import{Sheet as r,SheetContent as i,SheetHeader as a,SheetTitle as o}from"../../ui/sheet.mjs";import{Switch as s}from"../../ui/switch.mjs";import{useKeepAliveState as c}from"../keep-scroll-position/index.mjs";import l from"../../../assets/icons/common/right_arrow.mjs";import u from"../../ui/popup.mjs";import{useCallback as d,useEffect as f,useMemo as p,useRef as m,useState as h}from"react";import{Fragment as ee,jsx as g,jsxs as _}from"react/jsx-runtime";import{toast as v}from"sonner";import{useTranslations as te}from"next-intl";const y=`funhub:detail-series-popup-query`,b=`funhub:detail-series-popup-close`;function x(e){return e.type===y&&e instanceof CustomEvent}function S({active:e}){return e?_(`svg`,{width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`shrink-0`,"aria-hidden":!0,children:[g(`circle`,{cx:`16`,cy:`12`,r:`3`,fill:`white`}),g(`path`,{d:`M8 5H16C19.866 5 23 8.13401 23 12C23 15.866 19.866 19 16 19H8C4.13401 19 1 15.866 1 12C1 8.13401 4.13401 5 8 5ZM16 15C17.6569 15 19 13.6569 19 12C19 10.3431 17.6569 9 16 9C14.3431 9 13 10.3431 13 12C13 13.6569 14.3431 15 16 15Z`,fill:`#9054E5`})]}):_(`svg`,{width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`shrink-0`,"aria-hidden":!0,children:[g(`path`,{d:`M1.5 12C1.5 8.68629 4.18629 6 7.5 6H16.5C19.8137 6 22.5 8.68629 22.5 12C22.5 15.3137 19.8137 18 16.5 18H7.5C4.18629 18 1.5 15.3137 1.5 12Z`,stroke:`currentColor`,strokeWidth:`1.5`,strokeOpacity:`0.6`}),g(`circle`,{cx:`9`,cy:`12`,r:`3`,fill:`rgba(255,255,255,0.6)`})]})}function C(){return g(`svg`,{width:`20`,height:`20`,viewBox:`0 0 20 20`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`block h-[20px] w-[20px]`,"aria-hidden":!0,children:g(`path`,{d:`M10 8.61116L14.8611 3.75L16.25 5.13889L11.3889 10L16.25 14.8611L14.8611 16.25L10 11.3889L5.13889 16.25L3.75 14.8611L8.61111 10L3.75 5.13889L5.13889 3.75L10 8.61116Z`,fill:`currentColor`})})}function w(e,t){let n=String(t||``).trim();if(!n)return e;let r=e.replace(/\s+/g,``);return n.replace(/\s+/g,``)===r?e:`${e} ${n}`}function T(e,t,n){return(e||[]).map((e,r)=>{let i=Number.parseInt(e?.id||``,10),a=Number.isNaN(i)?r+1:i,o=e?.name||``,s=w(n(a),o);return{id:e?.id||`${t}-${a}`,series_num:a,title:s}})}function E(e,t,n){return(e||[]).map((e,r)=>{let i=Number(e?.id),a=Number.isNaN(i)?r+1:i,o=n(a);return{id:e?.id||`${t}-${a}`,series_num:a,title:o}})}function D(e,t,n){return e<=0?n(`singleContent`):n(t===`1`?`completedSeriesTotal`:`ongoingSeriesTotal`,{total:e})}function O(){return g(`span`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0 overflow-hidden rounded-[8px] p-[0.5px]`,style:{backgroundImage:`linear-gradient(90deg, rgba(255,30,172,0.7) 0%, rgba(108,67,238,0) 100%), linear-gradient(180deg, #9756E3 0%, #6C43EE 100%)`},children:g(`span`,{className:`block h-full w-full`,style:{borderRadius:`7.5px`,backgroundColor:`#000000`,backgroundImage:`linear-gradient(90deg, rgba(246,206,255,0.1) 0%, rgba(246,206,255,0.1) 100%), linear-gradient(90deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0.1) 100%)`}})})}function k(e){return e.mode===`detail`?g(j,{information:e.information,series_num:e.series_num,onEpisodeChange:e.onEpisodeChange}):g(A,{open:e.open,variant:e.variant,title:e.title,videoTitle:e.videoTitle,updateStatus:e.updateStatus,summaryText:e.summaryText,seriesList:e.seriesList,activeEpisodeId:e.activeEpisodeId,showEpisodeTitle:e.showEpisodeTitle,onToggleTitle:e.onToggleTitle,onClose:e.onClose,onSelectEpisode:e.onSelectEpisode,popupBodyStyle:e.popupBodyStyle,popupStylePreset:e.popupStylePreset})}function A({open:e,variant:c,title:l,videoTitle:ee,updateStatus:v,summaryText:y,seriesList:b,activeEpisodeId:x,showEpisodeTitle:E=!1,onToggleTitle:k,onClose:A,onSelectEpisode:j,popupBodyStyle:M,popupStylePreset:N=`default`}){let P=te(`components.common.seriesEpisodes`),F=!!k,I=F&&E,L=c===`popup`&&N===`detail-style-one`,R=m(null),z=m(null),B=p(()=>T(b,`episode`,e=>P(`episodeLabel`,{episode:e})),[b,P]),V=p(()=>{if(B.length===0)return[];let e=[];return B.forEach((t,n)=>{let r=Math.floor(n/50);e[r]||(e[r]=[]),e[r].push(t)}),e},[B,50]),H=p(()=>{if(!x)return 0;let e=B.findIndex(e=>e.id===x);return e<0?0:Math.floor(e/50)},[x,B,50]),[U,W]=h(H);f(()=>{W(H)},[H]);let G=p(()=>typeof y==`string`&&y.trim()?y:D(B.length,v,P),[B.length,y,P,v]),K=l||P(`selectorTitle`),q=String(ee||``).trim(),J=d(e=>w(P(`episodeLabel`,{episode:e.series_num}),q),[q,P]);function Y(){let e=R.current;if(e){z.current&&=(window.cancelAnimationFrame(z.current),null),e.scrollTop=0;try{e.scrollTo({top:0,left:0,behavior:`auto`})}catch{}z.current=window.requestAnimationFrame(()=>{z.current=null;let e=R.current;e&&(e.scrollTop=0)})}}f(()=>{e&&Y()},[e,E,U]);function X(e){k&&(k(e),Y())}function Z(e){j?.(e.id,e.series_num),A()}let Q=I?2:5,$=V.length>1?g(`div`,{className:`shrink-0 w-full flex gap-[8px] overflow-x-auto`,children:V.map((e,t)=>{if(e.length===0)return null;let n=t===U,r=t*50+1,i=Math.min((t+1)*50,B.length);return _(`div`,{className:`shrink-0 px-[16px] py-[6px] rounded-[16px] text-[14px] transition-colors cursor-pointer relative overflow-hidden ${n?`text-theme5 bg-bg2`:`text-text2 bg-bg2`}`,onClick:()=>{W(t),Y()},children:[r,`-`,i,n&&g(`div`,{className:`absolute w-full h-full top-0 left-0 opacity-20 bg-theme5`})]},`series-group-${t}`)})}):null,ne=_(`div`,{className:`pb-[8px] flex justify-between`,children:[g(`span`,{className:`text-[16px] text-text1`,children:G}),F&&_(`div`,{className:`flex items-center gap-[4px]`,children:[g(s,{size:`sm`,className:`data-checked:bg-theme5 h-[20px] w-[33px]`,checked:E,onCheckedChange:e=>{X(!!e)}}),g(`button`,{type:`button`,className:`text-[16px] text-text1`,onClick:()=>{X(!E)},children:P(`episodeTitle`)})]})]}),re=g(`div`,{className:`grid w-full gap-2 ${Q===2?`grid-cols-2`:`grid-cols-5`}`,children:(V[U]||[]).map((e,t)=>{let n=!!(x&&e.id===x);return g(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Z(e)},className:`flex items-center justify-center w-full h-[60px] rounded-[8px] border border-line1 border-solid text-[16px] cursor-pointer select-none transition-colors relative overflow-hidden ${n?`font-bold text-theme5 bg-line1`:`text-text1`} ${I?`h-[72px] px-[10px] text-[14px]`:``} ${t%Q===0?``:`border-l-0`}`,children:I?g(`span`,{className:`block w-full truncate leading-[22px]`,children:J(e)}):e.series_num},e.id)})}),ie=V.length>1?g(`div`,{className:`flex gap-[8px] overflow-x-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden`,children:V.map((e,t)=>{if(e.length===0)return null;let n=t===U,r=t*50+1,i=Math.min((t+1)*50,B.length);return g(`button`,{type:`button`,className:`flex h-[28px] w-[72px] shrink-0 items-center justify-center rounded-[100px] px-[4px] transition-colors ${n?`bg-[linear-gradient(90deg,#9756E3_0%,#6C43EE_100%)] text-white`:`bg-white/20 text-white`}`,onClick:()=>{W(t),Y()},children:_(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[20px]`,children:[r,`-`,i]})},`series-popup-group-${t}`)})}):null,ae=_(`div`,{className:`flex items-center justify-between`,children:[g(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[24px] text-white/60`,children:G}),F&&_(`button`,{type:`button`,className:`flex items-center gap-[3px] text-white/60`,onClick:()=>{X(!E)},children:[g(S,{active:E}),g(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[24px] text-white/60`,children:P(`episodeTitle`)})]})]}),oe=I?g(`div`,{className:`flex w-full flex-col gap-[12px]`,children:(V[U]||[]).map(e=>{let t=!!(x&&e.id===x);return _(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Z(e)},className:`relative flex w-full items-start overflow-hidden rounded-[8px] px-[16px] py-[18px] text-left transition-colors ${t?L?``:`border border-[#FF1EFF] bg-[linear-gradient(90deg,rgba(246,206,255,0.1)_0%,rgba(246,206,255,0.1)_100%),linear-gradient(90deg,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0.1)_100%)]`:`bg-white/10`}`,children:[t&&L&&g(O,{}),g(`span`,{className:`relative z-[1] block w-full truncate font-['PingFang_SC'] text-[14px] ${t?`font-medium leading-[16px] text-[#CA3FE9]`:`font-normal leading-[16px] text-white/80`}`,children:J(e)})]},`popup-${e.id}`)})}):g(`div`,{className:`grid w-full grid-cols-[repeat(6,52px)] justify-between gap-y-[8px]`,children:(V[U]||[]).map(e=>{let t=!!(x&&e.id===x);return _(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Z(e)},className:`relative flex h-[52px] w-[52px] items-center justify-center overflow-hidden rounded-[8px] transition-colors ${t?L?`text-[#9756E3]`:`border border-[#E62AFF]/90 bg-[linear-gradient(90deg,rgba(246,206,255,0.1)_0%,rgba(246,206,255,0.1)_100%),linear-gradient(90deg,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0.1)_100%)] text-[#9756E3]`:`bg-white/10 text-white/80`}`,children:[t&&L&&g(O,{}),g(`span`,{className:`relative z-[1] font-['PingFang_SC'] text-[16px] font-medium not-italic leading-[16px]`,children:e.series_num})]},`popup-${e.id}`)})});return c===`sheet`?g(r,{open:e,onOpenChange:e=>!e&&A(),children:_(i,{side:`bottom`,showCloseButton:!0,className:`min-h-[50vh] bg-bg1 text-text1 rounded-t-2xl border-t border-white/10`,children:[g(a,{className:`pt-3 pb-0`,children:g(o,{className:`flex items-center justify-between text-lg text-text1`,children:K})}),_(`div`,{className:`px-4 pb-2 flex flex-col gap-3`,children:[$,ne]}),g(`div`,{ref:R,className:`flex-1 h-0 pt-[4px] pb-[12px] overflow-y-auto px-4`,children:re})]})}):g(u,{open:e,onOpenChange:e=>{e||A()},showCloseButton:!1,className:`!gap-0 !border-0 !bg-transparent !p-0 !shadow-none`,overlayClassName:`bg-black/50 backdrop-blur-0`,children:_(t,{className:`flex h-full w-full flex-col overflow-hidden rounded-t-[16px] bg-black text-text1`,style:{height:`70vh`,...M},children:[_(t,{className:`shrink-0 flex items-center justify-between px-[16px] pt-[32px]`,children:[g(n,{className:`font-['PingFang_SC'] text-[18px] font-medium not-italic leading-[24px] text-white`,children:K}),g(`button`,{type:`button`,"aria-label":`关闭`,className:`flex h-[24px] w-[24px] items-center justify-center text-white opacity-60`,onClick:A,children:g(`span`,{className:`flex h-[24px] w-[24px] items-center overflow-hidden p-[2px]`,children:g(C,{})})})]}),g(t,{className:`flex-1 h-0 w-full px-[16px] pb-[24px]`,children:_(t,{className:`flex h-full flex-col`,children:[ie&&g(t,{className:`mt-[16px] shrink-0`,children:ie}),g(t,{className:`mt-[16px] shrink-0`,children:ae}),g(t,{ref:R,className:`flex-1 overflow-y-auto pb-[17px] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden ${I?`mt-[12px]`:`mt-[8px]`}`,children:oe})]})})]})})}function j({information:r,series_num:i,onEpisodeChange:a}){let o=te(`components.common`),[s,u]=c(`detail-series-popup-${r.id}`,!1),[S,C]=c(`detail-series-title-toggle-${r.id}`,!1),[w,T]=c(`detail-series-scroll-left-${r.id}`,null),[D,k]=h(i);f(()=>{k(i)},[r.id,i]),f(()=>{if(typeof window>`u`)return;let e=()=>{u(!1)};return window.addEventListener(b,e),()=>{window.removeEventListener(b,e)}},[u]),f(()=>{if(typeof window>`u`)return;let e=e=>{if(!x(e))return;let t=e.detail||{};t.open=!!t.open||!!s};return window.addEventListener(y,e),()=>{window.removeEventListener(y,e)}},[s]),f(()=>{s&&e(`page_video_detail`,`详情页`,null,`detail_select_episode_popup`)},[s]);let j=p(()=>E((r.links||[]).map(e=>({id:e.id,name:e.name})),r.id||`episode`,e=>o(`seriesEpisodes.episodeLabel`,{episode:e})),[r.id,r.links,o]),M=r.update_status===`1`?o(`seriesEpisodes.completedSeriesTotal`,{total:r.links.length}):o(`seriesEpisodes.ongoingSeriesUpdatedTo`,{total:r.links.length}),N=p(()=>r.links[D-1]?.id||r.links[0]?.id||``,[r.links,D]),P=m(null),F=m(null),I=m(null),L=m(!1),R=m(null),z=m(null),B=m(null),[V,H]=h(!1),U=d((e,t=`smooth`)=>{let n=P.current?.querySelector(`[data-content-id="${e}"]`);if(n&&P.current){let e=P.current,r=Math.max(0,n.offsetLeft-10);e.scrollTo({left:r,behavior:t})}},[]),W=d(()=>{z.current!==null&&(window.clearTimeout(z.current),z.current=null)},[]),G=d(()=>{B.current!==null&&(window.clearTimeout(B.current),B.current=null)},[]),K=d(()=>{R.current!==null&&(v.dismiss(R.current),R.current=null),W(),G()},[G,W]),q=d(()=>{F.current=null,I.current=null,K(),H(!1)},[K]),J=d((e,t)=>{G(),B.current=window.setTimeout(()=>{B.current=null,F.current===e&&q()},Math.max(0,t))},[G,q]);f(()=>{L.current=!1},[r.id]),f(()=>{if(L.current||!N)return;let e=window.requestAnimationFrame(()=>{let e=P.current;e&&(typeof w==`number`?e.scrollTo({left:Math.max(0,w),behavior:`auto`}):(U(N,`auto`),T(Math.max(0,Math.round(e.scrollLeft)))),L.current=!0)});return()=>{window.cancelAnimationFrame(e)}},[N,w,U,T]),f(()=>{let e=F.current;!e||e!==i||J(e,1e3)},[J,i]),f(()=>()=>{q()},[q]);let Y=d((e,t,n)=>{let r=P.current;if(!r||!e)return t;let i=r.querySelector(`[data-content-id="${e}"]`);if(!i)return t;let a=r.getBoundingClientRect();if(a.width<=0||typeof n!=`number`||(n-a.left)/a.width<.5)return t;let o=i.offsetLeft+i.offsetWidth/2,s=r.clientWidth/2,c=Math.max(0,r.scrollWidth-r.clientWidth),l=Math.min(c,Math.max(0,o-s));return r.scrollTo({left:l,behavior:`smooth`}),Math.round(l)},[]),X=d((e,t=`inline`,n,s)=>{if(e!==D){if(!r.links[e-1]){v.error(o(`seriesEpisodes.episodeNotFound`));return}if(typeof window<`u`&&window.isWebView===!0){try{k(e);let c=n||r.links[e-1]?.id||``,l=Math.max(0,Math.round(P.current?.scrollLeft||0));t===`popup`?(c&&U(c,`auto`),T(Math.max(0,Math.round(P.current?.scrollLeft||0)))):T(Y(c,l,s)),H(!0),K(),R.current=v.loading(o(`seriesEpisodes.episodeSwitching`)),F.current=e,I.current=t,z.current=window.setTimeout(()=>{F.current===e&&(k(i),q(),v.error(o(`seriesEpisodes.episodeSwitchFailed`)))},3e3),a(e)}catch(e){k(i),q(),console.error(`切换剧集失败`,e),v.error(o(`seriesEpisodes.episodeSwitchFailed`))}return}try{k(e);let c=n||r.links[e-1]?.id||``,l=Math.max(0,Math.round(P.current?.scrollLeft||0));t===`popup`?(c&&U(c,`auto`),T(Math.max(0,Math.round(P.current?.scrollLeft||0)))):T(Y(c,l,s)),H(!0),K(),R.current=v.loading(o(`seriesEpisodes.episodeSwitching`)),F.current=e,I.current=t,z.current=window.setTimeout(()=>{F.current===e&&(k(i),q(),v.error(o(`seriesEpisodes.episodeSwitchFailed`)))},8e3),a(e)}catch(e){k(i),q(),console.error(`切换剧集失败`,e),v.error(o(`seriesEpisodes.episodeSwitchFailed`))}}},[q,K,r.links,a,D,i,Y,U,T,o]),[Z,Q]=h(`70vh`),$=d(()=>{if(typeof window>`u`)return;if(window.isWebView===!0){Q(`100vh`);return}let e=document.getElementById(`selectPopupPosition`),t=window.visualViewport?.height||window.innerHeight;if(!e){Q(`70vh`);return}let n=Math.max(0,t-e.offsetTop);if(n<=0){Q(`70vh`);return}Q(`${n}px`)},[]);return f(()=>{if(!s)return;$();let e=()=>{$()};return window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[$,s]),j.length<=1?null:_(ee,{children:[_(t,{className:`w-full mt-[16px] flex flex-col items-end mb-[4px]`,children:[_(t,{className:`w-fit flex items-center px-[12px] h-[28px]`,onClick:()=>{e(`page_video_detail`,`详情页`,null,`detail_select_episode_btn`),u(!0)},children:[g(n,{className:`text-[14px] text-text2 leading-[20px]`,children:M}),g(l,{className:`w-[11px] h-[18px] ml-[4px] text-text2`})]}),g(`div`,{ref:P,className:`w-full mt-[12px] overflow-x-auto px-[12px] flex gap-x-[8px] ${S?`h-[76px]`:`h-[60px]`} ${V?`touch-none`:``}`,children:j.map((t,r)=>_(`div`,{"data-content-id":t.id,className:`relative shrink-0 h-[full] overflow-hidden px-[18px] rounded-[8px] border border-line1 flex items-center ${S?`w-[162px]`:`w-[60px] !px-[0] justify-center`} ${t.id===N?`border-transparent bg-transparent`:``}`,onClick:n=>{e(`page_video_detail`,`详情页`,n,`detail_episode_click`,{episode_num:r+1,episode_id:t.id}),X(r+1,`inline`,t.id,n.clientX)},children:[t.id===N&&g(O,{}),g(n,{className:`relative z-[1] text-[16px] text-text1 leading-[22px] line-clamp-2 ${t.id===N?`font-bold !text-[#CA3FE9]`:``}`,children:S?t.title:t.series_num})]},t.id))})]}),g(A,{title:o(`seriesEpisodes.selectorTitle`),videoTitle:r.name,variant:`popup`,open:s,updateStatus:r.update_status,summaryText:M,seriesList:(r.links||[]).map(e=>({id:e.id,name:e.name})),activeEpisodeId:N,showEpisodeTitle:S,onToggleTitle:e=>{C(e)},onClose:()=>u(!1),onSelectEpisode:(e,t)=>{u(!1),X(t,`popup`,e)},popupBodyStyle:{height:Z},popupStylePreset:`default`})]})}export{O as DetailStyleOneActiveBorderLayer,k as SeriesEpisodes};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{getChannelList as e}from"../../biz/utils/helpers/get-channel-list.mjs";import{gContentGetAppChannelBlock as t,gContentGetAppChannels as n}from"../../../service/generated/client.mjs";import{
|
|
2
|
+
"use client";import{getChannelList as e}from"../../biz/utils/helpers/get-channel-list.mjs";import{gContentGetAppChannelBlock as t,gContentGetAppChannels as n}from"../../../service/generated/client.mjs";import{trackAppPageView as r}from"../../../utils/tracking.mjs";import{Box as i}from"../../ui/box.mjs";import{useRequest as a}from"../../../hooks/query/use-query.mjs";import{queryKey as o}from"../../../constants/query-key.mjs";import{matchChannelByPath as s}from"../../pages/home/channel-matcher.mjs";import{TopNavBarFullscreen as c}from"./fullscreen.mjs";import{TopNavBarNormal as l}from"./normal.mjs";import{useEffect as u,useMemo as d}from"react";import{jsx as f}from"react/jsx-runtime";import{usePathname as p}from"next/navigation";function m(e){return e===`/`?[]:e.startsWith(`/category/`)?e.replace(`/category/`,``).split(`/`).map(e=>decodeURIComponent(e)):[]}function h({categoryPath:h,currentChannelId:g}){let _=p()||`/`,{data:v}=a([o.CHANNEL],()=>n()),y=d(()=>e(v?.data),[v?.data]),b=d(()=>typeof window>`u`?h||[]:m(_),[h,_]),x=d(()=>y.length===0?null:s(b,y),[b,y])?.id??g??``;u(()=>{r({page_key:`page_home_top_nav`,page_name:`首页顶部导航栏`})},[]);let{data:S}=a(o.GET_CONTENT_LIST(x),()=>t({channel_id:x}),{enabled:!!x}),C=d(()=>S?.data?.blocks||[],[S?.data?.blocks]),w=d(()=>C.length>0&&C[0].show_style===6,[C]);return f(i,{className:`w-full`,"data-top-nav-root":`true`,children:f(w?c:l,{channelDataList:y,currentChannelId:x})})}export{h as TopNavBar};
|
|
@@ -8,6 +8,7 @@ interface CommonPlayerProps {
|
|
|
8
8
|
parentId?: string;
|
|
9
9
|
plyerId: string;
|
|
10
10
|
resolution: string;
|
|
11
|
+
autoplay?: boolean;
|
|
11
12
|
mergeConfig?: {
|
|
12
13
|
startPercent?: number;
|
|
13
14
|
startTimeSeconds?: number;
|
|
@@ -44,6 +45,7 @@ declare function CommonPlayer({
|
|
|
44
45
|
className,
|
|
45
46
|
parentId,
|
|
46
47
|
plyerId,
|
|
48
|
+
autoplay,
|
|
47
49
|
videoUrl,
|
|
48
50
|
poster,
|
|
49
51
|
resolution,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{generateUUID as e,parseResolution as t}from"../../../utils/common.mjs";import{decryptImageUrl as n}from"../../../utils/decrypt-image-client.mjs";import{buildVideoPlayerSrc as r,isM3u8VideoUrl as i,resolveVideoPlayerSrc as a}from"./process-m3u8-cache.mjs";import{apiCollectCustom as o}from"../../../utils/api-collect.mjs";import{videoConfig as s}from"./create-video.mjs";import{RETRY_RESUME_END_GAP_SECONDS as c,pauseOtherVideos as l,prepareRetryResumeState as u,registerVideo as ee,shouldTriggerFpsStuckRecovery as d,unregisterVideo as f}from"./playing-videos.mjs";import p from"./style.module.mjs";import{useCallback as m,useEffect as h,useImperativeHandle as te,useRef as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import y from"next/image";import{useLocale as ne}from"next-intl";async function re(){await import(`xgplayer/dist/index.min.css`)}const ie=[],ae={},b=10*1e3;function x({className:o=``,parentId:x=``,plyerId:S=``,videoUrl:C=``,poster:
|
|
2
|
+
"use client";import{generateUUID as e,parseResolution as t}from"../../../utils/common.mjs";import{decryptImageUrl as n}from"../../../utils/decrypt-image-client.mjs";import{buildVideoPlayerSrc as r,isM3u8VideoUrl as i,resolveVideoPlayerSrc as a}from"./process-m3u8-cache.mjs";import{apiCollectCustom as o}from"../../../utils/api-collect.mjs";import{videoConfig as s}from"./create-video.mjs";import{RETRY_RESUME_END_GAP_SECONDS as c,pauseOtherVideos as l,prepareRetryResumeState as u,registerVideo as ee,shouldTriggerFpsStuckRecovery as d,unregisterVideo as f}from"./playing-videos.mjs";import p from"./style.module.mjs";import{useCallback as m,useEffect as h,useImperativeHandle as te,useRef as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import y from"next/image";import{useLocale as ne}from"next-intl";async function re(){await import(`xgplayer/dist/index.min.css`)}const ie=[],ae={},b=10*1e3;function x({className:o=``,parentId:x=``,plyerId:S=``,autoplay:oe,videoUrl:C=``,poster:se=``,resolution:w,hlsList:ce=ie,mergeConfig:T=ae,onProgressUpdate:le,onVideoEnded:ue,onPlay:de,onPause:fe,onEnded:pe,onPlayerReady:E,onControlsVisibilityChange:me,ref:he}){let ge=ne()===`en`?`en`:`zh-cn`,D=g(e()).current,O=g(1),k=g(1),A=g(0),_e=g(0),j=g(null),ve=g(null),M=g(!1),N=g(!1),ye=g(1),P=g(null),F=g(null),I=g(!1),L=g(0),R=g(null),z=g(null),B=g(!1),V=g(null),H=g(null),U=g(!1),be=g(!1),W=g(!1),G=g(!1),xe=g(T),K=m(()=>{F.current&&=(window.clearTimeout(F.current),null),P.current&&=(P.current.disconnect(),null)},[]),q=m(()=>{R.current&&=(window.clearTimeout(R.current),null)},[]),J=m(()=>{z.current&&=(window.clearTimeout(z.current),null)},[]),Y=m(e=>{let t=B.current||z.current!==null;if(B.current=!1,J(),!(!t||!e))try{e.removeClass?.(`xgplayer-isloading`),e.getPlugin?.(`loading`)?.hide?.()}catch{}},[J]),X=m(e=>{if(Y(e),e)try{e.addClass?.(`xgplayer-is-error`),e.getPlugin?.(`error`)?.show?.()}catch{}},[Y]),Se=m(e=>{if(e){B.current=!0,J();try{e.removeClass?.(`xgplayer-is-error`),e.addClass?.(`xgplayer-isloading`),e.getPlugin?.(`error`)?.hide?.(),e.getPlugin?.(`loading`)?.show?.()}catch{}z.current=window.setTimeout(()=>{z.current=null,!(U.current||!B.current)&&(q(),L.current=3,X(j.current||e),console.warn(`~ 播放器加载超过 ${b}ms,已回退失败态,请手动刷新 ~`))},b)}},[J,q,X]),Ce=m(()=>{K(),J(),B.current=!1,f(D),W.current=!1,j.current&&=(j.current.offAll(),j.current.destroy(),null)},[K,J,D]);te(he,()=>({enterFullscreen:()=>{j.current.getPlugin(`fullscreen`).handleFullscreen()},isFullscreen:()=>M.current,isPlayerReady:()=>W.current&&!!j.current,getPlayer:()=>j.current}),[]);let Z=g(null),Q=g(null),we=g(null),Te=g(null),Ee=g(null),De=.3,Oe=.7,$=.045,ke=()=>r(C);function Ae(e){return Math.min(4e3,500*2**(e-1))+Math.floor(Math.random()*200)}let je=async(e,o,f)=>{let p=ke();if(!p)return;let m=a(C),h=i(C)||(ce?.length??0)>0;try{await re();let[i,a]=await Promise.all([import(`xgplayer`),h?import(`xgplayer-hls`):Promise.resolve(null),(async()=>{try{se=await n(se)}catch{console.warn(`解码post失败`)}})()]);if(e())return;let te=await m;if(e())return;let g=te||p,_=ve.current;if(!_||!_.isConnected)for(let t=0;t<10;t+=1){if(e())return;if(await new Promise(e=>{window.setTimeout(()=>e(),16)}),_=ve.current,_&&_.isConnected)break}if(!_||!_.isConnected||e())return;let v=i.default??i,y=i.Events,ne=a?a.default??a:null,ie=h&&ne?[...s.plugins,ne]:s.plugins,ae=h?{preloadTime:15,bufferBehind:5,keepStatusAfterSwitch:!0}:void 0;j.current=new v({...s,...typeof oe==`boolean`?{autoplay:oe}:{},lang:ge,el:_,videoFillMode:`contain`,url:g,poster:se,playbackRate:{list:[.75,1,1.25,1.5,1.75,2]},plugins:ie,...ae?{hls:ae}:{},miniprogress:!0,definition:{list:ce?.map(e=>({text:`${e.text}`,url:r(e.url),definition:`${e.definition}`}))},fullscreen:{useScreenOrientation:!0},...T}),j.current.on(y.REPLAY,()=>{be.current=!1}),j.current.on(y.WAITING,()=>{console.log(`~视频缓冲中,可能出现卡顿~`)}),j.current.on(y.STALLED,()=>{console.log(`~播放停滞,网络连接问题~`)}),j.current.on(y.LOADING,()=>{console.log(`~正在加载数据~`)}),j.current.on(y.LOADED_DATA,()=>{Y(j.current)}),j.current.on(y.CANPLAY,()=>{Y(j.current)}),j.current.on(y.PLAYING,()=>{Y(j.current)});let b=t=>{let n=j.current;if(e()||!n||L.current>=3)return!1;if(R.current)return Se(n),!0;let r=u({failureType:t,player:n,renderedMediaTime:0});V.current=r.time,H.current=r.shouldPlay,L.current+=1;let i=L.current,a=Ae(i);Se(n);let o=t===`fps_stuck`?`画面卡顿`:`失败`;return console.warn(`~ 播放${o},${a}ms 后进行第 ${i} 次重试加载 ~`),R.current=window.setTimeout(()=>{R.current=null,!e()&&(Ce(),je(()=>U.current,()=>Ne.current?.(),e=>Pe.current?.(e)))},a),!0};j.current.on(y.FPS_STUCK,e=>{console.log(`~检测到帧率卡顿~`,e),d(e)&&(b(`fps_stuck`)||X(j.current))}),j.current.on(y.BUFFER_CHANGE,e=>{console.log(`~缓冲区状态变化:~`,e)}),j.current.on(y.ERROR,t=>{let n=String(t&&(t.message||t.msg||t.error?.message)||t||``),r=j.current;if(r){if(h&&/SourceBuffer is full|QuotaExceeded/i.test(n)){if(e()||I.current)return;I.current=!0,window.setTimeout(()=>{I.current=!1},2e3);try{let e=Number(r?.currentTime||0);(r?.getPlugin?.(`hls`)?.core)?._bufferService?.removeBuffer?.(0,Math.max(0,e-5)).catch?.(()=>{});let t=r?.config?.url;if(typeof r?.switchURL==`function`&&typeof t==`string`&&t){Se(r),r.switchURL(t,{currentTime:e,seamless:!1}).catch(()=>{b(`error`)||X(r)});return}}catch{}}b(`error`)||X(r)}}),j.current.on(y.PLAY,()=>{q(),Y(j.current),window.sensors?.track(`player_start`,{object_id:x||S||``,play_session_id:x||S,start_type:`播放`,start_position:0,duration:j.current.duration,definition:w,playback_rate:j.current.playbackRate}),l(D,j.current),be.current||=(Me(),!0),de?.()}),j.current.on(y.FULLSCREEN_CHANGE,e=>{window.sensors?.track(`player_fullscreen_toggle`,{object_id:x||S||``,play_session_id:x||S||``,action:e?`全屏`:`退出全屏`}),M.current=e}),j.current.on(y.SEEKING,()=>{N.current=!0}),j.current.on(y.SEEKED,()=>{N.current=!1});let C=()=>{if(!le||!j.current)return;let e=Number(j.current.currentTime||0);if(e<=0)return;let t=Number(j.current.duration||0);le(e,t>0?t:0)};j.current.on(y.PAUSE,()=>{window.sensors?.track(`player_pause`,{object_id:x||S||``,play_session_id:x||S||``,pause_position:j.current.currentTime,cumulative_time:j.current.duration}),C(),fe?.()}),j.current.on(y.ENDED,()=>{window.sensors?.track(`player_end`,{object_id:x||S||``,play_session_id:x||S||``,end_position:j.current.currentTime,cumulative_time:j.current.duration,end_type:`播放结束`,is_finish:j.current.currentTime===j.current.duration}),C(),pe?.(),ue&&ue()}),j.current.on(y.RATE_CHANGE,()=>{window.sensors?.track(`player_rate_change`,{object_id:x||S||``,play_session_id:x||S||``,old_rate:ye.current,new_rate:j.current.playbackRate}),ye.current=j.current.playbackRate}),j.current.on(y.DEFINITION_CHANGE,()=>{window.sensors?.track(`player_definition_change`,{object_id:x||S||``,play_session_id:x||S||``,old_def:w,new_def:j.current.definition})}),j.current.on(y.TIME_UPDATE,()=>{j.current&&C()});let E=()=>{if(!j.current)return;let e=xe.current||{},t=Number(j.current.duration||0);if(t<=0)return;let n=V.current;if(n!==null&&n>0){let e=Math.max(0,t-c),r=Math.min(e>0?e:t,n);j.current.currentTime=r,V.current=null;return}let r=Number(e.startTimeSeconds||0);if(r>0){let e=Math.min(t,r);j.current.currentTime=e;return}if(e.startPercent!==void 0&&e.startPercent>0){let n=e.startPercent/100*t;j.current.currentTime=Math.min(t,n)}};j.current.once(`loadedmetadata`,()=>{E()}),j.current.once(`ready`,()=>{W.current=!0,j.current&&j.current.duration>0&&E();let n=H.current;H.current=null,n===!0?j.current?.play?.().catch(()=>{}):n===!1&&j.current?.pause?.(),ee(D,j.current),o&&o(),f&&(K(),F.current=window.setTimeout(()=>{if(e())return;let t=j.current?.root;if(!t)return;let n=new MutationObserver(e=>{e.forEach(e=>{e.type===`attributes`&&e.attributeName===`class`&&f(!e.target.classList.contains(`xgplayer-inactive`))})});P.current=n,n.observe(t,{attributes:!0,attributeFilter:[`class`]}),f(!t.classList.contains(`xgplayer-inactive`))},33));let r=j.current.root,i=0,a=j.current.root.querySelector(`.xgmask`),{width:s,height:c}=t(w),l=s<c?document.documentElement.clientWidth:document.documentElement.clientHeight,u=Ee.current;u&&j.current?.root&&!j.current.root.contains(u)&&j.current.root.appendChild(u),r.addEventListener(`touchstart`,e=>{if(!M.current)return;let t=e.touches[0];i=t.clientX,A.current=t.clientY,G.current=!1,k.current=j.current.volume;let n=window.getComputedStyle(a).backgroundColor;O.current=1-(Number.parseFloat(n.split(`,`)[3])||0)},{passive:!1}),r.addEventListener(`touchmove`,e=>{if(!M.current)return;e.preventDefault();let t=e.touches[0],n=t.clientX-i,r=t.clientY;if(Math.abs(n)>50||N.current){G.current=!0,d();return}if(G.current){d();return}if(Math.abs(r-A.current)>6){let e=Date.now();if(e-_e.current<16)return;_e.current=e;let n=r<A.current;A.current=r;let a=t.clientX,o=i<l*De,s=i>l*Oe;if(!o&&!s){d();return}let c=a<l*De,u=a>l*Oe;if(o&&!c){G.current=!0,d();return}if(s&&!u){G.current=!0,d();return}o&&c?p(n):s&&u?m(n):d()}},{passive:!1});function d(){Z.current&&(Z.current.style.visibility=`hidden`),Q.current&&(Q.current.style.visibility=`hidden`)}function p(e){let t=e?$:-$;O.current=Math.max(0,Math.min(1,O.current+t)),Z.current&&(Z.current.style.visibility=`visible`),Q.current&&(Q.current.style.visibility=`hidden`),we.current&&(we.current.style.transform=`scaleY(${O.current})`);let n=1-O.current;a.style.cssText=`
|
|
3
3
|
background-color: rgba(0,0,0,${n.toFixed(3)});
|
|
4
4
|
will-change: background-color;
|
|
5
5
|
transform: translateZ(0);
|
|
6
|
-
`}function m(e){let t=e
|
|
7
|
-
absolute left-[18px] top-[50%] translate-y-[-50%] flex flex-col items-center justify-center gap-[12px] z-50`,style:{visibility:`hidden`},children:[_(y,{src:`/svg/icon_jiazai_zhong.svg`,alt:`Icon`,width:20,height:20}),v(`div`,{className:`relative`,children:[_(`div`,{className:`h-[92px] w-[4px] bg-[#000000] rounded-[8px]`}),_(`div`,{ref:we,className:`h-[92px] w-[4px] bg-[#fff] rounded-[8px] absolute bottom-0`,style:{transformOrigin:`bottom`,transform:`scaleY(1)`,willChange:`transform`,backfaceVisibility:`hidden`,transition:`none`}})]})]}),v(`div`,{ref:
|
|
6
|
+
`}function m(e){let t=e?$:-$;k.current=Math.max(0,Math.min(1,k.current+t)),j.current.volume=k.current,Q.current&&(Q.current.style.visibility=`visible`),Z.current&&(Z.current.style.visibility=`hidden`),Te.current&&(Te.current.style.transform=`scaleY(${k.current})`)}r.addEventListener(`touchend`,()=>{M.current&&setTimeout(()=>{d()},800)})})}catch(t){e()||console.error(`初始化播放器失败`,t)}},Me=m(()=>{},[x,S]),Ne=g(E),Pe=g(me);return Ne.current=E,Pe.current=me,xe.current=T,h(()=>(U.current=!1,L.current=0,V.current=null,H.current=null,B.current=!1,q(),J(),je(()=>U.current,()=>Ne.current?.(),e=>Pe.current?.(e)),window.webViewVideoData={resolution:w},()=>{U.current=!0,V.current=null,H.current=null,q(),J(),K(),Ce()}),[oe,ge,S,D,C]),h(()=>{let e=Number(T?.startTimeSeconds||0),t=T?.startPercent;if(!W.current||!j.current)return;let n=Number(j.current.duration||0);if(n<=0)return;let r=0;if(e>0)r=Math.min(n,e);else if(t!==void 0&&t>0)r=Math.min(n,t/100*n);else return;let i=j.current.currentTime;Math.abs(i-r)>1&&(j.current.currentTime=r)},[T?.startPercent,T?.startTimeSeconds]),ke()?v(`div`,{className:`w-full h-full relative ${p.videoBox} ${o}`,children:[_(`div`,{ref:ve,className:`w-full h-full`}),v(`div`,{ref:Ee,children:[v(`div`,{ref:Z,className:`w-[36px] h-[148px] bg-[rgba(51,51,51,0.5)] rounded-[50px] border border-[rgba(0,0,0,0.05)]
|
|
7
|
+
absolute left-[18px] top-[50%] translate-y-[-50%] flex flex-col items-center justify-center gap-[12px] z-50`,style:{visibility:`hidden`},children:[_(y,{src:`/svg/icon_jiazai_zhong.svg`,alt:`Icon`,width:20,height:20}),v(`div`,{className:`relative`,children:[_(`div`,{className:`h-[92px] w-[4px] bg-[#000000] rounded-[8px]`}),_(`div`,{ref:we,className:`h-[92px] w-[4px] bg-[#fff] rounded-[8px] absolute bottom-0`,style:{transformOrigin:`bottom`,transform:`scaleY(1)`,willChange:`transform`,backfaceVisibility:`hidden`,transition:`none`}})]})]}),v(`div`,{ref:Q,className:`w-[36px] h-[148px] bg-[rgba(51,51,51,0.5)] rounded-[50px] border border-[rgba(0,0,0,0.05)]
|
|
8
8
|
absolute right-[18px] top-[50%] translate-y-[-50%] flex flex-col items-center justify-center gap-[12px] z-50`,style:{visibility:`hidden`},children:[_(y,{src:`/svg/icon_shengyin_di.svg`,alt:`Icon`,width:20,height:20}),v(`div`,{className:`relative`,children:[_(`div`,{className:`h-[92px] w-[4px] bg-[#000000] rounded-[8px]`}),_(`div`,{ref:Te,className:`h-[92px] w-[4px] bg-[#fff] rounded-[8px] absolute bottom-0`,style:{transformOrigin:`bottom`,transform:`scaleY(1)`,willChange:`transform`,backfaceVisibility:`hidden`,transition:`none`}})]})]})]})]}):null}export{x as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
import e from"../../../assets/icons/common/right_arrow.mjs";import{jsx as t,jsxs as n}from"react/jsx-runtime";function r({label:r}){return n(`span`,{className:`inline-flex items-center gap-[6px]`,children:[t(`span`,{children:r}),t(e,{"aria-hidden":`true`,focusable:`false`,className:`h-[10px] w-[10px] shrink-0 text-[#FD4C5E]`})]})}export{r as PrerollSkipButtonContent};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{useUserStore as e}from"../../../store/modules/user-store.mjs";import{pContentMatchAds as t}from"../../../service/generated/client.mjs";import{pContentMatchAdsKey as n}from"../../../service/generated/tanstack.mjs";import{
|
|
2
|
+
"use client";import{useUserStore as e}from"../../../store/modules/user-store.mjs";import{pContentMatchAds as t}from"../../../service/generated/client.mjs";import{pContentMatchAdsKey as n}from"../../../service/generated/tanstack.mjs";import{trackAdClick as r,trackAdImpression as i}from"../../../utils/tracking.mjs";import{useRequest as a}from"../../../hooks/query/use-query.mjs";import{useVideoPlayerRef as o}from"./video-player-ref-context.mjs";import{useIsClient as s}from"foxact/use-is-client";import{useEffect as c,useRef as l,useState as u}from"react";import{jsx as d}from"react/jsx-runtime";import{create as f}from"zustand";import{createJSONStorage as p,persist as m}from"zustand/middleware";import{createPortal as h}from"react-dom";const g=f()(m((e,t)=>({shownVideoIds:new Set,hasShown:e=>t().shownVideoIds.has(e),markAsShown:n=>{let r=t().shownVideoIds;if(!r.has(n)){let t=new Set(r);t.add(n),e({shownVideoIds:t})}}}),{name:`video-blind-ad-storage`,storage:typeof window<`u`?p(()=>sessionStorage):void 0,partialize:e=>({shownVideoIds:Array.from(e.shownVideoIds)}),merge:(e,t)=>({...t,shownVideoIds:new Set(e.shownVideoIds||[])})})),_=`video_blind`;function v({videoId:f}){let p=o(),m=s(),v=e(e=>e.userId),{hasShown:y,markAsShown:b}=g(),x=l(0),S=l(null),[C,w]=u(!1),T=l(!1),E={user_id:v,ad_type:`blind`},{data:D,isLoading:O}=a(n(E),()=>t(E)),k=y(f),A=D?.data?.materials?.[0]?.advertise_code||``,j=!k&&C;c(()=>{!j||!A||i({page_key:`detail`,page_name:`详情页`,ad_slot_key:_,ad_slot_name:`盲点广告`,ad_id:A,ad_type:`blind`})},[j,A]),c(()=>{let e=p?.current?.getPlayer();if(!e||!D||k)return;let t=D.data?.settings?.trigger_video_progress_min??0;function n(r){if(T.current){e?.off(`timeupdate`,n);return}let i=r?.currentTime;if(S.current!==null){let e=i-S.current;e>0&&e<2&&(x.current+=e,!T.current&&x.current/60>=t&&(T.current=!0,w(!0)))}S.current=i}return e.on(`timeupdate`,n),()=>{e.off(`timeupdate`,n)}},[p,D,k]),c(()=>{if(j)return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=``}},[j]);function M(){k||(A&&r({page_key:`detail`,page_name:`详情页`,ad_slot_key:_,ad_slot_name:`盲点广告`,ad_id:A,ad_type:`blind`}),b(f),window.open(D?.data.materials?.[0].advertise_url))}return!m||typeof document>`u`||O||D?.data?.hit===!1||k||!C?null:h(d(`div`,{className:`blind-ad-overlay fixed inset-0 h-screen w-screen z-[99999]`,onClick:M}),document.body)}export{v as VideoBlindAdOverlay};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{useUserStore as e}from"../../../store/modules/user-store.mjs";import{pContentMatchAds as t}from"../../../service/generated/client.mjs";import{pContentMatchAdsKey as n}from"../../../service/generated/tanstack.mjs";import{trackAdClick as r,trackAdImpression as i,trackAdvertising as a}from"../../../utils/tracking.mjs";import{useRequest as o}from"../../../hooks/query/use-query.mjs";import{useVideoPlayerRef as s}from"./video-player-ref-context.mjs";import{PrerollSkipButtonContent as c}from"./preroll-skip-button-content.mjs";import{useIsClient as l}from"foxact/use-is-client";import{useCallback as u,useEffect as d,useRef as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{createPortal as g}from"react-dom";const _=`video_preroll`,v=new Set;function y({videoId:y}){let b=s(),x=l(),S=e(e=>e.userId),[C,w]=p(!1),[T,E]=p(0),D=f(null),O=f(!1),k={user_id:S,ad_type:`preroll`},{data:A,isLoading:j}=o(n(k),()=>t(k)),M=A?.data?.materials?.[0],N=A?.data?.settings?.skip_seconds??5,P=M?.advertise_code||``,F=v.has(y);d(()=>{if(A?.data?.hit!==!0||!M||O.current||F)return;function e(){if(!O.current){O.current=!0,w(!0),E(N);try{b?.current?.getPlayer()?.pause?.()}catch{}}}let t=b?.current?.getPlayer();if(t)if(b?.current?.isPlayerReady())e();else return t.once?.(`ready`,e),()=>{t.off?.(`ready`,e)}},[A,F,M,b,N]),d(()=>{if(!(!C||N<=0))return D.current=setInterval(()=>{E(e=>e<=1?(D.current&&=(clearInterval(D.current),null),0):e-1)},1e3),()=>{D.current&&=(clearInterval(D.current),null)}},[C,N]),d(()=>{!C||!P||i({page_key:`detail`,page_name:`详情页`,ad_slot_key:_,ad_slot_name:`视频贴片广告`,ad_id:P,ad_type:`preroll`})},[C,P]);let I=u(()=>{D.current&&=(clearInterval(D.current),null),w(!1),v.add(y);try{b?.current?.getPlayer()?.play?.().catch?.(()=>{})}catch{}P&&a({event_type:`close`,advertising_key:_,advertising_name:`视频贴片广告`,advertising_id:P})},[P,b,y]);function L(){P&&r({page_key:`detail`,page_name:`详情页`,ad_slot_key:_,ad_slot_name:`视频贴片广告`,ad_id:P,ad_type:`preroll`}),M?.advertise_url&&window.open(M.advertise_url)}return!x||typeof document>`u`||j||!C?null:g(h(`div`,{className:`fixed inset-0 z-[99998] bg-black`,children:[M?.advertise_icon&&m(`img`,{src:M.advertise_icon,alt:M.advertise_name||`视频贴片广告`,className:`h-full w-full cursor-pointer object-cover`,onClick:L}),m(`div`,{className:`absolute right-4 top-4 z-10`,children:T<=0?m(`button`,{type:`button`,className:`cursor-pointer rounded-lg bg-black/60 px-3 py-1 text-sm text-white`,onClick:I,children:m(c,{label:`跳过广告`})}):h(`div`,{className:`rounded-lg bg-black/60 px-3 py-1 text-sm text-white`,children:[T,`秒后可跳过`]})})]}),document.body)}export{y as VideoPrerollAdOverlay};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import e from"../../../utils/get-res-url.mjs";import{useIsClient as t}from"../../../hooks/use-is-client.mjs";import n from"../../../assets/icons/detail/video_play.mjs";import{PrerollSkipButtonContent as r}from"./preroll-skip-button-content.mjs";import{useEffect as i,useImperativeHandle as a,useMemo as o,useRef as s,useState as c}from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d({ref:d,adData:f=null,visible:p=!1,autoStart:m=!1,sessionKey:h=`default`,onAutoplayBlocked:g,onFinish:_,onSkip:v,onOpenLink:y}){let b=s(null),[x,S]=c(0),[C,w]=c(!1),T=t(),E=s(!1),D=Number(f?.settings?.skip_seconds||0),O=o(()=>f?.materials?.[0],[f?.materials]),k=String(O?.advertise_video||``).trim(),A=o(()=>k?k.startsWith(`/m3f`)?`${e()}/${k}`:`${e()}/m3f${k}`:``,[k]),j=!!k,M=j?C:p,N=x<=0;i(()=>{w(!1),S(D),E.current=!1;let e=b.current;if(e)try{e.pause(),e.currentTime=0,e.load()}catch(e){console.warn(`重置前贴片播放状态失败:`,e)}},[A,h,D]),i(()=>{if(!p||!O)return;if(D<=0){S(0);return}if(!M)return;let e=window.setInterval(()=>{S(t=>t<=1?(window.clearInterval(e),0):t-1)},1e3);return()=>{window.clearInterval(e)}},[O,M,h,D,p]),i(()=>{!p||!m||!j||!b.current||E.current||(E.current=!0,b.current.play().catch(e=>{console.warn(`自动启动前贴片播放失败:`,e),g?.()}))},[m,j,g,h,p]),a(d,()=>({async play(){if(!b.current)return!1;try{return await b.current.play(),!0}catch(e){return console.warn(`手动启动前贴片播放失败:`,e),!1}}}),[]);function P(){N&&v?.()}function F(){if(j&&!C){let e=b.current;if(!e)return;e.play().catch(e=>{console.warn(`手动启动前贴片播放失败:`,e)});return}let e=O?.advertise_url;e&&(y?.(e),window.open(e,`_blank`,`noopener,noreferrer`))}if(!T||typeof window>`u`||!f?.hit||!O||!j)return null;let I=l(`video`,{ref:b,src:A,poster:O?.advertise_icon||``,className:`pointer-events-none w-full h-full object-cover bg-black`,autoPlay:m,muted:!0,playsInline:!0,preload:`none`,onEnded:()=>{_?.()},onPlaying:()=>{w(!0)},onError:e=>{console.warn(`[video-preroll-ad][error]`,{sessionKey:h,error:e.currentTarget?.error})}});return u(`div`,{className:`video-preroll-ad absolute top-0 left-0 w-full h-full z-[9999] ${p?``:`pointer-events-none opacity-0`}`,"aria-hidden":!p,children:[l(`button`,{type:`button`,disabled:!N,onClick:P,className:`absolute z-[10] text-sm top-6 right-6 bg-black/30 text-white rounded-full px-6 py-1.5 flex items-center justify-center disabled:opacity-60 disabled:cursor-not-allowed`,children:N?l(r,{label:`跳过`}):`跳过 ${x}s`}),u(`div`,{role:`button`,tabIndex:0,onClick:F,className:`relative block w-full h-full`,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),F())},children:[I,j&&!C&&l(`div`,{className:`absolute inset-0 z-[2] flex items-center justify-center bg-black/20 pointer-events-none`,children:l(`div`,{className:`flex items-center justify-center w-12 h-12 rounded-full bg-[rgba(0,0,0,0.45)]`,children:l(n,{className:`w-[16px] h-[22px] text-white`})})})]})]})}export{d as VideoPrerollAd};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{
|
|
2
|
+
"use client";import{usePageLifecycle as e}from"../../../../../utils/tracking.mjs";import{HeaderNav as t}from"../../../../common/header-nav/client.mjs";import{InteractionTabs as n}from"../interaction-tabs/index.mjs";import{jsx as r}from"react/jsx-runtime";function i({defaultTab:i=`followed`}){return e(i===`fans`?`page_fans`:`page_followed`,i===`fans`?`粉丝`:`关注`),r(t,{centerChild:r(n,{type:i})})}export{i as FollowHeaderNav};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Button as e}from"../../ui/button.mjs";import{useUserStore as t}from"../../../store/modules/user-store.mjs";import{gCommunityGetContentList as n,pCommunityAddContentToCollection as r}from"../../../service/generated/client.mjs";import{
|
|
2
|
+
"use client";import{Button as e}from"../../ui/button.mjs";import{useUserStore as t}from"../../../store/modules/user-store.mjs";import{gCommunityGetContentList as n,pCommunityAddContentToCollection as r}from"../../../service/generated/client.mjs";import{usePageLifecycle as i}from"../../../utils/tracking.mjs";import{Box as a}from"../../ui/box.mjs";import{useDeleteRequest as o,useMutation as s,usePaginated as c}from"../../../hooks/query/use-query.mjs";import{HeaderNav as l}from"../../common/header-nav/client.mjs";import{UserActivityList as u}from"../../common/list/user-activity-list/user-activity-list.mjs";import{useMemo as d,useState as f}from"react";import{jsx as p,jsxs as m}from"react/jsx-runtime";import{toast as h}from"sonner";import{useRouter as g}from"next/navigation";import{useTranslations as _}from"next-intl";function v(e){return{type:e.type,content_id:e.content_id||``,author:{nick_name:e.author?.nickname||``,nickname:e.author?.nickname||``,avatar:e.author?.avatar_url||``},content:e.content||``,medias:e.medias||[],like_count:e.like_count||0,is_liked:e.interaction?.is_liked||!1,dislike_count:e.dislike_count||0,is_dislike:e.interaction?.is_dislike||!1,comment_count:e.comment_count||0}}function y({id:y}){let{userId:b}=t();i(`page_collection_add`,`添加到合集`);let x=y,[S,C]=f(()=>new Set),w=o(),{mutateAsync:T,isPending:E}=s(async e=>await r({collection_id:x,content_id:e})),{data:D,isFetching:O,fetchNextPage:k,hasNextPage:A}=c({key:[`collection-add`,x,b],initialPageParam:1,async queryFn(e){if(!b)return{data:{list:[],total:0}};let t=await n({user_id:b,page:e,collection_id:x,page_size:10}),r=t.data?.data?.contents??[];return{data:{list:r,total:t.data?.data?.total??r.length,has_more:t.data?.data?.has_more?!0:void 0}}},getNextPageParam(e,t){let n=e?.data||{},r=n.list||[];if(typeof n.has_more==`boolean`)return n.has_more?t.length+1:void 0;if(!(r.length===0||n.total===0))return t.length+1}}),j=_(`components.pages.collectionAdd`),M=d(()=>D?.pages.flatMap(e=>((e?.data).list||[]).map(e=>v(e)))??[],[D]);function N(e){E||C(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function P(){if(E)return;if(!x){h.error(j(`page.collectionNotFound`));return}if(!b){h.error(j(`page.userNotFound`));return}let e=Array.from(S);if(e.length===0){h.error(j(`page.selectPostFirst`));return}let t=h.loading(j(`page.submitting`));try{await Promise.all(e.map(e=>T(e))),h.success(j(`page.submitSuccess`),{id:t}),C(new Set),w([`collection-add`,x,b]),w([`collection-detail`,x])}catch(e){console.error(`添加合集失败`,e),h.error(j(`page.submitFailed`),{id:t})}}let F=g(),I=S.size;return m(a,{className:`bg-bg2 !min-h-screen`,children:[p(l,{onBack:()=>F.back(),className:`!bg-bg2`,title:j(`page.title`),rightChild:m(e,{onClick:P,disabled:E||I===0,children:[j(`page.done`),`(`,I,`)`]})}),p(u,{list:M,loading:O,hasMore:A,loadMore:async()=>{k()},emptyText:j(`page.emptyPublish`),showGroupHeaders:!1,isEditMode:!0,selectedIds:S,onToggleSelection:N})]})}export{y as CollectionAddPage};
|