@funhub/platform 0.2.4-beta.4 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/assets/icons/channel-list/channel-active-indicator.mjs +2 -0
  2. package/dist/assets/icons/common/header-menu.mjs +2 -0
  3. package/dist/assets/icons/common/header-search-icon.mjs +2 -0
  4. package/dist/assets/icons/common/right_arrow_thin.mjs +2 -0
  5. package/dist/assets/icons/eye-off-icon.mjs +1 -1
  6. package/dist/assets/icons/marquee-close.mjs +2 -0
  7. package/dist/assets/icons/marquee-speaker.mjs +2 -0
  8. package/dist/assets/images/shortcut-grid/shortcut-grid-card-bg-primary.mjs +2 -0
  9. package/dist/biz.d.mts +10 -6
  10. package/dist/biz.mjs +1 -1
  11. package/dist/common.d.mts +5 -2
  12. package/dist/common.mjs +1 -1
  13. package/dist/components/biz/basics/fullscreen-feed/runtime/user-action.mjs +1 -1
  14. package/dist/components/biz/basics/logo/variants/basic-logo/runtime/client.mjs +1 -1
  15. package/dist/components/biz/business/advertisement/ad-match.d.mts +7 -3
  16. package/dist/components/biz/business/advertisement/ad-match.mjs +1 -1
  17. package/dist/components/biz/business/advertisement/banner-ad/client.mjs +1 -1
  18. package/dist/components/biz/business/advertisement/banner-ad/material.d.mts +2 -2
  19. package/dist/components/biz/business/advertisement/banner-ad/material.mjs +1 -1
  20. package/dist/components/biz/business/advertisement/banner-ad/schema.d.mts +9 -4
  21. package/dist/components/biz/business/advertisement/banner-ad/schema.mjs +1 -1
  22. package/dist/components/biz/business/advertisement/feed-ad/index.d.mts +1 -31
  23. package/dist/components/biz/business/advertisement/feed-ad/index.mjs +1 -1
  24. package/dist/components/biz/business/advertisement/floating-ad/client.d.mts +4 -3
  25. package/dist/components/biz/business/advertisement/floating-ad/client.mjs +1 -1
  26. package/dist/components/biz/business/advertisement/floating-ad/index.d.mts +1 -1
  27. package/dist/components/biz/business/advertisement/floating-ad/material.d.mts +5 -0
  28. package/dist/components/biz/business/advertisement/floating-ad/schema.d.mts +21 -6
  29. package/dist/components/biz/business/advertisement/floating-ad/schema.mjs +1 -1
  30. package/dist/components/biz/business/advertisement/icon-ad/client.mjs +1 -1
  31. package/dist/components/biz/business/advertisement/icon-ad/material.d.mts +1 -1
  32. package/dist/components/biz/business/advertisement/icon-ad/material.mjs +1 -1
  33. package/dist/components/biz/business/advertisement/icon-ad/schema.d.mts +7 -1
  34. package/dist/components/biz/business/advertisement/icon-ad/schema.mjs +1 -1
  35. package/dist/components/biz/business/advertisement/index.d.mts +4 -4
  36. package/dist/components/biz/business/advertisement/popup-ad/client.mjs +2 -2
  37. package/dist/components/biz/business/advertisement/popup-ad/index.d.mts +1 -1
  38. package/dist/components/biz/business/advertisement/popup-ad/material.d.mts +2 -2
  39. package/dist/components/biz/business/advertisement/popup-ad/schema.d.mts +14 -15
  40. package/dist/components/biz/business/advertisement/popup-ad/schema.mjs +1 -1
  41. package/dist/components/biz/business/advertisement/text-ad/client.mjs +1 -1
  42. package/dist/components/biz/business/advertisement/text-ad/material.d.mts +1 -1
  43. package/dist/components/biz/business/advertisement/text-ad/material.mjs +1 -1
  44. package/dist/components/biz/business/advertisement/text-ad/schema.d.mts +5 -1
  45. package/dist/components/biz/business/advertisement/text-ad/schema.mjs +1 -1
  46. package/dist/components/biz/business/banner/variants/basic-banner/runtime/client.mjs +1 -1
  47. package/dist/components/biz/business/banner-carousel/client.d.mts +2 -1
  48. package/dist/components/biz/business/banner-carousel/client.mjs +1 -1
  49. package/dist/components/biz/business/banner-carousel/default-props.mjs +1 -1
  50. package/dist/components/biz/business/channel-list/client.mjs +1 -1
  51. package/dist/components/biz/business/channel-list/default-props.mjs +1 -1
  52. package/dist/components/biz/business/detail/shared/detail-operate.mjs +1 -1
  53. package/dist/components/biz/business/detail/shared/editor-preview.mjs +1 -1
  54. package/dist/components/biz/business/detail/video-detail-actions/client.mjs +1 -1
  55. package/dist/components/biz/business/detail/video-detail-info/client.mjs +1 -1
  56. package/dist/components/biz/business/detail/video-detail-recommend/client.d.mts +1 -13
  57. package/dist/components/biz/business/detail/video-detail-recommend/client.mjs +1 -1
  58. package/dist/components/biz/business/detail/video-detail-recommend/material.mjs +1 -1
  59. package/dist/components/biz/business/detail/video-detail-recommend/schema.mjs +1 -1
  60. package/dist/components/biz/business/detail/video-detail-recommend/shared.mjs +2 -0
  61. package/dist/components/biz/business/header-search/header-avatar-icon/client.mjs +1 -1
  62. package/dist/components/biz/business/header-search/header-avatar-logo-search/client.d.mts +1 -1
  63. package/dist/components/biz/business/header-search/header-avatar-logo-search/client.mjs +1 -1
  64. package/dist/components/biz/business/header-search/header-avatar-logo-search/schema.d.mts +4 -3
  65. package/dist/components/biz/business/header-search/header-avatar-logo-search/schema.mjs +1 -1
  66. package/dist/components/biz/business/header-search/header-avatar-logo-search-icon/client.mjs +1 -1
  67. package/dist/components/biz/business/header-search/header-logo-search/client.mjs +1 -1
  68. package/dist/components/biz/business/header-search/header-search/client.mjs +1 -1
  69. package/dist/components/biz/business/header-search/shared/avatar.mjs +1 -1
  70. package/dist/components/biz/business/header-search/shared/header-action.mjs +2 -0
  71. package/dist/components/biz/business/header-search/shared/header-search-icon.mjs +2 -0
  72. package/dist/components/biz/business/header-search/shared/header-shell.mjs +2 -0
  73. package/dist/components/biz/business/header-search/shared/logo.mjs +1 -1
  74. package/dist/components/biz/business/header-search/shared/search.mjs +1 -1
  75. package/dist/components/biz/business/home-recommend/home-recommend-grid/inspector-schema.d.mts +0 -8
  76. package/dist/components/biz/business/home-recommend/home-recommend-grid/inspector-schema.mjs +1 -1
  77. package/dist/components/biz/business/home-recommend/home-recommend-grid/material.d.mts +0 -8
  78. package/dist/components/biz/business/home-recommend/home-recommend-waterfall/inspector-schema.d.mts +0 -8
  79. package/dist/components/biz/business/home-recommend/home-recommend-waterfall/inspector-schema.mjs +1 -1
  80. package/dist/components/biz/business/home-recommend/home-recommend-waterfall/material.d.mts +0 -8
  81. package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
  82. package/dist/components/biz/business/home-recommend/shared/home-recommend-preview.mjs +1 -1
  83. package/dist/components/biz/business/hot-recommend/client.d.mts +17 -0
  84. package/dist/components/biz/business/hot-recommend/client.mjs +2 -0
  85. package/dist/components/biz/business/hot-recommend/index.d.mts +5 -0
  86. package/dist/components/biz/business/hot-recommend/material.d.mts +24 -0
  87. package/dist/components/biz/business/hot-recommend/material.mjs +2 -0
  88. package/dist/components/biz/business/hot-recommend/schema.d.mts +23 -0
  89. package/dist/components/biz/business/hot-recommend/schema.mjs +2 -0
  90. package/dist/components/biz/business/hot-recommend/server.d.mts +11 -0
  91. package/dist/components/biz/business/hot-recommend/server.mjs +2 -0
  92. package/dist/components/biz/business/index.d.mts +10 -5
  93. package/dist/components/biz/business/large-feature-grid/card-item.mjs +1 -1
  94. package/dist/components/biz/business/large-feature-grid/client.mjs +1 -1
  95. package/dist/components/biz/business/large-feature-grid/schema.mjs +1 -1
  96. package/dist/components/biz/business/marquee/client.mjs +1 -1
  97. package/dist/components/biz/business/marquee/marquee.module.mjs +2 -6
  98. package/dist/components/biz/business/nav-bar/variants/basic-nav-bar/runtime/client.mjs +1 -1
  99. package/dist/components/biz/business/profile/index.d.mts +1 -1
  100. package/dist/components/biz/business/profile/profile-header/client.d.mts +2 -1
  101. package/dist/components/biz/business/profile/profile-header/client.mjs +1 -1
  102. package/dist/components/biz/business/profile/profile-header/index.d.mts +1 -1
  103. package/dist/components/biz/business/profile/profile-header/user-profile-avatar.mjs +1 -1
  104. package/dist/components/biz/business/profile/profile-header/user-profile-cover-background.mjs +1 -1
  105. package/dist/components/biz/business/profile/profile-main/client.mjs +1 -1
  106. package/dist/components/biz/business/profile/profile-main/empty-state.mjs +2 -0
  107. package/dist/components/biz/business/profile/profile-main/shell.mjs +1 -1
  108. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.mjs +1 -1
  109. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/video-waterfall.mjs +2 -0
  110. package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.mjs +1 -1
  111. package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.d.mts +5 -1
  112. package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.mjs +1 -1
  113. package/dist/components/biz/business/profile/profile-main/utils.mjs +1 -1
  114. package/dist/components/biz/business/ranking-recommend/client.d.mts +17 -0
  115. package/dist/components/biz/business/ranking-recommend/client.mjs +70 -0
  116. package/dist/components/biz/business/ranking-recommend/material.d.mts +35 -0
  117. package/dist/components/biz/business/ranking-recommend/material.mjs +2 -0
  118. package/dist/components/biz/business/ranking-recommend/schema.d.mts +35 -0
  119. package/dist/components/biz/business/ranking-recommend/schema.mjs +2 -0
  120. package/dist/components/biz/business/ranking-recommend/server.d.mts +11 -0
  121. package/dist/components/biz/business/ranking-recommend/server.mjs +2 -0
  122. package/dist/components/biz/business/ranking-recommend/shared/query.mjs +2 -0
  123. package/dist/components/biz/business/ranking-recommend/shared.d.mts +15 -0
  124. package/dist/components/biz/business/ranking-recommend/shared.mjs +2 -0
  125. package/dist/components/biz/business/search-history/client.mjs +1 -1
  126. package/dist/components/biz/business/search-history/schema.mjs +1 -1
  127. package/dist/components/biz/business/search-input/client.mjs +1 -1
  128. package/dist/components/biz/business/shortcut-grid/client.mjs +1 -1
  129. package/dist/components/biz/business/tab-bar/client.mjs +1 -1
  130. package/dist/components/common/collection-popup/create-collection-sheet.d.mts +41 -0
  131. package/dist/components/common/collection-popup/create-collection-sheet.mjs +2 -0
  132. package/dist/components/common/collection-popup/index.d.mts +1 -0
  133. package/dist/components/common/collection-popup/index.mjs +1 -1
  134. package/dist/components/common/icons/setting.mjs +1 -1
  135. package/dist/components/common/list/collection-list/collection-list-item.d.mts +8 -0
  136. package/dist/components/common/list/collection-list/collection-list-item.mjs +1 -1
  137. package/dist/components/common/list/collection-list/collection-list.d.mts +6 -0
  138. package/dist/components/common/list/collection-list/collection-list.mjs +1 -1
  139. package/dist/components/common/list/collection-list/collection-select-icon.mjs +2 -0
  140. package/dist/components/common/list/waterfall-recommend/index.d.mts +2 -0
  141. package/dist/components/common/list/waterfall-recommend/waterfall-recommend.d.mts +116 -0
  142. package/dist/components/common/list/waterfall-recommend/waterfall-recommend.mjs +2 -0
  143. package/dist/components/common/series-episodes/index.d.mts +3 -1
  144. package/dist/components/common/series-episodes/index.mjs +1 -1
  145. package/dist/components/common/tab-bar/index.mjs +1 -1
  146. package/dist/components/pages/collection-detail/_components/collection-detail-video-card.mjs +2 -0
  147. package/dist/components/pages/collection-detail/detail.mjs +1 -1
  148. package/dist/components/pages/edit/page.mjs +1 -1
  149. package/dist/components/pages/feedback/_components/feedback-form.mjs +1 -1
  150. package/dist/components/pages/home/client.mjs +1 -1
  151. package/dist/components/pages/login/auth-page-styles.mjs +6 -0
  152. package/dist/components/pages/login/login-client.mjs +1 -1
  153. package/dist/components/pages/login/register.mjs +1 -1
  154. package/dist/components/pages/login/verify.mjs +1 -4
  155. package/dist/components/pages/publish/components/collection.mjs +1 -1
  156. package/dist/components/pages/search/page-client.mjs +1 -1
  157. package/dist/components/pages/search/search-result/index.mjs +1 -1
  158. package/dist/components/pages/search/search-result/search-all.mjs +1 -1
  159. package/dist/components/pages/search/search-result/search-user.mjs +1 -1
  160. package/dist/components/pages/search/search-result/search-video-info.mjs +1 -1
  161. package/dist/components/pages/search/search-result/shared.mjs +2 -0
  162. package/dist/components/pages/search/top-header.mjs +1 -1
  163. package/dist/components/pages/search-result/page-client.mjs +1 -1
  164. package/dist/components/pages/search-result/search-all.mjs +1 -1
  165. package/dist/components/pages/search-result/search-empty.mjs +2 -0
  166. package/dist/components/pages/search-result/search-tab.mjs +1 -1
  167. package/dist/components/pages/search-result/search-user.mjs +1 -1
  168. package/dist/components/pages/search-result/search-video-info.mjs +2 -0
  169. package/dist/components/pages/search-result/shared.mjs +2 -0
  170. package/dist/components/pages/search-result/top-header.mjs +2 -0
  171. package/dist/components/pages/settings/_components/reset-password-drawer.mjs +2 -2
  172. package/dist/components/pages/settings/_components/settings.mjs +1 -1
  173. package/dist/components/pages/user-follow/_components/follow-no-login.mjs +1 -1
  174. package/dist/components/pages/video-list/video-list-client.mjs +1 -1
  175. package/dist/components/pages/video-list/video-list-recommend-item.mjs +2 -0
  176. package/dist/components/pages/video-list/video-list-skeleton.d.mts +2 -3
  177. package/dist/components/pages/video-list/video-list-skeleton.mjs +1 -1
  178. package/dist/components/ui/box.d.mts +1 -1
  179. package/dist/i18n/locales/en.mjs +2 -2
  180. package/dist/i18n/locales/zh-CN.mjs +2 -2
  181. package/dist/materials.d.mts +3 -1
  182. package/dist/materials.mjs +1 -1
  183. package/dist/service/generated/client.d.mts +38 -2
  184. package/dist/service/generated/client.mjs +1 -1
  185. package/dist/service/generated/tanstack.d.mts +47 -2
  186. package/dist/service/generated/tanstack.mjs +1 -1
  187. package/dist/service.d.mts +3 -3
  188. package/dist/service.mjs +1 -1
  189. package/dist/theme-tokens.d.mts +9 -0
  190. package/dist/theme-tokens.mjs +2 -0
  191. package/dist/types.d.mts +662 -9
  192. package/dist/utils/helper.d.mts +1 -1
  193. package/dist/utils/helper.mjs +1 -1
  194. package/package.json +8 -2
  195. package/theme.css +170 -59
  196. package/dist/assets/icons/detail/collect_nor.mjs +0 -2
  197. package/dist/assets/icons/detail/collect_sel.mjs +0 -2
  198. package/dist/assets/icons/detail/share.mjs +0 -2
  199. package/dist/assets/icons/marquee-enter.mjs +0 -2
  200. package/dist/assets/icons/right_arrow.mjs +0 -2
  201. package/dist/assets/icons/search/avatar.mjs +0 -2
  202. package/dist/assets/images/marquee.mjs +0 -2
  203. package/dist/components/biz/business/detail/shared/detail-introduction.mjs +0 -2
  204. package/dist/components/common/collection-popup/collection-create-modal.mjs +0 -2
  205. package/dist/components/common/skeleton/search-video-card-skeleton.mjs +0 -2
  206. package/dist/components/pages/search/search-utils.mjs +0 -2
  207. package/dist/components/pages/search-result/search-result-skeleton.mjs +0 -2
  208. package/dist/components/pages/search-result/search-video.mjs +0 -2
  209. package/dist/components/pages/video-list/video-list-item.mjs +0 -2
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionBatchClearBrowse as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{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{VideoList as u}from"../../../../../../common/list/video-list/video-list.mjs";import{getHistoryData as ee,likeContentType as d}from"../../utils.mjs";import{useEffect as f,useMemo as p,useState as m}from"react";import{jsx as h,jsxs as g}from"react/jsx-runtime";import{toast as _}from"sonner";import{useTranslations as v}from"next-intl";import{parseAsString as y,useQueryState as b}from"nuqs";function x(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n.title||n.text||``,coverImage:n.cover_image_thumbnail||n.cover_image||n.cover_horizontal_image_thumbnail||void 0,publishTime:r}}function S(e){let{detail:t,content_play_progress:n}=e,{user_info:r,info:i,statics_cnt:a,publish_time:o,parent_content_info:s}=t;return{is_more_link:i.is_more_link,id:e.id,title:i.title||i.text||i.name||``,coverImage:i.cover_image_thumbnail||i.cover_image||i.cover_horizontal_image_thumbnail||``,duration:Number(i.video_duration??0),progress:n?.percent??0,seriesNum:n?.series_num,authorName:r.name,viewCount:i?.play_count??a?.browse_cnt??0,publishTime:o,type:s?.type}}function C(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}const w=[`video`,`post`];function T({mode:T=`renderer`,targetUserId:E,queryKeyPrefix:D}){let O=v(`components.pages.profile.components.tabs`),k=T===`renderer`,A=D??[],[j,M]=b(`historyTab`,y.withDefault(`video`)),N=p(()=>w.includes(j)?j:`video`,[j]),[P,F]=m(!1),[I,L]=m(()=>new Set),R=t(e=>e.userId),z=c(),B=[...A,`user-history-video`],V=[...A,`user-history-post`],H=s({key:B,initialPageParam:1,async queryFn(e){return ee({targetUserId:E,page:e,contentType:d.video})},options:{staleTime:0,enabled:k},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),U=s({key:V,initialPageParam:1,async queryFn(e){return{data:{list:[],total:0,has_more:!1}}},options:{staleTime:0,enabled:k},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=N===`video`?H:U,G=H.data?.pages.flatMap(e=>(e.data?.list??[]).map(S))??[],K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(x))??[],q=N===`video`?G:K,J=new Set(q.map(e=>e.id)),Y=N===`video`,{mutateAsync:X,isPending:Z}=o(async e=>await n({app_id:0,user_id:R,content_type:e.contentType,content_ids:e.contentIds}));f(()=>{L(new Set)},[N]),f(()=>{j!==N&&M(N)},[N,j,M]);let Q=e=>{L(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},te=()=>{I.size===J.size&&J.size>0?L(new Set):L(new Set(J))},ne=async()=>{if(!(I.size===0||Z)){if(!R){_.error(O(`historyTab.pleaseLogin`));return}try{let e=Array.from(I),t=await X({contentIds:e,contentType:Y?1:2});if(t.code===0){_.success(O(`historyTab.historyDeletedSuccess`));let t=new Set(e);z(Y?B:V,e=>C(e,t,e=>e.id)),L(new Set),F(!1)}else _.error(t.message||O(`historyTab.deleteFailed`))}catch(e){console.error(`删除浏览记录失败`,e),_.error(O(`historyTab.operationFailed`))}}},$=async()=>{k&&await W.fetchNextPage()};return g(r,{children:[h(r,{className:``,children:N===`video`?h(u,{showVideoProgress:!0,list:G,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,emptyText:O(`historyTab.emptyContent`),isEditMode:P,selectedIds:I,onToggleSelection:Q}):h(l,{list:K,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,emptyText:O(`historyTab.emptyContent`),isEditMode:P,selectedIds:I,onToggleSelection:Q})}),P&&g(r,{className:`fixed left-0 z-10 flex w-full items-center justify-between bg-bg1 px-3 py-2 bottom-[var(--tab-bar-height)]`,children:[g(r,{className:`flex items-center gap-2`,children:[h(i,{checked:I.size===J.size&&J.size>0,onCheckedChange:te}),h(a,{className:`text-sm text-text1`,children:O(`historyTab.selectAll`)})]}),h(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:I.size>0?`default`:`outline`,disabled:I.size===0||Z,onClick:ne,children:O(Z?`historyTab.processing`:`historyTab.delete`)})]})]})}export{T as HistoryTab};
2
+ "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionBatchClearBrowse as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{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{ProfileMainEmptyState as u}from"../../empty-state.mjs";import{CollectVideoWaterfall as d}from"../collect-tab/video-waterfall.mjs";import{getHistoryData as ee,likeContentType as f}from"../../utils.mjs";import{useEffect as p,useMemo as m,useState as h}from"react";import{jsx as g,jsxs as _}from"react/jsx-runtime";import{toast as v}from"sonner";import{useTranslations as y}from"next-intl";import{parseAsString as b,useQueryState as x}from"nuqs";function S(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n.title||n.text||``,coverImage:n.cover_image_thumbnail||n.cover_image||n.cover_horizontal_image_thumbnail||void 0,publishTime:r}}function C(e){let{detail:t,content_play_progress:n}=e,{user_info:r,info:i,statics_cnt:a,publish_time:o,parent_content_info:s}=t,c=(Array.isArray(i?.tags)?i.tags:[]).map(e=>typeof e==`string`?e.trim():e&&typeof e==`object`&&`name`in e?String(e.name||``).trim():``).find(Boolean)||``,l=String(i?.img_type||``).trim().toLowerCase(),u=l===`long`||!l&&!!i?.cover_horizontal_image_thumbnail,d=u?i?.cover_horizontal_image_thumbnail||i?.img_x||i?.cover_image_thumbnail||i?.img_y||i?.cover_image||``:i?.cover_image_thumbnail||i?.img_y||i?.cover_horizontal_image_thumbnail||i?.img_x||i?.cover_image||``;return{is_more_link:i.is_more_link,id:e.id,title:i.title||i.text||i.name||``,coverImage:d,duration:Number(i.video_duration??0),progress:n?.percent??0,seriesNum:n?.series_num,authorName:r.name,viewCount:i?.play_count??a?.browse_cnt??0,publishTime:o,type:s?.type,imgType:l||(u?`long`:`short`),score:i?.score,metaPrimaryText:c}}function w(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}const te=[`video`,`post`];function T({mode:T=`renderer`,targetUserId:E,queryKeyPrefix:D}){let O=y(`components.pages.profile.components.tabs`),k=T===`renderer`,A=D??[],[j,M]=x(`historyTab`,b.withDefault(`video`)),N=m(()=>te.includes(j)?j:`video`,[j]),[P,F]=h(!1),[I,L]=h(()=>new Set),R=t(e=>e.userId),z=c(),B=[...A,`user-history-video`],V=[...A,`user-history-post`],H=s({key:B,initialPageParam:1,async queryFn(e){return ee({targetUserId:E,page:e,contentType:f.video})},options:{staleTime:0,enabled:k},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),U=s({key:V,initialPageParam:1,async queryFn(e){return{data:{list:[],total:0,has_more:!1}}},options:{staleTime:0,enabled:k},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=N===`video`?H:U,G=H.data?.pages.flatMap(e=>(e.data?.list??[]).map(C))??[],K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(S))??[],q=N===`video`?G:K,J=N===`video`?G.length===0&&!W.isFetching:K.length===0&&!W.isFetching,Y=new Set(q.map(e=>e.id)),X=N===`video`,{mutateAsync:Z,isPending:Q}=o(async e=>await n({app_id:0,user_id:R,content_type:e.contentType,content_ids:e.contentIds}));p(()=>{L(new Set)},[N]),p(()=>{j!==N&&M(N)},[N,j,M]);let ne=e=>{L(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},re=()=>{I.size===Y.size&&Y.size>0?L(new Set):L(new Set(Y))},ie=async()=>{if(!(I.size===0||Q)){if(!R){v.error(O(`historyTab.pleaseLogin`));return}try{let e=Array.from(I),t=await Z({contentIds:e,contentType:X?1:2});if(t.code===0){v.success(O(`historyTab.historyDeletedSuccess`));let t=new Set(e);z(X?B:V,e=>w(e,t,e=>e.id)),L(new Set),F(!1)}else v.error(t.message||O(`historyTab.deleteFailed`))}catch(e){console.error(`删除浏览记录失败`,e),v.error(O(`historyTab.operationFailed`))}}},$=async()=>{k&&await W.fetchNextPage()};return _(r,{children:[g(r,{className:``,children:N===`video`?J?g(u,{text:O(`historyTab.emptyContent`)}):g(d,{list:G,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,emptyText:O(`historyTab.emptyContent`)}):J?g(u,{text:O(`historyTab.emptyContent`)}):g(l,{list:K,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,emptyText:O(`historyTab.emptyContent`),isEditMode:P,selectedIds:I,onToggleSelection:ne})}),P&&_(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:[_(r,{className:`flex items-center gap-2`,children:[g(i,{checked:I.size===Y.size&&Y.size>0,onCheckedChange:re}),g(a,{className:`text-sm text-text1`,children:O(`historyTab.selectAll`)})]}),g(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:I.size>0?`default`:`outline`,disabled:I.size===0||Q,onClick:ie,children:O(Q?`historyTab.processing`:`historyTab.delete`)})]})]})}export{T as HistoryTab};
@@ -38,7 +38,11 @@ interface ExtendedContentInfo extends CommunityContentInfo {
38
38
  video_duration?: number;
39
39
  cover_image_thumbnail?: string;
40
40
  cover_horizontal_image_thumbnail?: string;
41
+ img_type?: string;
42
+ img_x?: string;
43
+ img_y?: string;
41
44
  name?: string;
45
+ score?: number | string;
42
46
  text?: string;
43
47
  play_count?: number;
44
48
  }
@@ -75,7 +79,7 @@ declare function LikeTab({
75
79
  mode,
76
80
  targetUserId,
77
81
  queryKeyPrefix,
78
- isMine
82
+ isMine: _isMine
79
83
  }: LikeTabProps): react_jsx_runtime0.JSX.Element;
80
84
  //#endregion
81
85
  export { LikeDetailItem, LikeTab, LikeTabProps };
@@ -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{VideoList as u}from"../../../../../../common/list/video-list/video-list.mjs";import{getLikeData as d,likeContentType as f}from"../../utils.mjs";import{useEffect as p,useMemo as m,useState as h}from"react";import{jsx as g,jsxs as _}from"react/jsx-runtime";import{toast as v}from"sonner";import{useTranslations as y}from"next-intl";import{parseAsString as ee,useQueryState as b}from"nuqs";function x(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 S(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 C(e){let{detail:t}=e,{user_info:n,info:r,statics_cnt:i,publish_time:a,parent_content_info:o}=t;return{id:e.id,is_more_link:r?.is_more_link||!1,title:r?.name||r?.text||r?.content||``,coverImage:r?.cover_image_thumbnail||r?.cover_image||r?.cover_horizontal_image_thumbnail||``,duration:Number(r?.video_duration??0),progress:e.content_play_progress?.percent??0,seriesNum:e.content_play_progress?.series_num,authorName:n?.name||``,viewCount:r?.play_count??i?.browse_cnt??0,publishTime:a??0,type:o?.type}}const w=[`video`,`post`];function T({mode:T=`renderer`,targetUserId:E,queryKeyPrefix:D,isMine:te=!1}){let O=y(`components.pages.profile.components.tabs`),k=T===`renderer`,A=D??[],[j,M]=b(`likeTab`,ee.withDefault(`video`)),N=m(()=>w.includes(j)?j:`video`,[j]),[P,F]=h(!1),[I,L]=h(()=>new Set),R=t(e=>e.userId),z=c(),B=[...A,`user-like-video`],V=[...A,`user-like-post`],H=s({key:B,initialPageParam:1,async queryFn(e){return d({targetUserId:E,page:e,contentType:f.video})},options:{staleTime:0,enabled:k},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}});console.log({videoData:H});let U=s({key:V,options:{staleTime:0,enabled:k},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}}),W=N===`video`?H:U,G=H.data?.pages.flatMap(e=>(e.data?.list??[]).map(C))??[],K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(S))??[],q=N===`video`?G:K,J=new Set(q.map(e=>e.id)),Y=N===`video`,{mutateAsync:X,isPending:Z}=o(async e=>await n({app_id:0,user_id:R,action:`cancel_like`,content_ids:e,content_type:Y?1:2}));p(()=>{L(new Set)},[N]),p(()=>{j!==N&&M(N)},[N,j,M]);let Q=e=>{L(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ne=()=>{I.size===J.size&&J.size>0?L(new Set):L(new Set(J))},re=async()=>{if(!(I.size===0||Z)){if(!R){v.error(O(`likeTab.pleaseLogin`));return}try{let e=Array.from(I),t=await X(e);if(t.code===0){v.success(O(`likeTab.unlikedSuccess`));let t=new Set(e);z(Y?B:V,e=>x(e,t,e=>e.id)),L(new Set),F(!1)}else v.error(t.message||O(`likeTab.unlikeFailed`))}catch(e){console.error(`取消点赞失败`,e),v.error(O(`likeTab.operationFailed`))}}},$=async()=>{k&&await W.fetchNextPage()};return _(r,{children:[g(r,{className:``,children:N===`video`?g(u,{list:G,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,emptyText:O(`likeTab.emptyContent`),isEditMode:P,selectedIds:I,showVideoProgress:!1,onToggleSelection:Q}):g(l,{list:K,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,emptyText:O(`likeTab.emptyContent`),isEditMode:P,selectedIds:I,onToggleSelection:Q})}),P&&_(r,{className:`fixed left-0 z-10 flex w-full items-center justify-between bg-bg1 px-3 py-2 bottom-[var(--tab-bar-height)]`,children:[_(r,{className:`flex items-center gap-2`,children:[g(i,{checked:I.size===J.size&&J.size>0,onCheckedChange:ne}),g(a,{className:`text-sm text-text1`,children:O(`likeTab.selectAll`)})]}),g(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:I.size>0?`default`:`outline`,disabled:I.size===0||Z,onClick:re,children:O(Z?`likeTab.processing`:`likeTab.delete`)})]})]})}export{T as LikeTab};
2
+ "use client";import{Button as e}from"../../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{pInteractionUnifiedBatchLikeDislike as n}from"../../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../../ui/checkbox.mjs";import{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{ProfileMainEmptyState as u}from"../../empty-state.mjs";import{CollectVideoWaterfall as d}from"../collect-tab/video-waterfall.mjs";import{getLikeData as ee,likeContentType as f}from"../../utils.mjs";import{useEffect as p,useMemo as m,useState as h}from"react";import{jsx as g,jsxs as _}from"react/jsx-runtime";import{toast as v}from"sonner";import{useTranslations as y}from"next-intl";import{parseAsString as b,useQueryState as x}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 te(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 C(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 w=[`video`,`post`];function T({mode:T=`renderer`,targetUserId:E,queryKeyPrefix:D,isMine:ne=!1}){let O=y(`components.pages.profile.components.tabs`),k=T===`renderer`,A=D??[],[j,M]=x(`likeTab`,b.withDefault(`video`)),N=m(()=>w.includes(j)?j:`video`,[j]),[P,F]=h(!1),[I,L]=h(()=>new Set),R=t(e=>e.userId),z=c(),B=[...A,`user-like-video`],V=[...A,`user-like-post`],H=s({key:B,initialPageParam:1,async queryFn(e){return ee({targetUserId:E,page:e,contentType:f.video})},options:{staleTime:0,enabled:k},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}}),U=s({key:V,options:{staleTime:0,enabled:k},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}}),W=N===`video`?H:U,G=H.data?.pages.flatMap(e=>(e.data?.list??[]).map(C))??[],K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(te))??[],q=N===`video`?G:K,J=N===`video`?G.length===0&&!W.isFetching:K.length===0&&!W.isFetching,Y=new Set(q.map(e=>e.id)),X=N===`video`,{mutateAsync:Z,isPending:Q}=o(async e=>await n({app_id:0,user_id:R,action:`cancel_like`,content_ids:e,content_type:X?1:2}));p(()=>{L(new Set)},[N]),p(()=>{j!==N&&M(N)},[N,j,M]);let re=e=>{L(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ie=()=>{I.size===Y.size&&Y.size>0?L(new Set):L(new Set(Y))},ae=async()=>{if(!(I.size===0||Q)){if(!R){v.error(O(`likeTab.pleaseLogin`));return}try{let e=Array.from(I),t=await Z(e);if(t.code===0){v.success(O(`likeTab.unlikedSuccess`));let t=new Set(e);z(X?B:V,e=>S(e,t,e=>e.id)),L(new Set),F(!1)}else v.error(t.message||O(`likeTab.unlikeFailed`))}catch(e){console.error(`取消点赞失败`,e),v.error(O(`likeTab.operationFailed`))}}},$=async()=>{k&&await W.fetchNextPage()};return _(r,{children:[g(r,{className:``,children:N===`video`?J?g(u,{text:O(`likeTab.emptyContent`)}):g(d,{list:G,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,emptyText:O(`likeTab.emptyContent`)}):J?g(u,{text:O(`likeTab.emptyContent`)}):g(l,{list:K,loading:W.isFetching,hasMore:W.hasNextPage??!1,loadMore:$,emptyText:O(`likeTab.emptyContent`),isEditMode:P,selectedIds:I,onToggleSelection:re})}),P&&_(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:[_(r,{className:`flex items-center gap-2`,children:[g(i,{checked:I.size===Y.size&&Y.size>0,onCheckedChange:ie}),g(a,{className:`text-sm text-text1`,children:O(`likeTab.selectAll`)})]}),g(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:I.size>0?`default`:`outline`,disabled:I.size===0||Q,onClick:ae,children:O(Q?`likeTab.processing`:`likeTab.delete`)})]})]})}export{T as LikeTab};
@@ -1,2 +1,2 @@
1
1
 
2
- import{gInteractionGetBrowseList as e,gInteractionGetLikeList as t}from"../../../../../service/generated/client.mjs";import n from"dayjs";const r={video:1,post:2};function i(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function a(e,t){let r=e.name,a=n(t?t?.[e.content_id||``]?.create_time:e.create_time).toDate().getTime(),o=i(e);return{id:e.content_id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.author?.nickname,avatar:e.author?.avatar},info:{name:r,content_id:e.content_id,user_id:e.user_id,content:e.content,tags:e.tags,cover_image:o,like_count:e.like_count,dislike_count:e.dislike_count,comment_count:e.comment_count,share_count:e.share_count,view_count:e.view_count,create_time:e.create_time,update_time:e.update_time,author:e.author?{user_id:e.author.user_id,username:e.author.username,nickname:e.author.nickname,avatar_url:e.author.avatar}:void 0},statics_cnt:{browse_cnt:e.view_count||0},publish_time:a,parent_content_info:{type:0}}}}function o(e,t){let r=e.is_more_link,i=n(t?t?.[e.id||``]?.create_time:e.show_at).toDate().getTime(),a=Number(e.duration??0),o=Number.isFinite(a)?Math.max(0,Math.floor(a)):0;return{id:e.id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.source_username||e.up_user||e.director||e.actor,avatar:void 0},info:{is_more_link:r,name:e.name,content_id:e.id,content:e.description,tags:e.tags?.map(e=>e.name).filter(e=>!!e),cover_image:e.img_y||e.img_x,create_time:e.show_at,video_duration:o},statics_cnt:{browse_cnt:e.play_count||0},publish_time:i,parent_content_info:{type:0}}}}function s(e,t){let r=e.name,a=e.is_more_link,o=t[e.content_id||``].browse_time,s=n(o).toDate().getTime(),c=i(e);return{id:e.content_id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.author?.nickname,avatar:e.author?.avatar},info:{is_more_link:a,name:r||e.content,title:r||e.content,content_id:e.content_id,user_id:e.user_id,content:e.content,tags:e.tags,cover_image:c,like_count:e.like_count,dislike_count:e.dislike_count,comment_count:e.comment_count,share_count:e.share_count,view_count:e.view_count,create_time:e.create_time,update_time:e.update_time,author:e.author?{user_id:e.author.user_id,username:e.author.username,nickname:e.author.nickname,avatar_url:e.author.avatar}:void 0},statics_cnt:{browse_cnt:e.view_count||0},publish_time:s,parent_content_info:{type:0}}}}function c(e,t){let r=e.is_more_link,i=t[e.id||``].browse_time,a=n(i).toDate().getTime(),o=Number(e.duration??0),s=Number.isFinite(o)?Math.max(0,Math.floor(o)):0,c=t[e.id||``]?.browse_duration||0,l=Number(t[e.id||``]?.browse_episode),u=0,d=0;return Number.isNaN(l)||(u=l),s&&c&&(d=Math.min(100,Math.floor(c/s*100))),{id:e.id||``,content_play_progress:{percent:d,series_num:u},detail:{user_info:{name:e.source_username||e.up_user||e.director||e.actor,avatar:void 0},info:{is_more_link:r,name:e.name,content_id:e.id,content:e.description,tags:e.tags?.map(e=>e.name).filter(e=>!!e),cover_image:e.img_y||e.img_x,create_time:e.show_at,video_duration:s},statics_cnt:{browse_cnt:e.play_count||0},publish_time:a,parent_content_info:{type:0}}}}async function l({targetUserId:e,page:n,contentType:i,pageSize:s=10}){if(!e)return{data:{list:[],total:0}};let c=await t({user_id:e,page:n,content_type:i,page_size:s}),l=c.data.like_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},u=i===r.post?(c.data?.post_infos??[]).map(e=>a(e,l)):(c.data?.video_infos??[]).map(e=>o(e,l)),d=c.data?.has_more,f=typeof d==`boolean`?d:void 0;return{data:{list:u,total:c.data?.total??u.length,has_more:f}}}async function u({targetUserId:t,page:n,contentType:i,pageSize:a=10,authConfig:o}){if(!t)return{data:{list:[],total:0}};let l=await e({user_id:t,page:n,page_size:a,content_type:i},o),u=l.data.records?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},d=i===r.post?(l.data?.post_infos??[]).map(e=>s(e,u)):(l.data?.video_infos??[]).map(e=>c(e,u)),f=l.data?.has_more?!0:void 0;return{data:{list:d,total:l.data?.total??d.length,has_more:f}}}export{u as getHistoryData,l as getLikeData,r as likeContentType};
2
+ import{gInteractionGetBrowseList as e,gInteractionGetLikeList as t}from"../../../../../service/generated/client.mjs";import n from"dayjs";const r={video:1,post:2};function i(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function a(e,t){let r=e.name,a=n(t?t?.[e.content_id||``]?.create_time:e.create_time).toDate().getTime(),o=i(e);return{id:e.content_id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.author?.nickname,avatar:e.author?.avatar},info:{name:r,content_id:e.content_id,user_id:e.user_id,content:e.content,tags:e.tags,cover_image:o,like_count:e.like_count,dislike_count:e.dislike_count,comment_count:e.comment_count,share_count:e.share_count,view_count:e.view_count,create_time:e.create_time,update_time:e.update_time,author:e.author?{user_id:e.author.user_id,username:e.author.username,nickname:e.author.nickname,avatar_url:e.author.avatar}:void 0},statics_cnt:{browse_cnt:e.view_count||0},publish_time:a,parent_content_info:{type:0}}}}function o(e,t){let r=e.is_more_link,i=n(t?t?.[e.id||``]?.create_time:e.show_at).toDate().getTime(),a=Number(e.duration??0),o=Number.isFinite(a)?Math.max(0,Math.floor(a)):0,s=e.img_y||e.img_x||``,c=e.img_x||e.img_y||``;return{id:e.id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.source_username||e.up_user||e.director||e.actor,avatar:void 0},info:{is_more_link:r,name:e.name,content_id:e.id,content:e.description,tags:e.tags?.map(e=>e.name).filter(e=>!!e),cover_image:s||c,cover_image_thumbnail:s,cover_horizontal_image_thumbnail:c,img_type:e.img_type,img_x:e.img_x,img_y:e.img_y,create_time:e.show_at,score:e.score,video_duration:o},statics_cnt:{browse_cnt:e.play_count||0},publish_time:i,parent_content_info:{type:0}}}}function s(e,t){let r=e.name,a=e.is_more_link,o=t[e.content_id||``].browse_time,s=n(o).toDate().getTime(),c=i(e);return{id:e.content_id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.author?.nickname,avatar:e.author?.avatar},info:{is_more_link:a,name:r||e.content,title:r||e.content,content_id:e.content_id,user_id:e.user_id,content:e.content,tags:e.tags,cover_image:c,like_count:e.like_count,dislike_count:e.dislike_count,comment_count:e.comment_count,share_count:e.share_count,view_count:e.view_count,create_time:e.create_time,update_time:e.update_time,author:e.author?{user_id:e.author.user_id,username:e.author.username,nickname:e.author.nickname,avatar_url:e.author.avatar}:void 0},statics_cnt:{browse_cnt:e.view_count||0},publish_time:s,parent_content_info:{type:0}}}}function c(e,t){let r=e.is_more_link,i=t[e.id||``].browse_time,a=n(i).toDate().getTime(),o=Number(e.duration??0),s=Number.isFinite(o)?Math.max(0,Math.floor(o)):0,c=e.img_y||e.img_x||``,l=e.img_x||e.img_y||``,u=t[e.id||``]?.browse_duration||0,d=Number(t[e.id||``]?.browse_episode),f=0,p=0;return Number.isNaN(d)||(f=d),s&&u&&(p=Math.min(100,Math.floor(u/s*100))),{id:e.id||``,content_play_progress:{percent:p,series_num:f},detail:{user_info:{name:e.source_username||e.up_user||e.director||e.actor,avatar:void 0},info:{is_more_link:r,name:e.name,content_id:e.id,content:e.description,tags:e.tags?.map(e=>e.name).filter(e=>!!e),cover_image:c||l,cover_image_thumbnail:c,cover_horizontal_image_thumbnail:l,img_type:e.img_type,img_x:e.img_x,img_y:e.img_y,create_time:e.show_at,score:e.score,video_duration:s},statics_cnt:{browse_cnt:e.play_count||0},publish_time:a,parent_content_info:{type:0}}}}async function l({targetUserId:e,page:n,contentType:i,pageSize:s=10}){if(!e)return{data:{list:[],total:0}};let c=await t({user_id:e,page:n,content_type:i,page_size:s}),l=c.data.like_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},u=i===r.post?(c.data?.post_infos??[]).map(e=>a(e,l)):(c.data?.video_infos??[]).map(e=>o(e,l)),d=c.data?.has_more,f=typeof d==`boolean`?d:void 0;return{data:{list:u,total:c.data?.total??u.length,has_more:f}}}async function u({targetUserId:t,page:n,contentType:i,pageSize:a=10,authConfig:o}){if(!t)return{data:{list:[],total:0}};let l=await e({user_id:t,page:n,page_size:a,content_type:i},o),u=l.data.records?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},d=i===r.post?(l.data?.post_infos??[]).map(e=>s(e,u)):(l.data?.video_infos??[]).map(e=>c(e,u)),f=l.data?.has_more?!0:void 0;return{data:{list:d,total:l.data?.total??d.length,has_more:f}}}export{u as getHistoryData,l as getLikeData,r as likeContentType};
@@ -0,0 +1,17 @@
1
+
2
+ import { RankingRecommendInspectorProps } from "./schema.mjs";
3
+ import { RankingCardItem } from "./shared.mjs";
4
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region components/biz/business/ranking-recommend/client.d.ts
7
+ type RankingRecommendProps = RankingRecommendInspectorProps & {
8
+ prefetchItems?: RankingCardItem[];
9
+ };
10
+ /**
11
+ * 推荐榜物料组件 - 客户端部分
12
+ * - 智能铺设开启:按标签调用热门列表接口,随机铺设推荐位
13
+ * - 智能铺设关闭:按配置的内容 ID 取数
14
+ */
15
+ declare function RankingRecommendClient(props: RankingRecommendProps): react_jsx_runtime0.JSX.Element | null;
16
+ //#endregion
17
+ export { RankingRecommendClient, RankingRecommendProps };
@@ -0,0 +1,70 @@
1
+
2
+ "use client";import{isClient as e}from"../../../../utils/common.mjs";import{pContentBatchGetVideoDetail as t,pContentGetPopularVideoList as n}from"../../../../service/generated/client.mjs";import{pContentGetPopularVideoListKey as r}from"../../../../service/generated/tanstack.mjs";import{Box as i}from"../../../ui/box.mjs";import{Text as a}from"../../../ui/text.mjs";import o from"../../../ui/link.mjs";import{buildImageTextRecommendSmartPicked as s,getImageTextRecommendLayoutTags as c}from"../../../../hooks/image-text-recommend.mjs";import{useRequest as l}from"../../../../hooks/query/use-query.mjs";import u from"../../../../assets/icons/common/right_arrow_thin.mjs";import{buildRankingCardList as d,buildSmartRankingCardList as f,normalizeContentId as p,resolveCoverDisplaySrc as m,resolveOrderedContentIds as h}from"./shared.mjs";import{buildSmartPopularQuery as g,buildStableChosenTags as _}from"./shared/query.mjs";import{useEffect as v,useMemo as y,useRef as b,useState as x}from"react";import{jsx as S,jsxs as C}from"react/jsx-runtime";function w(e){let t=e===`nebula`?`
3
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 138" fill="none">
4
+ <defs>
5
+ <linearGradient id="bg" x1="10" y1="6" x2="84" y2="132" gradientUnits="userSpaceOnUse">
6
+ <stop stop-color="#120B25"/>
7
+ <stop offset="0.45" stop-color="#28306D"/>
8
+ <stop offset="1" stop-color="#05030D"/>
9
+ </linearGradient>
10
+ <radialGradient id="cyan" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(33 34) rotate(62) scale(39 30)">
11
+ <stop stop-color="#74DEFF"/>
12
+ <stop offset="1" stop-color="#74DEFF" stop-opacity="0"/>
13
+ </radialGradient>
14
+ <radialGradient id="pink" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(72 28) rotate(118) scale(48 37)">
15
+ <stop stop-color="#FF51D7"/>
16
+ <stop offset="1" stop-color="#FF51D7" stop-opacity="0"/>
17
+ </radialGradient>
18
+ <linearGradient id="hair" x1="21" y1="30" x2="69" y2="109" gradientUnits="userSpaceOnUse">
19
+ <stop stop-color="#1E2A77"/>
20
+ <stop offset="1" stop-color="#5A1B6F"/>
21
+ </linearGradient>
22
+ </defs>
23
+ <rect width="100" height="138" rx="4" fill="url(#bg)"/>
24
+ <rect width="100" height="138" rx="4" fill="url(#cyan)"/>
25
+ <rect width="100" height="138" rx="4" fill="url(#pink)"/>
26
+ <path d="M12 47C20 28 34 18 49 18C67 18 82 31 85 53C79 46 71 42 60 42C48 42 39 47 30 58L12 47Z" fill="url(#hair)" opacity="0.95"/>
27
+ <path d="M28 70C28 50 38 36 52 36C64 36 73 46 73 62C73 82 62 100 50 100C38 100 28 89 28 70Z" fill="#F0E7FF"/>
28
+ <path d="M25 48C32 38 39 34 47 34C38 44 34 58 34 72C34 87 39 98 49 105C32 102 20 84 20 64C20 58 22 52 25 48Z" fill="#0E0D1A" opacity="0.9"/>
29
+ <path d="M53 43C63 44 71 54 71 67C71 75 68 82 63 87C60 81 58 73 58 64C58 56 60 49 63 44L53 43Z" fill="#EAE6FF" opacity="0.65"/>
30
+ <path d="M21 21L35 11L49 19L46 39L32 43L16 34L21 21Z" fill="#EFF4FF" opacity="0.82"/>
31
+ <path d="M20 20L35 11L41 18L29 28L21 21Z" fill="#74DEFF" opacity="0.8"/>
32
+ <circle cx="44" cy="63" r="4" fill="#2A2C63"/>
33
+ <circle cx="44.5" cy="62.5" r="1.5" fill="#D9ECFF"/>
34
+ <path d="M52 83C56 86 61 86 65 83" stroke="#C3B8F6" stroke-width="2" stroke-linecap="round"/>
35
+ <path d="M61 58L72 52" stroke="#7ED7FF" stroke-width="2.5" stroke-linecap="round" opacity="0.7"/>
36
+ <path d="M22 96C32 86 47 81 65 80" stroke="#FF7AE0" stroke-width="3" stroke-linecap="round" opacity="0.45"/>
37
+ </svg>
38
+ `:`
39
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 138" fill="none">
40
+ <defs>
41
+ <linearGradient id="bg" x1="17" y1="7" x2="83" y2="132" gradientUnits="userSpaceOnUse">
42
+ <stop stop-color="#12080D"/>
43
+ <stop offset="0.5" stop-color="#34111C"/>
44
+ <stop offset="1" stop-color="#04060D"/>
45
+ </linearGradient>
46
+ <radialGradient id="red" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(42 33) rotate(52) scale(34 30)">
47
+ <stop stop-color="#FF516E"/>
48
+ <stop offset="1" stop-color="#FF516E" stop-opacity="0"/>
49
+ </radialGradient>
50
+ <radialGradient id="cyan" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(70 79) rotate(118) scale(44 31)">
51
+ <stop stop-color="#3CC8FF"/>
52
+ <stop offset="1" stop-color="#3CC8FF" stop-opacity="0"/>
53
+ </radialGradient>
54
+ </defs>
55
+ <rect width="100" height="138" rx="4" fill="url(#bg)"/>
56
+ <rect width="100" height="138" rx="4" fill="url(#red)"/>
57
+ <rect width="100" height="138" rx="4" fill="url(#cyan)"/>
58
+ <path d="M7 74C9 46 24 26 46 24C68 22 84 40 87 69C80 62 71 57 58 57C40 57 25 64 7 74Z" fill="#080B13" opacity="0.86"/>
59
+ <path d="M33 39C40 31 48 27 56 27C69 27 79 40 79 58C79 84 64 105 48 105C34 105 23 90 23 69C23 57 27 47 33 39Z" fill="#F6F5FA"/>
60
+ <path d="M16 71C18 54 24 42 33 34C31 42 30 48 30 55C30 75 38 92 50 104C43 105 35 103 28 97C18 88 14 79 16 71Z" fill="#07090F"/>
61
+ <path d="M61 35L75 48L73 66L59 67L49 51L61 35Z" fill="#FFF7F4" opacity="0.95"/>
62
+ <path d="M55 44L66 40L72 46L66 54L57 54L55 44Z" fill="#FF5D6F"/>
63
+ <path d="M38 60C42 55 46 53 52 53C57 53 61 55 64 59" stroke="#141A2B" stroke-width="2.2" stroke-linecap="round"/>
64
+ <circle cx="43" cy="67" r="4" fill="#121624"/>
65
+ <circle cx="43.5" cy="66.5" r="1.5" fill="#DDF0FF"/>
66
+ <path d="M51 86C55 88 60 88 65 84" stroke="#C9C1D8" stroke-width="2" stroke-linecap="round"/>
67
+ <path d="M19 31L31 20L49 23L42 39L24 40L19 31Z" fill="#F8FCFF" opacity="0.82"/>
68
+ <path d="M14 99C31 84 49 77 70 77" stroke="#FF6773" stroke-width="3" stroke-linecap="round" opacity="0.45"/>
69
+ </svg>
70
+ `;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(t)}`}const T=w(`nebula`),E=w(`crimson`),D=T,O={padding:`0.5px`,background:`linear-gradient(180deg, rgba(230,42,255,0.9) 5%, rgba(239,255,69,0.5) 30%, rgba(233,69,255,0.8) 55%, rgba(233,69,255,0.9) 100%)`,WebkitMask:`linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)`,WebkitMaskComposite:`xor`,maskComposite:`exclude`},k={background:`rgba(83, 83, 83, 0.2)`},A={backdropFilter:`blur(4px)`,WebkitBackdropFilter:`blur(4px)`,maskImage:`linear-gradient(180deg, transparent 58.3%, black 100%)`,WebkitMaskImage:`linear-gradient(180deg, transparent 58.3%, black 100%)`},j=[{contentId:`mock-1`,title:`东野圭吾作品:11字谜案`,cover:T,category:`烧脑悬疑`,heatText:`2242万热度`,score:8.9,statusText:`完结`,href:`#`},{contentId:`mock-2`,title:`东野圭吾作品:11字谜案`,cover:E,category:`烧脑悬疑`,heatText:`2242万热度`,score:8.9,statusText:`完结`,href:`#`}];function M(e){return Array.from({length:e},(e,t)=>({...j[t%j.length],contentId:`mock-${t+1}`}))}function N({filled:e,className:t=``}){return S(`svg`,{viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":!0,className:t,children:S(`path`,{d:`M7 0.5L8.76 4.94L13.5 5.39L9.91 8.57L10.94 13.2L7 10.77L3.06 13.2L4.09 8.57L0.5 5.39L5.24 4.94L7 0.5Z`,fill:e?`#FFC039`:`rgba(255,255,255,0.3)`})})}function P({score:e}){let t=Math.ceil(e/2);return C(i,{className:`flex items-center gap-[8px]`,children:[S(i,{className:`flex items-center gap-[4px]`,children:Array.from({length:5},(e,n)=>S(N,{filled:n<t,className:`size-[14px]`},n))}),S(a,{className:`font-['DIN'] text-[12px] font-bold leading-normal text-[#FFC039]`,children:e.toFixed(1)})]})}function F({item:e,isEditor:t}){let n=m(e.cover,D),r=C(i,{className:`relative h-[158px] w-full`,children:[C(i,{className:`absolute left-0 top-[28px] h-[130px] w-full overflow-hidden rounded-[8px]`,children:[S(i,{className:`absolute inset-0 rounded-[8px]`,style:k}),S(i,{className:`pointer-events-none absolute rounded-full`,style:{left:`34px`,top:`-238px`,width:`385.969px`,height:`385.969px`,background:`radial-gradient(25.17% 25.17% at 64.27% 57.53%, #4F8DFF 0%, rgba(255,255,255,0) 100%)`,mixBlendMode:`overlay`,filter:`blur(50px)`}}),S(i,{className:`pointer-events-none absolute rounded-full`,style:{left:`210px`,top:`-75px`,width:`189px`,height:`187px`,background:`radial-gradient(50.27% 50.39% at 65.31% 48.07%, #FF5DEF 0%, rgba(255,255,255,0) 100%)`,mixBlendMode:`overlay`,filter:`blur(50px)`}}),S(i,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:O})]}),C(i,{className:`absolute left-[16px] top-0 z-10 h-[138px] w-[100px] overflow-hidden rounded-[4px]`,children:[S(`img`,{src:n,alt:e.title,className:`absolute inset-0 size-full object-cover`}),S(i,{className:`pointer-events-none absolute inset-0 rounded-[4px]`,style:{background:`linear-gradient(180deg, rgba(8, 2, 17, 0) 44.64%, rgba(8, 2, 17, 0.7) 82.7%)`}}),S(i,{className:`pointer-events-none absolute inset-0 rounded-[4px]`,style:A}),e.statusText&&S(i,{className:`absolute bottom-[9px] right-[8px] flex h-[18px] w-[32px] items-center justify-center rounded-[4px] bg-white/20 p-[2px]`,children:S(a,{className:`font-['PingFang_SC'] text-[12px] leading-[14px] text-white`,children:e.statusText})})]}),C(i,{className:`absolute left-[132px] top-[58px] z-10 flex w-[210px] items-start justify-between`,children:[C(i,{className:`flex h-[71px] w-[152px] flex-col justify-between`,children:[C(i,{className:`flex flex-col gap-[4px]`,children:[S(a,{className:`line-clamp-1 font-['PingFang_SC'] text-[14px] font-medium leading-[20px] text-white`,children:e.title}),C(i,{className:`flex items-center gap-[10px] font-['PingFang_SC'] text-[14px] leading-[20px] text-white/60`,children:[e.category&&S(a,{className:`shrink-0 whitespace-nowrap`,children:e.category}),e.heatText&&S(a,{className:`shrink-0 whitespace-nowrap`,children:e.heatText})]})]}),e.score>0&&S(P,{score:e.score})]}),S(i,{"aria-hidden":!0,className:`size-[22px] shrink-0 opacity-0`})]})]});return t||!e.href||e.href===`#`?r:S(o,{href:e.href,className:`block`,children:r})}function I(o){let{title:m,items:w,layout:T,prefetchItems:E,mode:D=`renderer`}=o,O=D===`editor`,k=D===`renderer`,A=(m??``).trim()||`推荐榜`,j=!!T?.enabled,N=y(()=>c(T),[T]),P=w?.length??2,I=y(()=>_(N,P),[N,P]),L=y(()=>g(I,P),[I,P]),{data:R}=l(r(L),()=>n(L),{enabled:k&&!O&&j,staleTime:1/0}),[z,B]=x([]);v(()=>{O||!j||B(f(s(R?.data?.videos??[],I,P)))},[O,j,R,I,P]);let V=y(()=>O||j?[]:h(w),[w,O,j]),H=y(()=>Array.from(new Set(V)),[V]),U=y(()=>V.join(`,`),[V]),W=y(()=>Array.isArray(E)?E.map(e=>p(e.contentId)).join(`,`):``,[E]),[G,K]=x(()=>E??[]),q=b(``);v(()=>{O||j||(K(E??[]),q.current=W&&W===U?U:``)},[O,j,U,W,E]),v(()=>{if(O||j||!e()||!U||q.current===U)return;q.current=U;let n=!1;async function r(){try{let e=await t({ids:H},{cache:`no-store`}),r=Array.isArray(e.data?.videos)?e.data.videos:[];if(n)return;K(d(r,w??[]))}catch(e){console.error(`推荐榜数据获取失败`,e)}}return r(),()=>{n=!0}},[O,j,V,U,H,w]);let J=j?z:G,Y=y(()=>O?M(w?.length??2):[],[O,w?.length]),X=O?Y:J;return!O&&X.length===0?null:C(i,{className:`mt-[24px] w-full px-[16px]${O?` pointer-events-none`:``}`,children:[C(i,{className:`flex items-center justify-between`,children:[S(a,{className:`font-['PingFang_SC'] text-[18px] font-medium leading-[24px] text-white/90`,style:O?{textShadow:`0 1px 4px rgba(0,0,0,0.45)`}:void 0,children:A}),S(i,{className:`flex shrink-0 items-center justify-end gap-[2px] opacity-50`,style:O?{filter:`drop-shadow(0 1px 3px rgba(0,0,0,0.45))`}:void 0,children:S(i,{className:`overflow-hidden`,children:S(u,{className:`size-[24px] text-white`})})})]}),S(i,{className:`mt-[16px] flex flex-col gap-[16px]`,children:X.map((e,t)=>S(F,{item:e,isEditor:O},`${e.contentId}-${t}`))})]})}export{I as RankingRecommendClient};
@@ -0,0 +1,35 @@
1
+
2
+ import { SchemaHasDefaultValue } from "../../../../utils/schema/schema.mjs";
3
+ import { DefineMaterialOption } from "../../../../utils/schema/material.mjs";
4
+ import "../../../../utils.mjs";
5
+ import { RankingRecommendClient } from "./client.mjs";
6
+ import { RankingRecommendServer } from "./server.mjs";
7
+ import * as zod from "zod";
8
+ import * as zod_v4_core0 from "zod/v4/core";
9
+
10
+ //#region components/biz/business/ranking-recommend/material.d.ts
11
+ declare const rankingRecommendMaterial: DefineMaterialOption<typeof RankingRecommendServer, typeof RankingRecommendClient, zod.ZodObject<{
12
+ readonly title: zod.ZodString & SchemaHasDefaultValue;
13
+ readonly moduleCount: zod.ZodNumber & SchemaHasDefaultValue;
14
+ readonly layout: zod.ZodObject<{
15
+ readonly enabled: zod.ZodBoolean & SchemaHasDefaultValue;
16
+ readonly tags: zod.ZodArray<zod.ZodString> & SchemaHasDefaultValue;
17
+ }, zod_v4_core0.$strip> | zod.ZodOptional<zod.ZodObject<{
18
+ readonly enabled: zod.ZodBoolean & SchemaHasDefaultValue;
19
+ readonly tags: zod.ZodArray<zod.ZodString> & SchemaHasDefaultValue;
20
+ }, zod_v4_core0.$strip>>;
21
+ readonly items: zod.ZodArray<zod.ZodObject<{
22
+ id: zod.ZodString & SchemaHasDefaultValue;
23
+ contentName: zod.ZodString & SchemaHasDefaultValue;
24
+ title: zod.ZodString & SchemaHasDefaultValue;
25
+ cover: zod.ZodString & SchemaHasDefaultValue;
26
+ useVideoPoster: zod.ZodBoolean & SchemaHasDefaultValue;
27
+ }, zod_v4_core0.$strip>> & SchemaHasDefaultValue;
28
+ } & {
29
+ mode: zod.ZodOptional<zod.ZodEnum<{
30
+ renderer: "renderer";
31
+ editor: "editor";
32
+ }>>;
33
+ }, zod_v4_core0.$strip>, "ranking-recommend", "内容组件">;
34
+ //#endregion
35
+ export { rankingRecommendMaterial };
@@ -0,0 +1,2 @@
1
+
2
+ import{defineMaterial as e}from"../../../../utils/schema/material.mjs";import{RankingRecommendClient as t}from"./client.mjs";import{rankingRecommendInspectorPropsSchema as n}from"./schema.mjs";import{RankingRecommendServer as r}from"./server.mjs";const i=e({type:`ranking-recommend`,name:`推荐榜`,icon:`/static/components-thumb/search_recommend_text.png`,category:`内容组件`,serverComponent:r,clientComponent:t,propsSchema:n});export{i as rankingRecommendMaterial};
@@ -0,0 +1,35 @@
1
+
2
+ import { InferSchemaProps, SchemaHasDefaultValue } from "../../../../utils/schema/schema.mjs";
3
+ import "../../../../utils.mjs";
4
+ import { z } from "zod";
5
+
6
+ //#region components/biz/business/ranking-recommend/schema.d.ts
7
+ /**
8
+ * 推荐榜物料属性定义
9
+ */
10
+ declare const rankingRecommendInspectorPropsSchema: z.ZodObject<{
11
+ readonly title: z.ZodString & SchemaHasDefaultValue;
12
+ readonly moduleCount: z.ZodNumber & SchemaHasDefaultValue;
13
+ readonly layout: z.ZodObject<{
14
+ readonly enabled: z.ZodBoolean & SchemaHasDefaultValue;
15
+ readonly tags: z.ZodArray<z.ZodString> & SchemaHasDefaultValue;
16
+ }, z.core.$strip> | z.ZodOptional<z.ZodObject<{
17
+ readonly enabled: z.ZodBoolean & SchemaHasDefaultValue;
18
+ readonly tags: z.ZodArray<z.ZodString> & SchemaHasDefaultValue;
19
+ }, z.core.$strip>>;
20
+ readonly items: z.ZodArray<z.ZodObject<{
21
+ id: z.ZodString & SchemaHasDefaultValue;
22
+ contentName: z.ZodString & SchemaHasDefaultValue;
23
+ title: z.ZodString & SchemaHasDefaultValue;
24
+ cover: z.ZodString & SchemaHasDefaultValue;
25
+ useVideoPoster: z.ZodBoolean & SchemaHasDefaultValue;
26
+ }, z.core.$strip>> & SchemaHasDefaultValue;
27
+ } & {
28
+ mode: z.ZodOptional<z.ZodEnum<{
29
+ renderer: "renderer";
30
+ editor: "editor";
31
+ }>>;
32
+ }, z.core.$strip>;
33
+ type RankingRecommendInspectorProps = InferSchemaProps<typeof rankingRecommendInspectorPropsSchema>;
34
+ //#endregion
35
+ export { RankingRecommendInspectorProps };
@@ -0,0 +1,2 @@
1
+
2
+ import{defineComponentPropsSchema as e,getSchemaDefaultProps as t}from"../../../../utils/schema/schema.mjs";import{z as n}from"zod";const r=e(e=>({title:e.string(`推荐榜`,{label:`标题名称`,description:`支持输入,中/英/数/符,6个字符`}),moduleCount:e.number(2,{label:`推荐模块数`}),layout:e.object({enabled:e.boolean(!1,{fieldType:`switch`,label:`智能铺设`}),tags:e.array(n.string(),{label:`取数范围标签`,defaultValue:[`电影`]})},{label:`智能铺设`,defaultValue:{enabled:!1,tags:[`电影`]}}),items:e.array(n.object({id:e.string(``,{label:`内容ID`}),contentName:e.string(``,{label:`内容名称`}),title:e.string(``,{label:`推荐位内容名称`}),cover:e.string(``,{label:`推荐位封面`}),useVideoPoster:e.boolean(!0,{fieldType:`switch`,label:`沿用视频海报`})}),{label:`推荐榜内容`,defaultValue:[{id:`22edc8693ebbdaf1`,contentName:``,title:``,cover:``,useVideoPoster:!0},{id:`22edc8693ebbdaf1`,contentName:``,title:``,cover:``,useVideoPoster:!0}]})}));t(r);export{r as rankingRecommendInspectorPropsSchema};
@@ -0,0 +1,11 @@
1
+
2
+ import { RankingRecommendProps } from "./client.mjs";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region components/biz/business/ranking-recommend/server.d.ts
6
+ /**
7
+ * 推荐榜物料组件 - 服务端部分
8
+ */
9
+ declare function RankingRecommendServer(props: RankingRecommendProps): Promise<react_jsx_runtime0.JSX.Element>;
10
+ //#endregion
11
+ export { RankingRecommendServer };
@@ -0,0 +1,2 @@
1
+
2
+ import{pContentBatchGetVideoDetail as e,pContentGetPopularVideoList as t}from"../../../../service/generated/client.mjs";import{pContentGetPopularVideoListKey as n}from"../../../../service/generated/tanstack.mjs";import{getImageTextRecommendLayoutTags as r}from"../../../../hooks/image-text-recommend.mjs";import{HydrationBoundary as i}from"../../../../hooks/query/hydration-boundary.mjs";import{buildRankingCardList as a,resolveOrderedContentIds as o}from"./shared.mjs";import{buildSmartPopularQuery as s,buildStableChosenTags as c}from"./shared/query.mjs";import{RankingRecommendClient as l}from"./client.mjs";import{jsx as u}from"react/jsx-runtime";const d=[];async function f(f){let{mode:p=`renderer`,items:m=d,layout:h,...g}=f,_=!!h?.enabled,v=[],y=f.prefetchItems;if(p===`renderer`)try{if(_){let e=r(h),i=m?.length??2,a=s(c(e,i),i),o=await t(a);v.push({queryKey:n(a),queryFn:()=>Promise.resolve(o)})}else{let t=o(m),n=Array.from(new Set(t));if(n.length>0){let t=await e({ids:n},{cache:`no-store`});y=a(Array.isArray(t.data?.videos)?t.data.videos:[],m)}}}catch(e){console.warn(`[ranking-recommend] server prefetch failed:`,e)}return u(i,{prefetch:v,children:u(l,{...g,items:m,layout:h,mode:p,prefetchItems:y})})}export{f as RankingRecommendServer};
@@ -0,0 +1,2 @@
1
+
2
+ function e(e,t){let n=e.map(e=>String(e).trim()).filter(Boolean);if(!n.length||t<=0)return[];if(n.length>=t)return n.slice(0,t);let r=[...n];for(;r.length<t;)r.push(n[r.length%n.length]);return r}function t(e,t){return{page_size:Math.max(20,t*10),tags:e.length?Array.from(new Set(e)):void 0}}export{t as buildSmartPopularQuery,e as buildStableChosenTags};
@@ -0,0 +1,15 @@
1
+
2
+ //#region components/biz/business/ranking-recommend/shared.d.ts
3
+ /** 推荐榜卡片渲染数据。 */
4
+ interface RankingCardItem {
5
+ contentId: string;
6
+ title: string;
7
+ cover: string;
8
+ category: string;
9
+ heatText: string;
10
+ score: number;
11
+ statusText: string;
12
+ href: string;
13
+ }
14
+ //#endregion
15
+ export { RankingCardItem };
@@ -0,0 +1,2 @@
1
+
2
+ import e from"../../../../utils/get-res-url.mjs";import{getPostDetailPagePath as t}from"../../../../utils/tools.mjs";function n(e){return typeof e==`string`?e.trim():String(e??``).trim()}function r(e){return Array.isArray(e)?e.map(e=>n(e?.id)).filter(Boolean):[]}function i(t,n=``){let r=typeof t==`string`?t.trim():``;if(!r)return n;if(r.startsWith(`http`)||r.startsWith(`//`)||r.startsWith(`data:`))return r;let i=e();return i?`${i}${r.startsWith(`/`)?r:`/${r}`}`:r}function a(e){return!e||!Number.isFinite(e)||e<=0?``:e>=1e4?`${(e/1e4).toFixed(e>=1e5?0:1).replace(/\.0$/,``)}万热度`:e>=1e3?`${(e/1e3).toFixed(1).replace(/\.0$/,``)}K热度`:`${Math.floor(e)}热度`}function o(e){let t=n(e.update_status);return t===`1`?`完结`:t===`0`?`连载中`:``}function s(e){let t=Number(e);return!Number.isFinite(t)||t<=0?0:t>10&&t<=100?t/10:Math.min(t,10)}function c(e){let r=n(e.id||e.mid||e.video_id),i=Number(e.play_count??e.browse_count??0);return{contentId:r,title:n(e.name),cover:n(e.img_y||e.img_x),category:n(e.cat_name),heatText:a(i),score:s(e.score),statusText:o(e),href:r?t({id:r,contentType:0}):`#`}}function l(e,t){let r=new Map;return e.forEach(e=>{let t=n(e.id||e.mid||e.video_id);t&&r.set(t,e)}),t.map(e=>{let t=n(e.id),i=t?r.get(t):void 0;if(!i)return null;let a=c(i),o=(e.title??``).trim();o&&(a.title=o);let s=(e.cover??``).trim();return s&&e.useVideoPoster===!1&&(a.cover=s),a}).filter(e=>!!e)}function u(e){let r=n(e.id||e.mid),i=Number(e.static?.browse_cnt??0),o=n(e.update_status);return{contentId:r,title:n(e.name),cover:n(e.img_y||e.img_x),category:n(e.cat_name),heatText:a(i),score:s(e.score),statusText:o===`1`?`完结`:o===`0`?`连载中`:``,href:r?t({id:r,contentType:0}):`#`}}function d(e){return e.map(u)}export{l as buildRankingCardList,d as buildSmartRankingCardList,n as normalizeContentId,i as resolveCoverDisplaySrc,r as resolveOrderedContentIds};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Button as e}from"../../../ui/button.mjs";import t from"../../../../utils/event-bus.mjs";import{useUserStore as n}from"../../../../store/modules/user-store.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{useLayoutEffect as l,useMemo as u,useRef as d,useState as f}from"react";import{jsx as p,jsxs as m}from"react/jsx-runtime";import{usePathname as h,useSearchParams as g}from"next/navigation";function _(e,t){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t).join(``)}...`}function v(v){let{title:y,rows:b=1,clearText:x,confirmDescription:S,onHistoryClick:C,mode:w=`renderer`}=v,T=y??`搜索历史`,E=x??`清空`,D=S??`确定要清除所有搜索历史吗?`,O=u(()=>[`搜索历史1`,`搜索历史2`,`搜索历史3`],[]),[k,A]=f(!1),[j,M]=f(null),N=d(null),P=d([]),F=d(null),I=r(),L=h(),R=g(),{userInfo:z}=n(),{history:B,addHistory:V,clearHistory:H}=s({storageKey:z?.user_id||`guest`}),U=()=>{H(),A(!1),t.emit(o.SEARCH_HISTORY_UPDATE)},W=u(()=>(B.length?B:w===`editor`?O:[]).slice(0,b*10),[B,w,O,b]);if(l(()=>{if(W.length===0){M(null);return}let e=N.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect(),n=[];P.current.slice(0,W.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,b).reduce((e,t)=>Math.max(e,t.bottom),0);M(e=>e===r?e:r)},n=()=>{F.current!=null&&cancelAnimationFrame(F.current),F.current=requestAnimationFrame(()=>{F.current=null,t()})};if(n(),typeof ResizeObserver>`u`)return()=>{F.current!=null&&(cancelAnimationFrame(F.current),F.current=null)};let r=new ResizeObserver(()=>{n()});return r.observe(e),P.current.slice(0,W.length).forEach(e=>{e&&r.observe(e)}),()=>{r.disconnect(),F.current!=null&&(cancelAnimationFrame(F.current),F.current=null)}},[W,b]),W.length===0)return null;let G=e=>{if(V(e),C){C(e);return}let t=new URLSearchParams(R.toString());t.set(`q`,e);let n=L.includes(`/search-result`)?L:`/search-result`;I.push(`${n}?${t.toString()}`)};return m(i,{className:`px-4 py-2`,children:[m(i,{className:`flex justify-between items-center mb-2`,children:[p(a,{className:`text-[16px] font-bold text-text1`,children:T}),p(e,{variant:`ghost`,size:`sm`,className:`text-text3 text-[12px] p-0 h-auto`,onClick:()=>A(!0),children:E})]}),p(i,{ref:N,className:`flex flex-wrap gap-2 overflow-hidden`,style:j?{maxHeight:`${j}px`}:void 0,children:W.map((e,t)=>p(i,{ref:e=>{P.current[t]=e},className:`px-3 py-1 bg-bg2 rounded-full cursor-pointer`,onClick:()=>G(e),children:p(a,{className:`text-[14px] text-text2`,children:_(e,8)})},t))}),p(c,{open:k,onOpenChange:A,onConfirm:U,title:``,description:D})]})}export{v as SearchHistoryClient};
2
+ "use client";import e from"../../../../utils/event-bus.mjs";import{useUserStore as t}from"../../../../store/modules/user-store.mjs";import{useRouter as n}from"../../../../utils/use-compatible-router.mjs";import{Box as r}from"../../../ui/box.mjs";import{Text as i}from"../../../ui/text.mjs";import{eventKey as a}from"../../../../constants/event-key.mjs";import{useSearchHistory as o}from"../../../../hooks/use-search-history.mjs";import{DeleteConfirmDialog as s}from"../../../common/delete-confirm-dialog/delete-confirm-dialog.mjs";import{DeleteIcon as c}from"../../../common/icons/delete.mjs";import{useLayoutEffect as l,useMemo as u,useRef as d,useState as f}from"react";import{jsx as p,jsxs as m}from"react/jsx-runtime";import{usePathname as h,useSearchParams as g}from"next/navigation";function _(e,t){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t).join(``)}...`}function v(v){let{title:y,rows:b=2,clearText:x,confirmDescription:S,onHistoryClick:C,mode:w=`renderer`}=v,T=w===`editor`,E=y??`搜索历史`,D=x??`清空`,O=S??`确定要清除所有搜索历史吗?`,k=u(()=>[`海市蜃楼`,`迷雾追凶`,`夜行者`,`狂飙`,`三大队`,`破冰行动`],[]),[A,j]=f(!1),[M,N]=f(null),P=d(null),F=d([]),I=d(null),L=n(),R=h(),z=g(),{userInfo:B}=t(),{history:V,addHistory:H,clearHistory:U}=o({storageKey:B?.user_id||`guest`}),W=()=>{U(),j(!1),e.emit(a.SEARCH_HISTORY_UPDATE)},G=u(()=>(V.length?V:w===`editor`?k:[]).slice(0,b*10),[V,w,k,b]);if(l(()=>{if(G.length===0){N(null);return}let e=P.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect(),n=[];F.current.slice(0,G.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,b).reduce((e,t)=>Math.max(e,t.bottom),0);N(e=>e===r?e:r)},n=()=>{I.current!=null&&cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{I.current=null,t()})};if(n(),typeof ResizeObserver>`u`)return()=>{I.current!=null&&(cancelAnimationFrame(I.current),I.current=null)};let r=new ResizeObserver(()=>{n()});return r.observe(e),F.current.slice(0,G.length).forEach(e=>{e&&r.observe(e)}),()=>{r.disconnect(),I.current!=null&&(cancelAnimationFrame(I.current),I.current=null)}},[G,b]),G.length===0)return null;let K=e=>{if(H(e),C){C(e);return}let t=new URLSearchParams(z.toString());t.set(`q`,e);let n=R.includes(`/search-result`)?R:`/search-result`;L.push(`${n}?${t.toString()}`)};return m(r,{className:T?`mt-[24px] px-[16px] py-[16px]`:`mt-[24px] px-[16px] py-0`,children:[m(r,{className:`mb-[15px] flex items-center justify-between`,children:[p(i,{className:`font-['PingFang_SC'] text-[16px] font-medium not-italic leading-normal text-white`,children:E}),p(`button`,{type:`button`,"aria-label":D,className:`flex h-[24px] w-[24px] shrink-0 items-center justify-center text-white/50`,onClick:()=>j(!0),children:p(c,{className:`h-[24px] w-[24px]`})})]}),p(r,{ref:P,className:`flex flex-wrap content-start items-center gap-[6px] overflow-hidden`,style:M?{maxHeight:`${M}px`}:void 0,children:G.map((e,t)=>p(r,{ref:e=>{F.current[t]=e},className:`flex min-w-[56px] cursor-pointer items-center justify-center rounded-full px-[8px] py-[4px] ${T?`bg-[#1F1F1F]/10`:`bg-white/20`}`,onClick:()=>K(e),children:p(i,{className:`max-w-full whitespace-nowrap font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[20px] text-white`,children:_(e,8)})},t))}),p(s,{open:A,onOpenChange:j,onConfirm:W,title:``,description:O})]})}export{v as SearchHistoryClient};
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineComponentPropsSchema as e}from"../../../../utils/schema/schema.mjs";const t=e(e=>({title:e.string(`搜索历史`,{label:`标题名称`,description:`支持输入,中/英/数/符,6个字符`}),rows:e.number(1,{label:`展示行数`})}));export{t as searchHistoryInspectorPropsSchema};
2
+ import{defineComponentPropsSchema as e}from"../../../../utils/schema/schema.mjs";const t=e(e=>({title:e.string(`搜索历史`,{label:`标题名称`,description:`支持输入,中/英/数/符,6个字符`}),rows:e.number(2,{label:`展示行数`})}));export{t as searchHistoryInspectorPropsSchema};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useRouter as e}from"../../../../utils/use-compatible-router.mjs";import{Box as t}from"../../../ui/box.mjs";import{Input as n}from"../../../ui/input.mjs";import{Text as r}from"../../../ui/text.mjs";import i from"../../../../assets/icons/left_arrow.mjs";import a from"../../../../assets/icons/search.mjs";import o from"../../../../assets/icons/clear.mjs";import{useCallback as s,useState as c}from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";import{usePathname as d,useSearchParams as f}from"next/navigation";function p(e){if(!e||typeof e!=`string`)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>e==null?``:String(e).trim()).filter(Boolean):[]}catch{return[]}}function m(m){let{placeholder:h,defaultPlaceholder:g,searchLabel:_,storageKey:v=`guest`,onSearch:y,mode:b=`renderer`}=m,x=h||(g??`请输入搜索内容`),S=_??`搜索`,C=b===`editor`,[w,T]=c(``),E=e(),D=d(),O=f(),k=`search_history_${v}`,A=s(e=>{if(C)return;let t=e.trim();if(t){try{let e=[t,...p(localStorage.getItem(k)).filter(e=>e!==t)].slice(0,20);localStorage.setItem(k,JSON.stringify(e))}catch(e){console.error(`Failed to save search history`,e)}if(y)y(t);else{let e=new URLSearchParams(O.toString());e.set(`q`,t);let n=D.includes(`/search-result`)?D:`/search-result`;E.push(`${n}?${e.toString()}`)}}},[k,C,y,D,E,O]);return u(t,{className:`px-3 py-2 bg-bg1 flex items-center gap-3 w-full${C?` pointer-events-none`:``}`,children:[l(t,{className:`shrink-0 cursor-pointer active:opacity-70`,onClick:()=>{C||E.back()},children:l(i,{className:`w-4 h-4 text-text1`})}),u(t,{className:`flex-1 flex items-center gap-1 bg-bg2 border border-theme5 rounded-[20px] px-2 py-1.5 overflow-hidden`,children:[l(t,{className:`p-1 shrink-0`,children:l(a,{className:`w-[14px] h-[14px] text-text3`})}),l(n,{className:`flex-1 border-none bg-transparent p-0 h-auto text-[14px] leading-[22px] focus-visible:ring-0 text-text1 placeholder:text-text3`,placeholder:x,value:w,maxLength:128,onChange:e=>T(e.target.value),onKeyDown:e=>e.key===`Enter`&&A(w)}),w&&l(o,{className:`w-[15px] h-[15px] text-text3 shrink-0 cursor-pointer active:opacity-70`,onClick:()=>T(``)})]}),l(t,{className:`shrink-0 cursor-pointer active:opacity-70`,onClick:()=>A(w),children:l(r,{className:`text-[16px] text-text1 leading-[24px] font-normal`,children:S})})]})}export{m as SearchInputClient};
2
+ "use client";import{useRouter as e}from"../../../../utils/use-compatible-router.mjs";import{Box as t}from"../../../ui/box.mjs";import{Input as n}from"../../../ui/input.mjs";import{LeftArrowIcon as r}from"../../../common/icons/left-arrow.mjs";import i from"../../../../assets/icons/search.mjs";import a from"../../../../assets/icons/clear.mjs";import{useCallback as o,useState as s}from"react";import{jsx as c,jsxs as l}from"react/jsx-runtime";import{usePathname as u,useSearchParams as d}from"next/navigation";function f(e){if(!e||typeof e!=`string`)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>e==null?``:String(e).trim()).filter(Boolean):[]}catch{return[]}}function p(p){let{placeholder:m,defaultPlaceholder:h,searchLabel:g,storageKey:_=`guest`,onSearch:v,mode:y=`renderer`}=p,b=m||(h??`请输入搜索内容`),x=g??`搜索`,S=y===`editor`,[C,w]=s(``),T=e(),E=u(),D=d(),O=`search_history_${_}`,k=o(e=>{if(S)return;let t=e.trim();if(t){try{let e=[t,...f(localStorage.getItem(O)).filter(e=>e!==t)].slice(0,20);localStorage.setItem(O,JSON.stringify(e))}catch(e){console.error(`Failed to save search history`,e)}if(v)v(t);else{let e=new URLSearchParams(D.toString());e.set(`q`,t);let n=E.includes(`/search-result`)?E:`/search-result`;T.push(`${n}?${e.toString()}`)}}},[O,S,v,E,T,D]),A=()=>{S||T.back()};return l(t,{className:`flex h-[66px] w-full items-center gap-[8px] px-[16px] py-[16px]${S?` pointer-events-none`:``}`,children:[c(`button`,{type:`button`,"aria-label":`返回`,className:`flex size-[24px] shrink-0 items-center justify-center text-white active:opacity-70`,onClick:A,children:c(r,{className:`h-[16px] w-[16px]`})}),l(t,{className:`flex h-[34px] min-w-0 flex-1 items-center overflow-hidden rounded-[100px] border border-[#E62AFF]/90 bg-black/40 backdrop-blur-[2px]`,children:[l(t,{className:`relative flex h-full min-w-0 flex-1 items-center pl-[12px] pr-[10px]`,children:[c(`span`,{className:`pointer-events-none absolute inset-y-0 left-[12px] flex items-center justify-center`,children:c(i,{className:`h-[14px] w-[14px] text-white/60`})}),c(n,{className:`!h-[20px] !w-full !rounded-none !border-0 !bg-transparent !px-0 !pl-[22px] !pr-[18px] !py-0 !text-[14px] !leading-[20px] !text-white !caret-white placeholder:!text-white/90 focus-visible:!ring-0`,placeholder:b,value:C,maxLength:128,onChange:e=>w(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),k(C))}}),C&&c(`span`,{className:`absolute inset-y-0 right-0 flex items-center justify-center`,children:c(a,{className:`h-[15px] w-[15px] shrink-0 cursor-pointer text-white/50 active:opacity-70`,onClick:()=>w(``)})})]}),c(`button`,{type:`button`,className:`mx-[2px] flex h-[30px] w-[56px] shrink-0 items-center justify-center rounded-[100px] bg-[linear-gradient(90deg,#9756E3_0%,#6C43EE_100%)] text-[14px] leading-[20px] text-white active:opacity-90`,onClick:()=>k(C),children:x})]})]})}export{p as SearchInputClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import r from"../../../ui/link.mjs";import{shortcutGridInspectorDefaultProps as i}from"./schema.mjs";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s(s){let{mode:c=`renderer`,title:l,shortcutCount:u,isShortcutTitle:d,shortcuts:f}={...i,...s},p=c===`editor`,m=(()=>{let e=u??f.length??0;return Math.min(Math.max(e,3),5)})(),h=(f??[]).slice(0,m);return o(t,{as:`section`,className:p?`p-[12px] pointer-events-none`:`p-[12px]`,"aria-label":`金刚区`,children:[l?.trim()?a(n,{as:`h2`,className:`font-bold text-[16px] text-text1`,children:l}):null,a(t,{className:`flex justify-around mt-[8px]`,children:h.map((i,s)=>{let c=o(t,{className:`flex flex-col items-center justify-center gap-[10px] w-[52px]`,children:[a(t,{className:`flex h-[39px] w-[52px] items-center justify-center relative`,"aria-hidden":!i.label,children:a(e,{src:i.icon,alt:i.label||`入口图标`,fill:!0,className:`object-cover`})}),d?a(n,{className:`text-[12px] w-[52px] truncate text-center`,title:d?i.label:void 0,children:i.label}):null]});return a(r,{href:i.href,className:`block`,children:c},s)})})]})}export{s as ShortcutGridClient};
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/images/shortcut-grid/shortcut-grid-card-bg-primary.mjs";import{shortcutGridInspectorDefaultProps as a}from"./schema.mjs";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c(c){let{mode:l=`renderer`,title:u,shortcutCount:d,isShortcutTitle:f,shortcuts:p}={...a,...c},m=l===`editor`,h=(()=>{let e=d??p.length??0;return Math.min(Math.max(e,3),5)})(),g=(p??[]).slice(0,h);return o(t,{as:`section`,className:m?`pointer-events-none px-4 py-3`:`px-4 py-3`,"aria-label":`金刚区`,children:s(t,{className:`w-full`,children:[m&&u?.trim()?o(n,{as:`h2`,className:`mb-3 text-[12px] leading-[16px] text-white/45`,children:u}):null,o(t,{className:`grid w-full items-start gap-4`,style:{gridTemplateColumns:`repeat(${h}, minmax(0, 1fr))`},children:g.map((a,c)=>{let l=o(t,{className:`relative h-[79px] w-full min-w-0 overflow-visible`,children:s(t,{className:`absolute inset-x-0 bottom-0 h-[63px] w-full overflow-visible`,children:[o(i,{"aria-hidden":!0,className:`absolute inset-0 h-full w-full`}),o(t,{className:`pointer-events-none absolute left-1/2 top-[32px] z-20 -translate-x-1/2`,children:f?o(n,{className:`whitespace-nowrap text-center text-[12px] leading-[16px] text-white/80`,title:a.label||void 0,children:a.label}):null}),o(t,{className:`pointer-events-none absolute right-0 top-[-14px] z-30`,children:o(t,{className:`relative h-[43px] w-[42px] overflow-visible`,"aria-hidden":!a.label,children:a.icon?o(e,{src:a.icon,alt:a.label||`入口图标`,fill:!0,className:`object-contain drop-shadow-[0_10px_18px_rgba(0,0,0,0.3)]`}):o(t,{className:`h-full w-full rounded-full bg-white/12`})})})]})});return o(r,{href:a.href,className:`block w-full min-w-0 transition-transform duration-200 active:scale-[0.98]`,children:l},a.href||a.label||c)})})]})})}export{c as ShortcutGridClient};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{useMemo as r}from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{usePathname as o}from"next/navigation";import s from"next/link";const c=[];function l(e){return e.split(`?`)[0].replace(/\/+$/,``)||`/`}function u(e){if(e.configType===1)switch(e.functionPageType){case`搜索`:return`/search`;case`个人中心`:return`/user/mine`;case`内容列表`:return`/video-list?tags=${e.tags}&title=${e.title}`;default:return`/`}let t=(e.domainId??``).toString().trim();return t?`/domain/${t}`:`/`}function d(e,t){let n=l(t);if(e.configType===1){let t=l(u(e).split(`?`)[0]);return n===t||n.startsWith(`${t}/`)}let r=e.domainId.trim();if(!r)return n===`/`||n.startsWith(`/category/`);let i=`/domain/${r}`;return n===i||n.startsWith(`${i}/`)}function f(e,t){return e.findIndex(e=>d(e,t))}function p(l){let{items:d=c,mode:p=`renderer`}=l,m=o(),h=r(()=>{if(p===`editor`)return 0;let e=f(d??[],m);return e>=0?e:0},[d,m,p]),g=r(()=>(d??[]).some(e=>e.label.trim()!==``),[d]);if(!d?.length)return null;function _(e){p===`editor`&&e.preventDefault()}let v=`flex min-w-0 flex-1 cursor-pointer flex-col items-center justify-center ${g?`gap-1`:``}`;return i(t,{className:`fixed bottom-0 left-0 right-0 z-50 h-[var(--tab-bar-height)] border-t border-line1 bg-bg1 py-3 backdrop-blur-[2px] shadow-[0px_-4px_10px_0px_rgba(0,0,0,0.02)]`,children:i(t,{className:`flex w-full items-center`,children:d.map((r,o)=>{let c=h===o,l=c?r.activeIcon:r.icon,d=r.label;return a(s,{href:u(r),className:v,"data-index":o,"data-webview-nav":`spa`,onClick:_,children:[i(t,{className:`relative size-[22px] shrink-0`,children:l?i(e,{src:l,alt:d,fill:!0,className:`object-contain`}):i(t,{"data-active":c,className:`size-full rounded-sm bg-text3 data-[active=true]:bg-theme5`})}),g&&i(n,{"data-active":c,className:`truncate text-center text-[10px] leading-[10px] font-medium min-w-0 max-w-full px-0.5 text-text2 data-[active=true]:text-theme5`,children:d})]},o)})})})}export{p as TabBarClient};
2
+ "use client";import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{useMemo as r}from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{usePathname as o}from"next/navigation";import s from"next/link";const c=[],l={backgroundColor:`rgba(5, 1, 15, 0.9)`,backdropFilter:`blur(4px)`,WebkitBackdropFilter:`blur(4px)`,paddingBottom:`env(safe-area-inset-bottom, 0px)`},u={background:`rgba(1, 0, 2, 0.80)`,boxShadow:`0 12px 100px rgba(255, 255, 255, 0.20)`,backdropFilter:`blur(8px)`,WebkitBackdropFilter:`blur(8px)`};function d(e){return e.split(`?`)[0].replace(/\/+$/,``)||`/`}function f(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 p(e,t){let n=d(t);if(e.configType===1){let t=d(f(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 m(e,t){return e.findIndex(e=>p(e,t))}function h(d){let{items:p=c,mode:h=`renderer`}=d,g=o(),_=r(()=>{if(h===`editor`)return 0;let e=m(p??[],g);return e>=0?e:0},[p,g,h]),v=r(()=>(p??[]).some(e=>e.label.trim()!==``),[p]);if(!p?.length)return null;function y(e){h===`editor`&&e.preventDefault()}let b=`size-full rounded-[6px] bg-white/20`;return i(t,{as:`nav`,"aria-label":`Bottom navigation`,className:`fixed bottom-0 left-0 right-0 z-50 flex flex-col items-center`,style:l,children:i(t,{className:`my-[4px] flex h-[56px] w-[358px] items-center justify-between rounded-[100px] px-[40px]`,style:u,children:p.map((r,o)=>{let c=_===o,l=c?r.activeIcon:r.icon,u=r.label,d=f(r),p=v?c?`gap-[5px]`:`gap-[4px]`:``,m=c?`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 a(s,{href:d,className:`flex flex-col items-center justify-center ${p}`,"aria-current":c?`page`:void 0,"data-index":o,"data-webview-nav":`spa`,onClick:y,children:[i(t,{className:`relative size-5 shrink-0`,children:l?i(e,{src:l,alt:u,fill:!0,className:`object-contain`}):i(t,{className:c?`${b} bg-[#C043E8]`:b})}),v&&i(n,{className:m,children:u})]},o)})})})}export{h as TabBarClient};
@@ -0,0 +1,41 @@
1
+
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+
4
+ //#region components/common/collection-popup/create-collection-sheet.d.ts
5
+ interface CollectionSheetFormState {
6
+ title: string;
7
+ description: string;
8
+ }
9
+ interface CreateCollectionSheetProps {
10
+ /** 是否显示弹窗。 */
11
+ visible: boolean;
12
+ /** 弹窗模式。 */
13
+ mode?: 'create' | 'edit';
14
+ /** 编辑模式下的收藏夹 ID。 */
15
+ collectionId?: string;
16
+ /** 编辑模式的初始值。 */
17
+ initialValues?: Partial<CollectionSheetFormState>;
18
+ /** 弹窗关闭回调。 */
19
+ onClose?: () => void;
20
+ /** 创建成功回调。 */
21
+ onCreated?: () => void;
22
+ /** 编辑成功回调。 */
23
+ onUpdated?: () => void;
24
+ /** 通用成功回调。 */
25
+ onSuccess?: () => void;
26
+ }
27
+ /**
28
+ * 创建/编辑收藏夹底部抽屉弹窗。
29
+ */
30
+ declare function CreateCollectionSheet({
31
+ visible,
32
+ mode,
33
+ collectionId,
34
+ initialValues,
35
+ onClose,
36
+ onCreated,
37
+ onUpdated,
38
+ onSuccess
39
+ }: CreateCollectionSheetProps): react_jsx_runtime0.JSX.Element;
40
+ //#endregion
41
+ export { CreateCollectionSheet };
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{cn as e}from"../../../utils/cn.mjs";import{useUserStore as t}from"../../../store/modules/user-store.mjs";import{gCommunityGetCollectionInfo as n,pCommunityCreateCollection as r,pCommunityUpdateCollection as i}from"../../../service/generated/client.mjs";import{Box as a}from"../../ui/box.mjs";import{InputGroup as o,InputGroupAddon as s,InputGroupTextarea as c}from"../../ui/input-group.mjs";import{useDeleteRequest as l,useRequest as u}from"../../../hooks/query/use-query.mjs";import d from"../../ui/popup.mjs";import{useCallback as f,useEffect as p,useMemo as m,useRef as h,useState as g}from"react";import{XIcon as _}from"lucide-react";import{jsx as v,jsxs as y}from"react/jsx-runtime";import{toast as b}from"sonner";import{useTranslations as x}from"next-intl";const S=2e3;function C(e){return{title:e?.title??``,description:e?.description??``}}function w({visible:w,mode:T=`create`,collectionId:E,initialValues:D,onClose:O,onCreated:k,onUpdated:A,onSuccess:j}){let M=x(`components.pages.collectionCreate`),N=x(`components.common.collectionPopup`),{userId:P}=t(),F=l(),I=T===`edit`,L=D?.title!==void 0||D?.description!==void 0,R=w&&I&&!!E&&!L,z=typeof document>`u`?void 0:document.body,B=h(!1),[V,H]=g(!1),[U,W]=g(()=>C()),G=u([`collection-detail`,E,`sheet`],()=>n({collection_id:E}),{enabled:R}),K=G.data?.data?.data?.collection;p(()=>{w||(B.current=!1,H(!1))},[w]),p(()=>{if(!(!w||B.current)){if(!I){W(C()),B.current=!0;return}if(L){W(C(D)),B.current=!0;return}K&&(W(C({title:K.title,description:K.description})),B.current=!0)}},[K,L,D,I,w]);let q=f((e,t)=>{W(n=>({...n,[e]:t}))},[]),J=m(()=>R&&!B.current&&G.isLoading,[G.isLoading,R]),Y=M(I?`form.editTitle`:`form.createTitle`),X=I?M(`form.save`):N(`createModalAction`),Z=M(I?`form.saving`:`form.creating`);function Q(e){e||O?.()}function $(e){P&&(F([`user-profile`,`mine`]),F([`user-profile`,`mine`,P]),F([`user-profile`,`mine`,P,`user-collection-created`,P])),e&&F([`collection-detail`,e])}async function ee(){if(V)return;let e=U.title.trim(),t=U.description.trim();if(!e){b.error(M(`form.titleRequired`));return}if(!t){b.error(M(`form.descriptionRequired`));return}if(I&&!E){b.error(M(`form.collectionNotFound`));return}let n=b.loading(Z);try{H(!0);let a=I?await i({collection_id:E,title:e,description:t,cover_image:``}):await r({title:e,description:t,cover_image:``});if(a.code!==0){b.error(a.message||M(I?`form.saveFailed`:`form.createFailed`),{id:n});return}$(E),b.success(I?N(`updateSuccess`):M(`form.createSuccess`),{id:n}),j?.(),I?A?.():k?.(),O?.()}catch(e){console.error(I?`编辑收藏夹失败`:`创建收藏夹失败`,e),b.error(M(I?`form.saveFailed`:`form.createFailed`),{id:n})}finally{H(!1)}}return v(d,{open:w,onOpenChange:Q,showCloseButton:!1,className:`!z-[1210] max-h-[85vh] rounded-t-[24px] bg-[var(--color-surface-panel-dark)] p-0 text-[var(--color-text-primary)] backdrop-blur-[50px]`,overlayClassName:`!z-[1200] overlay-create-collection`,overlayForceRender:!0,portalContainer:z,children:y(`div`,{className:`flex flex-col pb-[34px]`,children:[y(`div`,{className:`flex h-14 items-center justify-between px-4`,children:[v(`span`,{className:`text-lg font-medium text-[var(--color-text-primary)]`,children:Y}),v(`button`,{type:`button`,className:`flex h-6 w-6 items-center justify-center rounded text-[var(--color-text-primary)] opacity-60 hover:opacity-100`,onClick:()=>O?.(),"aria-label":`关闭`,children:v(_,{size:24})})]}),y(`div`,{className:`flex flex-col gap-4 px-4`,children:[y(a,{className:`flex flex-col gap-2`,children:[y(`label`,{className:`text-sm text-[var(--color-text-dimmed)]`,children:[v(`span`,{className:`text-[var(--color-border-required)]`,children:`* `}),M(`form.label`)]}),y(o,{className:e(`min-h-[160px] rounded-2xl border border-transparent bg-[var(--color-surface-field-bg)] px-4 py-3`,`focus-within:!border-[var(--color-border-danger)] focus-within:!ring-0`,J?`opacity-60`:``),children:[v(c,{maxLength:S,className:`min-h-[120px] resize-none bg-transparent text-sm text-[var(--color-text-primary)] placeholder:text-[var(--color-text-quaternary)] focus-visible:ring-0 focus-visible:ring-offset-0`,placeholder:M(`form.titlePlaceholder`),value:U.title,onChange:e=>q(`title`,e.target.value),disabled:V||J}),y(s,{align:`block-end`,className:`flex items-center justify-end gap-2 bg-transparent px-0`,children:[y(`span`,{className:`text-sm text-[var(--color-text-disabled)]`,children:[U.title.length,`/`,S]}),v(`button`,{type:`button`,className:`text-sm text-[var(--color-text-disabled)] hover:text-[var(--color-text-primary)] disabled:opacity-50`,onClick:()=>q(`title`,``),disabled:V||J,children:M(`form.clear`)})]})]})]}),y(a,{className:`flex flex-col gap-2`,children:[y(`label`,{className:`text-sm text-[var(--color-text-dimmed)]`,children:[v(`span`,{className:`text-[var(--color-border-required)]`,children:`* `}),M(`form.descriptionLabel`)]}),y(o,{className:e(`min-h-[160px] rounded-2xl border border-transparent bg-[var(--color-surface-field-bg)] px-4 py-3 focus-within:ring-0`,`focus-within:!border-[var(--color-border-danger)]`,J?`opacity-60`:``),children:[v(c,{maxLength:S,className:`min-h-[120px] resize-none bg-transparent text-sm text-[var(--color-text-primary)] placeholder:text-[var(--color-text-quaternary)] focus-visible:ring-0 focus-visible:ring-offset-0`,placeholder:M(`form.descriptionPlaceholder`),value:U.description,onChange:e=>q(`description`,e.target.value),disabled:V||J}),y(s,{align:`block-end`,className:`flex items-center justify-end gap-2 bg-transparent px-0`,children:[y(`span`,{className:`text-sm text-[var(--color-text-disabled)]`,children:[U.description.length,`/`,S]}),v(`button`,{type:`button`,className:`text-sm text-[var(--color-text-disabled)] hover:text-[var(--color-text-primary)] disabled:opacity-50`,onClick:()=>q(`description`,``),disabled:V||J,children:M(`form.clear`)})]})]})]}),v(`button`,{type:`button`,className:`h-12 w-full max-w-[358px] self-center rounded-[var(--radius-pill)] text-base font-medium text-[var(--color-text-primary)] transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-50`,style:{background:`var(--gradient-action-button)`},onClick:ee,disabled:V||J,children:V?Z:X})]})]})})}export{w as CreateCollectionSheet};
@@ -1,4 +1,5 @@
1
1
 
2
+ import { CreateCollectionSheet } from "./create-collection-sheet.mjs";
2
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
4
 
4
5
  //#region components/common/collection-popup/index.d.ts
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{createStore as e}from"../../../store/create-store.mjs";import{useUserStore as t}from"../../../store/modules/user-store.mjs";import{gCommunityGetUserCollections as n}from"../../../service/generated/client.mjs";import{Image as r}from"../../ui/image.mjs";import{InfiniteScroll as i}from"../../ui/infinite-scroll.mjs";import a from"../../../assets/icons/close.mjs";import o from"../../../assets/icons/common/right_arrow.mjs";import s from"../../../assets/icons/detail/min-collection.mjs";import c from"../../../assets/icons/empty/img-empty-nodata.mjs";import l from"../../ui/popup.mjs";import{CollectionCreateModal as u}from"./collection-create-modal.mjs";import d from"../page-loading/index.mjs";import{useCallback as f,useEffect as p,useMemo as m,useState as h}from"react";import{Fragment as g,jsx as _,jsxs as v}from"react/jsx-runtime";import{toast as y}from"sonner";import{useTranslations as b}from"next-intl";const x=e(e=>({isOpen:!1,options:null,open:t=>e(e=>({...e,isOpen:!0,options:t})),close:()=>e(e=>({...e,isOpen:!1,options:null}))}),{name:`collection-popup-store`,persist:!1});function S(e){return{id:String(e?.collection_id||``),cover:e?.cover_image||``,title:e?.title||``,contentCount:Number(e?.content_count||0)}}function C(e){let x=b(`components.common.collectionPopup`),{visible:C,mode:w=`favorite`,onClose:T,toCreateCollection:E,onCollect:D}=e,{userInfo:O,userId:k}=t(),[A,j]=h(!0),[M,N]=h([]),[P,F]=h(!0),[I,L]=h(1),[R,z]=h(!1),B=m(()=>String(k||O?.userId||`0`),[k,O?.userId]),V=f(async e=>{if(!B||!e?.reset&&(!P||A&&M.length>0))return;let t=e?.nextPage??I;j(!0);try{let e=await n({page:t,page_size:10});if(e.code!==0){F(!1);return}let r=(e.data?.data?.collections??[]).map(S);N(e=>t===1?r:[...e,...r]),e.data?.data?.has_more===!1||r.length<10?F(!1):(F(!0),L(t+1))}catch(e){console.error(`获取合集列表失败:`,e),F(!1)}finally{j(!1)}},[M.length,P,A,I,10,B]);p(()=>{C&&V()},[V,C]);let[H,U]=h(!0);p(()=>{U(!A&&M.length===0)},[M.length,A]);function W(e){e||T?.()}function G(){if(w===`select`){z(!0);return}E?.()}function K(e){D?.(e),w===`favorite`&&y.message(x(`collectSuccess`))}function q(e){return function(){K(e)}}function J(){return V()}let Y=f(()=>{F(!0),L(1),N([]),V({nextPage:1,reset:!0})},[V]);return v(l,{open:C,onOpenChange:W,showCloseButton:!1,className:`z-[1000] h-[450px] rounded-t-[16px] bg-bg1 p-0 text-text1`,children:[v(`div`,{className:`bg-bg1 h-[450px] pb-[24px] flex flex-col`,children:[v(`div`,{className:`w-full px-[16px] relative`,children:[v(`div`,{className:`w-full h-[60px] flex items-center justify-center`,children:[_(`button`,{type:`button`,className:`cursor-pointer absolute w-[48px] h-[60px] left-0 top-0 flex items-center justify-center focus:outline-none`,onClick:T,children:_(a,{className:`w-[16px] h-[16px] text-text1`})}),_(`div`,{className:`text-[18px] text-text1 font-semibold`,children:x(w===`select`?`selectTitle`:`favoriteToCollectionTitle`)}),w===`select`&&_(`button`,{type:`button`,className:`absolute right-0 top-0 h-[60px] px-[16px] text-[14px] text-theme5 font-semibold`,onClick:G,children:x(`newCollection`)})]}),w===`favorite`&&v(`button`,{type:`button`,className:`cursor-pointer w-full h-[48px] rounded-[16px] px-[12px] border border-solid border-line1 flex items-center justify-between`,onClick:G,children:[v(`div`,{className:`flex items-center`,children:[_(s,{className:`w-[24px] h-[24px]`}),_(`span`,{className:`ml-[8px] text-text1 text-[14px] font-semibold leading-[18px]`,children:x(`createCollection`)})]}),_(o,{className:`text-text2 w-[12px] h-[12px]`})]})]}),_(`div`,{className:`w-full px-[16px] flex-1 h-[0] overflow-y-auto`,children:A?_(d,{}):H?v(`div`,{className:`flex flex-col items-center justify-center py-[48px] text-text2`,children:[_(c,{className:`w-[120px] h-[120px]`}),v(`span`,{className:`mt-[16px] text-[14px]`,children:[x(`noCollections`),`,`,x(`createCollectionHint`)]})]}):v(g,{children:[M.map((e,t)=>v(`button`,{type:`button`,className:`cursor-pointer w-full h-[92px] flex items-center text-left`,onClick:q(e.id),children:[_(`div`,{className:`w-[60px] h-[60px] bg-bg2 rounded-[8px] overflow-hidden relative`,children:e.cover&&_(r,{src:e.cover,fill:!0,objectFit:`cover`,alt:x(`coverAlt`)})}),v(`div`,{className:`ml-[12px] flex flex-col justify-center`,children:[_(`span`,{className:`max-w-[200px] text-text1 text-[18px] leading-[24px] font-semibold line-clamp-1`,children:e.title||``}),v(`span`,{className:`mt-[3px] text-text2 text-[14px]`,children:[e.contentCount||0,x(`postsCountSuffix`)]})]})]},e.id||`collection-${t}`)),M.length>0&&_(i,{loadMore:J,hasMore:P})]})})]}),_(u,{visible:R,onClose:()=>z(!1),onCreated:()=>{z(!1),Y()}})]})}function w(){let{isOpen:e,options:t,close:n}=x();return e?_(C,{visible:e,mode:t?.mode,onClose:()=>{n(),t?.onClose?.()},toCreateCollection:()=>{n(),t?.toCreateCollection?.()},onCollect:e=>{n(),t?.onCollect?.(e)}}):null}var T=class{static show(e){x.getState().open(e)}static clear(){x.getState().close()}};export{C as CollectionPopupComponent,w as CollectionPopupHost,T as default};
2
+ "use client";import{createStore as e}from"../../../store/create-store.mjs";import{useUserStore as t}from"../../../store/modules/user-store.mjs";import{gCommunityGetUserCollections as n}from"../../../service/generated/client.mjs";import{Image as r}from"../../ui/image.mjs";import{InfiniteScroll as i}from"../../ui/infinite-scroll.mjs";import a from"../../../assets/icons/close.mjs";import o from"../../../assets/icons/common/right_arrow.mjs";import s from"../../../assets/icons/detail/min-collection.mjs";import c from"../../../assets/icons/empty/img-empty-nodata.mjs";import l from"../../ui/popup.mjs";import{CreateCollectionSheet as u}from"./create-collection-sheet.mjs";import d from"../page-loading/index.mjs";import{useCallback as f,useEffect as p,useMemo as m,useState as h}from"react";import{Fragment as g,jsx as _,jsxs as v}from"react/jsx-runtime";import{toast as y}from"sonner";import{useTranslations as b}from"next-intl";const x=e(e=>({isOpen:!1,options:null,open:t=>e(e=>({...e,isOpen:!0,options:t})),close:()=>e(e=>({...e,isOpen:!1,options:null}))}),{name:`collection-popup-store`,persist:!1});function S(e){return{id:String(e?.collection_id||``),cover:e?.cover_image||``,title:e?.title||``,contentCount:Number(e?.content_count||0)}}function C(e){let x=b(`components.common.collectionPopup`),{visible:C,mode:w=`favorite`,onClose:T,toCreateCollection:E,onCollect:D}=e,{userInfo:O,userId:k}=t(),[A,j]=h(!0),[M,N]=h([]),[P,F]=h(!0),[I,L]=h(1),[R,z]=h(!1),B=m(()=>String(k||O?.userId||`0`),[k,O?.userId]),V=f(async e=>{if(!B||!e?.reset&&(!P||A&&M.length>0))return;let t=e?.nextPage??I;j(!0);try{let e=await n({page:t,page_size:10});if(e.code!==0){F(!1);return}let r=(e.data?.data?.collections??[]).map(S);N(e=>t===1?r:[...e,...r]),e.data?.data?.has_more===!1||r.length<10?F(!1):(F(!0),L(t+1))}catch(e){console.error(`获取合集列表失败:`,e),F(!1)}finally{j(!1)}},[M.length,P,A,I,10,B]);p(()=>{C&&V()},[V,C]);let[H,U]=h(!0);p(()=>{U(!A&&M.length===0)},[M.length,A]);function W(e){e||T?.()}function G(){if(w===`select`){z(!0);return}E?.()}function K(e){D?.(e),w===`favorite`&&y.message(x(`collectSuccess`))}function q(e){return function(){K(e)}}function J(){return V()}let Y=f(()=>{F(!0),L(1),N([]),V({nextPage:1,reset:!0})},[V]);return v(l,{open:C,onOpenChange:W,showCloseButton:!1,className:`z-[1000] h-[450px] rounded-t-[16px] bg-bg1 p-0 text-text1`,children:[v(`div`,{className:`bg-bg1 h-[450px] pb-[24px] flex flex-col`,children:[v(`div`,{className:`w-full px-[16px] relative`,children:[v(`div`,{className:`w-full h-[60px] flex items-center justify-center`,children:[_(`button`,{type:`button`,className:`cursor-pointer absolute w-[48px] h-[60px] left-0 top-0 flex items-center justify-center focus:outline-none`,onClick:T,children:_(a,{className:`w-[16px] h-[16px] text-text1`})}),_(`div`,{className:`text-[18px] text-text1 font-semibold`,children:x(w===`select`?`selectTitle`:`favoriteToCollectionTitle`)}),w===`select`&&_(`button`,{type:`button`,className:`absolute right-0 top-0 h-[60px] px-[16px] text-[14px] text-theme5 font-semibold`,onClick:G,children:x(`newCollection`)})]}),w===`favorite`&&v(`button`,{type:`button`,className:`cursor-pointer w-full h-[48px] rounded-[16px] px-[12px] border border-solid border-line1 flex items-center justify-between`,onClick:G,children:[v(`div`,{className:`flex items-center`,children:[_(s,{className:`w-[24px] h-[24px]`}),_(`span`,{className:`ml-[8px] text-text1 text-[14px] font-semibold leading-[18px]`,children:x(`createCollection`)})]}),_(o,{className:`text-text2 w-[12px] h-[12px]`})]})]}),_(`div`,{className:`w-full px-[16px] flex-1 h-[0] overflow-y-auto`,children:A?_(d,{}):H?v(`div`,{className:`flex flex-col items-center justify-center py-[48px] text-text2`,children:[_(c,{className:`w-[120px] h-[120px]`}),v(`span`,{className:`mt-[16px] text-[14px]`,children:[x(`noCollections`),`,`,x(`createCollectionHint`)]})]}):v(g,{children:[M.map((e,t)=>v(`button`,{type:`button`,className:`cursor-pointer w-full h-[92px] flex items-center text-left`,onClick:q(e.id),children:[_(`div`,{className:`w-[60px] h-[60px] bg-bg2 rounded-[8px] overflow-hidden relative`,children:e.cover&&_(r,{src:e.cover,fill:!0,objectFit:`cover`,alt:x(`coverAlt`)})}),v(`div`,{className:`ml-[12px] flex flex-col justify-center`,children:[_(`span`,{className:`max-w-[200px] text-text1 text-[18px] leading-[24px] font-semibold line-clamp-1`,children:e.title||``}),v(`span`,{className:`mt-[3px] text-text2 text-[14px]`,children:[e.contentCount||0,x(`postsCountSuffix`)]})]})]},e.id||`collection-${t}`)),M.length>0&&_(i,{loadMore:J,hasMore:P})]})})]}),_(u,{visible:R,onClose:()=>z(!1),onCreated:()=>{z(!1),Y()}})]})}function w(){let{isOpen:e,options:t,close:n}=x();return e?_(C,{visible:e,mode:t?.mode,onClose:()=>{n(),t?.onClose?.()},toCreateCollection:()=>{n(),t?.toCreateCollection?.()},onCollect:e=>{n(),t?.onCollect?.(e)}}):null}var T=class{static show(e){x.getState().open(e)}static clear(){x.getState().close()}};export{C as CollectionPopupComponent,w as CollectionPopupHost,T as default};
@@ -1,2 +1,2 @@
1
1
 
2
- import{jsx as e,jsxs as t}from"react/jsx-runtime";function n(n){let{className:r,...i}=n;return e(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 48 48`,xmlns:`http://www.w3.org/2000/svg`,xmlnsXlink:`http://www.w3.org/1999/xlink`,fontSize:`20`,className:`antd-mobile-icon text-text1 ${r||``}`,style:{verticalAlign:`-0.125em`},...i,children:e(`g`,{id:`SetOutline-SetOutline`,stroke:`none`,strokeWidth:`1`,fill:`none`,fillRule:`evenodd`,children:t(`g`,{id:`SetOutline-编组`,children:[e(`rect`,{id:`SetOutline-矩形`,fill:`transparent`,opacity:`0`,x:`0`,y:`0`,width:`48`,height:`48`}),e(`path`,{d:`M29.6635785,4.09347573 C29.6943765,4.10280636 29.7218319,4.11121584 29.7459445,4.11870417 C32.9286193,5.10710452 35.7780984,6.89542969 38.0773907,9.25862405 C38.1048534,9.28685006 38.137705,9.32098069 38.1759455,9.36101594 L38.1758731,9.36108506 C38.2958121,9.4866534 38.3210097,9.67527399 38.2382375,9.82792234 C38.2019091,9.89491908 38.1723405,9.95145741 38.1495317,9.99753731 C37.2499501,11.8149357 37.2312381,14.0542329 38.2894192,15.9551742 C39.3113653,17.7910221 41.0990205,18.8824923 42.9924218,19.046176 C43.0308388,19.0494971 43.0769297,19.0526108 43.1306946,19.055517 L43.1306891,19.0556186 C43.3097688,19.0652987 43.4605039,19.1930174 43.4994562,19.3680772 C43.5181604,19.4521376 43.5334344,19.5224186 43.5452782,19.5789201 C43.8434094,21.0011724 44,22.4782234 44,23.9932074 C44,25.9110818 43.7490484,27.768165 43.2793445,29.5310609 C43.2673008,29.5762635 43.2521361,29.6318295 43.2338504,29.6977589 L43.2339096,29.6977753 C43.1896789,29.8572501 43.0518211,29.9730289 42.8871024,29.9890386 C42.8573588,29.9919295 42.8310363,29.994728 42.8081347,29.9974341 C40.9832456,30.2130642 39.2780401,31.2924244 38.2894192,33.0684062 C37.3690455,34.721787 37.2633405,36.6311336 37.8431283,38.2964388 C37.8645836,38.3580642 37.894274,38.4365116 37.9321995,38.531781 L37.9323132,38.5317357 C37.9914458,38.6802779 37.956476,38.8497628 37.843378,38.9627686 C37.7865957,39.0195046 37.7392204,39.0664065 37.7012522,39.1034741 C35.4293099,41.3215235 32.6557522,42.9941892 29.5759974,43.9196324 C29.4537483,43.9563673 29.2860191,44.0037796 29.0728098,44.0618692 L29.0728273,44.0619334 C28.91719,44.1043373 28.751312,44.0491222 28.6521374,43.9219001 C28.5788324,43.8278638 28.5179309,43.752778 28.4694329,43.6966426 C27.3705613,42.4247239 25.7753243,41.6250222 24,41.6250222 C22.2788787,41.6250222 20.727016,42.3766374 19.6328956,43.5806625 C19.5591199,43.661849 19.4643813,43.7758944 19.34868,43.9227986 L19.3486175,43.9227494 C19.2493155,44.0488316 19.0842591,44.1033371 18.9294019,44.0611842 C18.7099668,44.0014529 18.5375942,43.9527361 18.4122839,43.9150337 C15.3282444,42.9871326 12.5518465,41.3090762 10.2781268,39.0843168 C10.2449964,39.0518999 10.2042406,39.0115257 10.1558594,38.9631942 L10.1558261,38.9632275 C10.04253,38.8500478 10.0076468,38.680209 10.0671608,38.5315358 C10.0959923,38.4595114 10.1191005,38.3992875 10.1364852,38.3508643 C10.7388765,36.6729735 10.6410312,34.7398891 9.71058084,33.0684062 C8.77900775,31.3949064 7.21116421,30.3399516 5.50695414,30.0424689 C5.40889863,30.0253526 5.27714893,30.0081907 5.11170504,29.9909832 L5.11171738,29.9908645 C4.94823645,29.9738612 4.81180998,29.8585556 4.76780345,29.7001935 C4.74656016,29.6237473 4.7291408,29.5599484 4.71554538,29.508797 C4.24893773,27.7532311 4,25.903371 4,23.9932074 C4,22.4054758 4.17199022,20.8594077 4.49770159,19.3739511 C4.49806505,19.3722935 4.49843334,19.3706159 4.49880646,19.3689185 L4.49883435,19.3689247 C4.5374295,19.1933462 4.68842311,19.0650888 4.86793244,19.0554044 C4.90654419,19.0533214 4.94037279,19.0511226 4.96941824,19.0488081 C6.87752944,18.896758 8.68194132,17.8030464 9.71058084,15.9551742 C10.7160785,14.1488746 10.7492438,12.0370719 9.97851139,10.271735 C9.92961058,10.1597293 9.85632321,10.0117916 9.75864928,9.82792177 L9.75863681,9.8279284 C9.67757981,9.67533972 9.70365562,9.48795295 9.8232933,9.36329195 C9.95974282,9.22111323 10.0692945,9.10887896 10.1519482,9.02658914 C12.326484,6.86162837 14.9722368,5.2013723 17.9137138,4.22786185 C18.0198088,4.19274868 18.1613328,4.14821666 18.3382858,4.09426578 L18.3382697,4.0942132 C18.5189812,4.03911642 18.7136034,4.11794967 18.8050299,4.28327804 C18.8832892,4.42479596 18.9491374,4.53716566 19.0025746,4.62038717 C20.0780793,6.29534615 21.9148218,7.39855818 24,7.39855818 C26.1773809,7.39855818 28.0838696,6.19562513 29.1353621,4.39557165 C29.1469048,4.37581178 29.1669487,4.3394508 29.1954939,4.28648874 L29.1955161,4.28650073 C29.2857772,4.11903248 29.4815071,4.0383151 29.6635785,4.09347573 Z M30.291723,7.85114089 L30.291723,7.85114089 L30.291723,7.85114089 C28.6437806,9.52218192 26.4047627,10.5100549 24,10.5100549 C21.6223815,10.5100549 19.4098701,9.54440347 17.7697895,7.91280929 L17.7132092,7.85462809 C17.6100913,7.74859263 17.4522642,7.71712891 17.3163679,7.77551557 L17.3163679,7.77551557 L17.3163679,7.77551557 C15.9322776,8.39005242 14.633762,9.19368235 13.4541246,10.1628476 L13.3867297,10.2196976 C13.2694828,10.3185994 13.2191193,10.475839 13.2570868,10.6244556 L13.2575903,10.6264267 L13.2575903,10.6264267 C13.7725685,12.8102642 13.5205613,15.1562719 12.464932,17.2183236 L12.3086571,17.5109225 C11.1920953,19.5167402 9.43480152,20.9698965 7.40855181,21.6828434 C7.40091095,21.6855318 7.38973993,21.6893285 7.37503876,21.6942335 L7.37504204,21.6942433 C7.22714595,21.7435875 7.12139963,21.8743708 7.1041119,22.0293199 C7.10248639,22.0438892 7.10118391,22.055854 7.10020446,22.0652143 C7.05194441,22.526416 7.02100448,22.9912373 7.00762775,23.4589912 L7,23.9932074 C7,24.9613003 7.07495263,25.917621 7.22258691,26.855785 L7.25959287,27.0722616 C7.28391536,27.2139796 7.3823706,27.3317948 7.51754776,27.380812 C7.59686483,27.4095736 7.65871065,27.4326633 7.70308522,27.4500811 C9.51548077,28.1614794 11.0888905,29.4725697 12.1509777,31.2401084 L12.3086571,31.5126578 C13.3435133,33.371698 13.7095027,35.4923797 13.4194465,37.5343141 C13.4191519,37.5363877 13.4187954,37.5388325 13.418377,37.5416483 L13.4183868,37.5416498 C13.3977083,37.6808038 13.4516529,37.8205903 13.5604504,37.9097785 C13.5795524,37.9254377 13.5927649,37.936209 13.6000877,37.9420922 C14.9359782,39.0153738 16.4186528,39.8773318 18.0012021,40.4960686 C18.0180019,40.5026369 18.0499461,40.5147385 18.0970346,40.5323735 L18.0970476,40.5323389 C18.2301703,40.5821942 18.3797517,40.5576453 18.4899563,40.4678557 C18.5407032,40.4265096 18.5745502,40.3992232 18.5914976,40.3859965 C20.0437878,39.2525436 21.8148223,38.5847722 23.692736,38.5189087 L24,38.5135255 C26.0546357,38.5135255 27.9962679,39.2344251 29.5525918,40.5011394 L29.5625019,40.5094288 C29.6390288,40.5734408 29.7436987,40.5922165 29.8377034,40.5587945 L29.8377034,40.5587945 L29.8377034,40.5587945 C31.4665237,39.9410888 32.9918221,39.0671383 34.3628695,37.9713833 C34.3758544,37.9610056 34.4017031,37.9399379 34.4404158,37.9081801 L34.4404118,37.9081753 C34.5491233,37.818994 34.6030242,37.679281 34.582378,37.5401939 C34.5701682,37.4579399 34.562495,37.4043003 34.5593585,37.379275 C34.3224766,35.4892434 34.6454399,33.5395462 35.5385639,31.7984312 L35.691343,31.5126578 C36.7621637,29.5890102 38.4237823,28.1708936 40.3512816,27.4294657 L40.4811388,27.3826779 C40.6164373,27.3339296 40.7151527,27.2163026 40.7396867,27.0745981 L40.7775003,26.8561932 L40.7775003,26.8561932 C40.8955662,26.1052033 40.9671265,25.3429213 40.9910279,24.5725001 L41,23.9932074 C41,23.3339341 40.9652437,22.6802401 40.8963936,22.0340808 C40.8962979,22.0331827 40.8961981,22.0322526 40.8960941,22.0312906 L40.8960534,22.031295 C40.879315,21.876429 40.7741874,21.7453695 40.6266425,21.6954283 C40.6235192,21.6943711 40.6208408,21.6934535 40.6186073,21.6926756 C38.6753505,21.0158623 36.9771921,19.6590351 35.8512449,17.7871679 L35.691343,17.5109225 C34.5050786,15.3798894 34.2028644,12.9138423 34.7426714,10.6260269 L34.7435697,10.6224291 C34.7805548,10.4742946 34.7299853,10.3180262 34.6132258,10.2196445 L34.5460544,10.1630459 L34.5460544,10.1630459 C33.3663284,9.19377043 32.0677839,8.39009518 30.6836701,7.77553631 L30.6752045,7.77193094 C30.5433665,7.71578291 30.3905255,7.74735294 30.291723,7.85114089 Z M24,16.7330484 C27.8659932,16.7330484 31,19.9835323 31,23.9932074 C31,28.0028825 27.8659932,31.2533664 24,31.2533664 C20.1340068,31.2533664 17,28.0028825 17,23.9932074 C17,19.9835323 20.1340068,16.7330484 24,16.7330484 Z M24,19.8445451 C21.790861,19.8445451 20,21.7019645 20,23.9932074 C20,26.2844503 21.790861,28.1418697 24,28.1418697 C26.209139,28.1418697 28,26.2844503 28,23.9932074 C28,21.7019645 26.209139,19.8445451 24,19.8445451 Z`,id:`SetOutline-形状`,fill:`currentColor`,fillRule:`nonzero`,className:``})]})})})}export{n as SettingIcon};
2
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";function n(n){let{className:r,...i}=n;return t(`svg`,{width:`24`,height:`24`,viewBox:`0 0 24 24`,xmlns:`http://www.w3.org/2000/svg`,xmlnsXlink:`http://www.w3.org/1999/xlink`,fontSize:`20`,className:`antd-mobile-icon ${r||``}`,style:{verticalAlign:`-0.125em`},...i,children:[e(`path`,{d:`M16.5454 3.5C16.8675 3.5 17.1659 3.67065 17.3293 3.94832L21.8746 11.6755C22.0418 11.9598 22.0418 12.3126 21.8746 12.597L17.3293 20.3241C17.1659 20.6018 16.8675 20.7724 16.5454 20.7724H7.45463C7.13252 20.7724 6.83404 20.6017 6.67073 20.3241L2.12535 12.597C1.95822 12.3126 1.95822 11.9598 2.12535 11.6755L6.67073 3.94832C6.83404 3.67069 7.13252 3.50003 7.45463 3.5H16.5454ZM3.96392 12.1362L7.97486 18.9543H16.026L20.0352 12.1362L16.026 5.31815H7.97486L3.96392 12.1362Z`,fill:`currentColor`}),e(`path`,{d:`M13.3637 12.1364C13.3637 11.3833 12.7532 10.7727 12.0001 10.7727C11.247 10.7727 10.6365 11.3833 10.6365 12.1364C10.6365 12.8894 11.247 13.5 12.0001 13.5C12.7532 13.5 13.3637 12.8894 13.3637 12.1364ZM15.1819 12.1364C15.1819 13.8936 13.7573 15.3181 12.0001 15.3181C10.2429 15.3181 8.81836 13.8936 8.81836 12.1364C8.81836 10.3791 10.2429 8.95459 12.0001 8.95459C13.7573 8.95459 15.1819 10.3791 15.1819 12.1364Z`,fill:`currentColor`})]})}export{n as SettingIcon};
@@ -21,6 +21,14 @@ interface CollectionListItemProps {
21
21
  contentCount: number;
22
22
  /** 合集预览内容列表。 */
23
23
  contents?: CollectionListMediaItem[];
24
+ /** 是否为系统默认收藏夹(编辑态下不可勾选)。 */
25
+ isDefaultCollection?: boolean;
26
+ /** 是否处于编辑态。 */
27
+ isEditMode?: boolean;
28
+ /** 当前是否选中。 */
29
+ isSelected?: boolean;
30
+ /** 切换选中态回调。 */
31
+ onToggleSelection?: (id: string) => void;
24
32
  }
25
33
  declare function CollectionListItem(props: CollectionListItemProps): react_jsx_runtime0.JSX.Element;
26
34
  //#endregion