@funhub/platform 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/icons/channel-list/channel-active-indicator.mjs +2 -0
- package/dist/assets/icons/common/header-menu.mjs +2 -0
- package/dist/assets/icons/common/header-search-icon.mjs +2 -0
- package/dist/assets/icons/common/right_arrow_thin.mjs +2 -0
- package/dist/assets/icons/eye-off-icon.mjs +1 -1
- package/dist/assets/icons/marquee-close.mjs +2 -0
- package/dist/assets/icons/marquee-speaker.mjs +2 -0
- package/dist/assets/images/shortcut-grid/shortcut-grid-card-bg-primary.mjs +2 -0
- package/dist/biz.d.mts +6 -2
- package/dist/biz.mjs +1 -1
- package/dist/common.d.mts +5 -2
- package/dist/common.mjs +1 -1
- package/dist/components/biz/basics/fullscreen-feed/runtime/user-action.mjs +1 -1
- package/dist/components/biz/basics/logo/variants/basic-logo/runtime/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/ad-match.d.mts +1 -1
- package/dist/components/biz/business/advertisement/ad-match.mjs +1 -1
- package/dist/components/biz/business/advertisement/ad-provider.mjs +1 -1
- package/dist/components/biz/business/advertisement/ad-query.d.mts +2 -1
- package/dist/components/biz/business/advertisement/ad-query.mjs +1 -1
- package/dist/components/biz/business/advertisement/ad-runtime-provider.d.mts +2 -2
- package/dist/components/biz/business/advertisement/ad-runtime-provider.mjs +1 -1
- package/dist/components/biz/business/advertisement/banner-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/banner-ad/material.d.mts +1 -0
- package/dist/components/biz/business/advertisement/banner-ad/schema.d.mts +2 -0
- package/dist/components/biz/business/advertisement/banner-ad/schema.mjs +1 -1
- package/dist/components/biz/business/advertisement/floating-ad/client.d.mts +1 -0
- package/dist/components/biz/business/advertisement/floating-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/floating-ad/schema.d.mts +4 -0
- package/dist/components/biz/business/advertisement/icon-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/icon-ad/material.d.mts +1 -0
- package/dist/components/biz/business/advertisement/icon-ad/schema.d.mts +1 -0
- package/dist/components/biz/business/advertisement/icon-ad/schema.mjs +1 -1
- package/dist/components/biz/business/advertisement/popup-ad/client.mjs +2 -2
- package/dist/components/biz/business/advertisement/text-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/text-ad/material.d.mts +1 -0
- package/dist/components/biz/business/advertisement/text-ad/schema.d.mts +2 -0
- package/dist/components/biz/business/advertisement/text-ad/schema.mjs +1 -1
- package/dist/components/biz/business/banner/variants/basic-banner/runtime/client.mjs +1 -1
- package/dist/components/biz/business/banner-carousel/client.d.mts +2 -1
- package/dist/components/biz/business/banner-carousel/client.mjs +1 -1
- package/dist/components/biz/business/banner-carousel/default-props.mjs +1 -1
- package/dist/components/biz/business/channel-list/client.mjs +1 -1
- package/dist/components/biz/business/channel-list/default-props.mjs +1 -1
- package/dist/components/biz/business/detail/shared/detail-operate.mjs +1 -1
- package/dist/components/biz/business/detail/shared/editor-preview.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-actions/client.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-info/client.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/client.d.mts +1 -13
- package/dist/components/biz/business/detail/video-detail-recommend/client.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/material.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/schema.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/shared.mjs +2 -0
- package/dist/components/biz/business/header-search/header-avatar-icon/client.mjs +1 -1
- package/dist/components/biz/business/header-search/header-avatar-logo-search/client.d.mts +1 -1
- package/dist/components/biz/business/header-search/header-avatar-logo-search/client.mjs +1 -1
- package/dist/components/biz/business/header-search/header-avatar-logo-search/schema.d.mts +4 -3
- package/dist/components/biz/business/header-search/header-avatar-logo-search/schema.mjs +1 -1
- package/dist/components/biz/business/header-search/header-avatar-logo-search-icon/client.mjs +1 -1
- package/dist/components/biz/business/header-search/header-logo-search/client.mjs +1 -1
- package/dist/components/biz/business/header-search/header-search/client.mjs +1 -1
- package/dist/components/biz/business/header-search/shared/avatar.mjs +1 -1
- package/dist/components/biz/business/header-search/shared/header-action.mjs +2 -0
- package/dist/components/biz/business/header-search/shared/header-search-icon.mjs +2 -0
- package/dist/components/biz/business/header-search/shared/header-shell.mjs +2 -0
- package/dist/components/biz/business/header-search/shared/logo.mjs +1 -1
- package/dist/components/biz/business/header-search/shared/search.mjs +1 -1
- package/dist/components/biz/business/home-recommend/home-recommend-grid/client.mjs +1 -1
- package/dist/components/biz/business/home-recommend/home-recommend-grid/inspector-schema.d.mts +16 -4
- package/dist/components/biz/business/home-recommend/home-recommend-grid/inspector-schema.mjs +1 -1
- package/dist/components/biz/business/home-recommend/home-recommend-grid/material.d.mts +14 -2
- package/dist/components/biz/business/home-recommend/home-recommend-grid/server.mjs +1 -1
- package/dist/components/biz/business/home-recommend/home-recommend-waterfall/client.mjs +1 -1
- package/dist/components/biz/business/home-recommend/home-recommend-waterfall/inspector-schema.d.mts +16 -4
- package/dist/components/biz/business/home-recommend/home-recommend-waterfall/inspector-schema.mjs +1 -1
- package/dist/components/biz/business/home-recommend/home-recommend-waterfall/material.d.mts +14 -2
- package/dist/components/biz/business/home-recommend/home-recommend-waterfall/server.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-default-config.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-preview.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-runtime-props.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-server-data.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-smart-layout.mjs +2 -0
- package/dist/components/biz/business/hot-recommend/client.d.mts +17 -0
- package/dist/components/biz/business/hot-recommend/client.mjs +2 -0
- package/dist/components/biz/business/hot-recommend/index.d.mts +5 -0
- package/dist/components/biz/business/hot-recommend/material.d.mts +25 -0
- package/dist/components/biz/business/hot-recommend/material.mjs +2 -0
- package/dist/components/biz/business/hot-recommend/schema.d.mts +24 -0
- package/dist/components/biz/business/hot-recommend/schema.mjs +2 -0
- package/dist/components/biz/business/hot-recommend/server.d.mts +11 -0
- package/dist/components/biz/business/hot-recommend/server.mjs +2 -0
- package/dist/components/biz/business/image-text-recommend/client.d.mts +1 -1
- package/dist/components/biz/business/image-text-recommend/client.mjs +1 -1
- package/dist/components/biz/business/image-text-recommend/material.d.mts +7 -7
- package/dist/components/biz/business/image-text-recommend/schema.d.mts +30 -25
- package/dist/components/biz/business/image-text-recommend/schema.mjs +1 -1
- package/dist/components/biz/business/image-text-recommend/server.mjs +1 -1
- package/dist/components/biz/business/image-text-recommend/shared/query.mjs +1 -1
- package/dist/components/biz/business/index.d.mts +6 -1
- package/dist/components/biz/business/large-feature-grid/card-item.mjs +1 -1
- package/dist/components/biz/business/large-feature-grid/client.mjs +1 -1
- package/dist/components/biz/business/marquee/client.mjs +1 -1
- package/dist/components/biz/business/marquee/material.d.mts +5 -6
- package/dist/components/biz/business/marquee/schema.d.mts +5 -6
- package/dist/components/biz/business/marquee/schema.mjs +1 -1
- package/dist/components/biz/business/nav-bar/variants/basic-nav-bar/runtime/client.mjs +1 -1
- package/dist/components/biz/business/profile/index.d.mts +1 -1
- package/dist/components/biz/business/profile/profile-header/client.d.mts +2 -1
- package/dist/components/biz/business/profile/profile-header/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/index.d.mts +1 -1
- package/dist/components/biz/business/profile/profile-header/user-profile-avatar.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/user-profile-cover-background.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/empty-state.mjs +2 -0
- package/dist/components/biz/business/profile/profile-main/shell.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/video-waterfall.mjs +2 -0
- package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.d.mts +5 -1
- package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/utils.mjs +1 -1
- package/dist/components/biz/business/ranking-recommend/client.d.mts +17 -0
- package/dist/components/biz/business/ranking-recommend/client.mjs +70 -0
- package/dist/components/biz/business/ranking-recommend/material.d.mts +35 -0
- package/dist/components/biz/business/ranking-recommend/material.mjs +2 -0
- package/dist/components/biz/business/ranking-recommend/schema.d.mts +35 -0
- package/dist/components/biz/business/ranking-recommend/schema.mjs +2 -0
- package/dist/components/biz/business/ranking-recommend/server.d.mts +11 -0
- package/dist/components/biz/business/ranking-recommend/server.mjs +2 -0
- package/dist/components/biz/business/ranking-recommend/shared/query.mjs +2 -0
- package/dist/components/biz/business/ranking-recommend/shared.d.mts +15 -0
- package/dist/components/biz/business/ranking-recommend/shared.mjs +2 -0
- package/dist/components/biz/business/search-history/client.mjs +1 -1
- package/dist/components/biz/business/search-history/schema.mjs +1 -1
- package/dist/components/biz/business/search-input/client.mjs +1 -1
- package/dist/components/biz/business/shortcut-grid/client.mjs +1 -1
- package/dist/components/biz/business/tab-bar/client.mjs +1 -1
- package/dist/components/biz/business/text-recommend/client.mjs +1 -1
- package/dist/components/biz/business/text-recommend/material.d.mts +1 -0
- package/dist/components/biz/business/text-recommend/schema.d.mts +1 -0
- package/dist/components/biz/business/text-recommend/schema.mjs +1 -1
- package/dist/components/common/collection-popup/create-collection-sheet.d.mts +41 -0
- package/dist/components/common/collection-popup/create-collection-sheet.mjs +2 -0
- package/dist/components/common/collection-popup/index.d.mts +1 -0
- package/dist/components/common/collection-popup/index.mjs +1 -1
- package/dist/components/common/icons/setting.mjs +1 -1
- package/dist/components/common/list/collection-list/collection-list-item.d.mts +8 -0
- package/dist/components/common/list/collection-list/collection-list-item.mjs +1 -1
- package/dist/components/common/list/collection-list/collection-list.d.mts +6 -0
- package/dist/components/common/list/collection-list/collection-list.mjs +1 -1
- package/dist/components/common/list/collection-list/collection-select-icon.mjs +2 -0
- package/dist/components/common/list/waterfall-recommend/index.d.mts +2 -0
- package/dist/components/common/list/waterfall-recommend/waterfall-recommend.d.mts +116 -0
- package/dist/components/common/list/waterfall-recommend/waterfall-recommend.mjs +2 -0
- package/dist/components/common/series-episodes/index.d.mts +3 -1
- package/dist/components/common/series-episodes/index.mjs +1 -1
- package/dist/components/common/tab-bar/index.mjs +1 -1
- package/dist/components/pages/collection-detail/_components/collection-detail-video-card.mjs +2 -0
- package/dist/components/pages/collection-detail/detail.mjs +1 -1
- package/dist/components/pages/edit/page.mjs +1 -1
- package/dist/components/pages/feedback/_components/feedback-form.mjs +1 -1
- package/dist/components/pages/home/client.mjs +1 -1
- package/dist/components/pages/login/auth-page-styles.mjs +6 -0
- package/dist/components/pages/login/forgot.mjs +1 -1
- package/dist/components/pages/login/login-client.mjs +1 -1
- package/dist/components/pages/login/register.mjs +1 -1
- package/dist/components/pages/login/verify.mjs +1 -4
- package/dist/components/pages/publish/components/collection.mjs +1 -1
- package/dist/components/pages/search/page-client.mjs +1 -1
- package/dist/components/pages/search/search-result/index.mjs +1 -1
- package/dist/components/pages/search/search-result/search-all.mjs +1 -1
- package/dist/components/pages/search/search-result/search-user.mjs +1 -1
- package/dist/components/pages/search/search-result/search-video-info.mjs +1 -1
- package/dist/components/pages/search/search-result/shared.mjs +2 -0
- package/dist/components/pages/search/top-header.mjs +1 -1
- package/dist/components/pages/search-result/page-client.mjs +1 -1
- package/dist/components/pages/search-result/search-all.mjs +1 -1
- package/dist/components/pages/search-result/search-empty.mjs +2 -0
- package/dist/components/pages/search-result/search-tab.mjs +1 -1
- package/dist/components/pages/search-result/search-user.mjs +1 -1
- package/dist/components/pages/search-result/search-video-info.mjs +2 -0
- package/dist/components/pages/search-result/shared.mjs +2 -0
- package/dist/components/pages/search-result/top-header.mjs +2 -0
- package/dist/components/pages/settings/_components/reset-password-drawer.mjs +1 -4
- package/dist/components/pages/settings/_components/settings.mjs +1 -1
- package/dist/components/pages/user-follow/_components/follow-no-login.mjs +1 -1
- package/dist/components/pages/video-list/video-list-client.mjs +1 -1
- package/dist/components/pages/video-list/video-list-recommend-item.mjs +2 -0
- package/dist/components/pages/video-list/video-list-skeleton.d.mts +2 -3
- package/dist/components/pages/video-list/video-list-skeleton.mjs +1 -1
- package/dist/components/ui/badge.d.mts +1 -1
- package/dist/components/ui/box.d.mts +1 -1
- package/dist/components/ui/button.d.mts +2 -2
- package/dist/components/ui/empty.d.mts +1 -1
- package/dist/components/ui/image.d.mts +4 -4
- package/dist/components/ui/input-group.d.mts +1 -1
- package/dist/components/ui/item.d.mts +2 -2
- package/dist/i18n/locales/en.mjs +2 -2
- package/dist/i18n/locales/zh-CN.mjs +2 -2
- package/dist/materials.d.mts +3 -1
- package/dist/materials.mjs +1 -1
- package/dist/store/modules/user-store.d.mts +1 -1
- package/dist/store/modules/user-store.mjs +1 -1
- package/dist/theme-tokens.d.mts +9 -0
- package/dist/theme-tokens.mjs +2 -0
- package/dist/types.d.mts +32 -0
- package/dist/utils/browser-fingerprint.d.mts +13 -0
- package/dist/utils/browser-fingerprint.mjs +2 -0
- package/dist/utils/device-id.d.mts +2 -2
- package/dist/utils/device-id.mjs +1 -1
- package/dist/utils/email-validator.d.mts +8 -0
- package/dist/utils/email-validator.mjs +2 -0
- package/dist/utils/helper.d.mts +1 -1
- package/dist/utils/helper.mjs +1 -1
- package/dist/utils/http.mjs +1 -1
- package/dist/utils/request-user-id.d.mts +12 -0
- package/dist/utils/request-user-id.mjs +2 -0
- package/dist/utils.d.mts +4 -1
- package/dist/utils.mjs +1 -1
- package/package.json +8 -2
- package/theme.css +172 -59
- package/dist/assets/icons/detail/collect_nor.mjs +0 -2
- package/dist/assets/icons/detail/collect_sel.mjs +0 -2
- package/dist/assets/icons/detail/share.mjs +0 -2
- package/dist/assets/icons/marquee-enter.mjs +0 -2
- package/dist/assets/icons/right_arrow.mjs +0 -2
- package/dist/assets/icons/search/avatar.mjs +0 -2
- package/dist/assets/icons/search/video.mjs +0 -2
- package/dist/assets/images/marquee.mjs +0 -2
- package/dist/components/biz/business/detail/shared/detail-introduction.mjs +0 -2
- package/dist/components/biz/business/marquee/marquee.module.mjs +0 -28
- package/dist/components/common/collection-popup/collection-create-modal.mjs +0 -2
- package/dist/components/common/skeleton/search-video-card-skeleton.mjs +0 -2
- package/dist/components/pages/search/search-utils.mjs +0 -2
- package/dist/components/pages/search-result/search-result-skeleton.mjs +0 -2
- package/dist/components/pages/search-result/search-video.mjs +0 -2
- package/dist/components/pages/video-list/video-list-item.mjs +0 -2
|
@@ -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(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:[v(`label`,{className:`text-sm text-[var(--color-text-dimmed)]`,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,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{
|
|
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
|
|
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
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{RightArrowIcon as r}from"../../icons/right-arrow.mjs";import{
|
|
2
|
+
"use client";import{Image as e}from"../../../ui/image.mjs";import{Box as t}from"../../../ui/box.mjs";import{Text as n}from"../../../ui/text.mjs";import{RightArrowIcon as r}from"../../icons/right-arrow.mjs";import{CollectionSelectIcon as i,CollectionSelectedIcon as a}from"./collection-select-icon.mjs";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";import{useTranslations as l}from"next-intl";import u from"next/link";const d=[];function f({size:e=12}){return s(`svg`,{width:e,height:e,viewBox:`0 0 24 24`,fill:`currentColor`,children:s(`path`,{d:`M8 5v14l11-7z`})})}function p(e){if(!e)return``;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}:${r.toString().padStart(2,`0`)}`}function m(m){let h=l(`components.common.list.collectionList`),{id:g,title:_,contentCount:v,contents:y=d,isDefaultCollection:b=!1,isEditMode:x=!1,isSelected:S=!1,onToggleSelection:C}=m,w=y.slice(0,3),T=!!b,E=x&&typeof C==`function`;function D(){C?.(g)}function O(r,i){if(r.isPlaceholder)return s(t,{className:`h-[130px] w-full rounded-[8px] bg-[var(--color-surface-white10)]`},r.id??`${_}-${i}`);let a=c(t,{className:`relative h-full w-full overflow-hidden rounded-[8px] bg-gray-100`,children:[s(e,{src:r.coverImage||`/empty/default-cover.png`,alt:r.title||_,fill:!0,className:`object-cover`}),r.isVideo&&c(o,{children:[s(t,{className:`absolute inset-0 flex items-center justify-center bg-black/20`,children:s(t,{className:`flex h-6 w-6 items-center justify-center rounded-full bg-[var(--color-text-white80)]`,children:s(f,{size:12})})}),r.isMovie&&s(t,{className:`absolute bottom-1 left-1 rounded-xs bg-[var(--color-surface-mask-black60)] px-1 text-[10px] text-text1`,children:h(`collectionListItem.movieLabel`)}),r.videoDuration&&s(t,{className:`absolute bottom-1 right-1 rounded-xs bg-[var(--color-surface-mask-black60)] px-1 text-[10px] text-text1`,children:p(r.videoDuration)})]}),s(t,{className:`pointer-events-none absolute inset-x-0 bottom-0 h-[58px] rounded-b-[8px] bg-[image:var(--gradient-card-mask-strong)]`}),s(n,{className:`absolute bottom-3 left-2 right-2 line-clamp-2 text-[12px] leading-[16px] text-[var(--color-text-white80)]`,dangerouslySetInnerHTML:{__html:r.title||``}})]});return E?s(`button`,{type:`button`,className:`block h-[130px] w-[103px] shrink-0 overflow-hidden rounded-[8px] bg-[rgba(255,255,255,0.05)]`,onClick:D,"aria-pressed":S,children:a},r.id??`${_}-${i}`):s(u,{href:`/${r.contentType===1?`video`:`post`}/${r.id}`,className:`block h-[130px] w-full shrink-0 overflow-hidden rounded-[8px] bg-[rgba(255,255,255,0.05)]`,children:a},r.id??`${_}-${i}`)}return c(t,{className:`h-[200px] rounded-[8px] bg-[rgba(255,255,255,0.05)] p-4`,children:[c(t,{className:`mb-4 flex items-center justify-between gap-2`,children:[E?c(`button`,{type:`button`,className:`flex min-w-0 items-center gap-1${T?` opacity-50`:``}`,onClick:D,"aria-pressed":T?!1:S,"aria-disabled":T,children:[s(!T&&S?a:i,{}),s(n,{className:`line-clamp-1 text-[16px] font-normal leading-[22px] text-[var(--color-text-primary)]`,children:_})]}):s(n,{className:`line-clamp-1 text-[16px] font-normal leading-[22px] text-[var(--color-text-primary)]`,children:_}),E?c(t,{className:`flex shrink-0 items-center text-[var(--color-text-tertiary)]`,children:[c(n,{className:`text-[14px] leading-[20px] text-[var(--color-text-tertiary)]`,children:[v,h(`collectionListItem.contentCountSuffix`)]}),s(t,{className:`flex size-6 items-center justify-center`,children:s(r,{className:`h-4 w-4 text-[var(--color-text-tertiary)]`})})]}):c(u,{href:`/collection/${g}`,className:`flex shrink-0 items-center text-[var(--color-text-tertiary)]`,children:[c(n,{className:`text-[14px] leading-[20px] text-[var(--color-text-tertiary)]`,children:[v,h(`collectionListItem.contentCountSuffix`)]}),s(t,{className:`flex size-6 items-center justify-center`,children:s(r,{className:`h-4 w-4 text-[var(--color-text-tertiary)]`})})]})]}),s(t,{className:`grid h-[130px] w-full grid-cols-3 gap-2`,children:w.map(O)})]})}export{m as CollectionListItem};
|
|
@@ -14,6 +14,12 @@ interface CollectionListProps {
|
|
|
14
14
|
loadMore?: () => Promise<void>;
|
|
15
15
|
/** 空状态文案。 */
|
|
16
16
|
emptyText?: string;
|
|
17
|
+
/** 是否处于编辑态。 */
|
|
18
|
+
isEditMode?: boolean;
|
|
19
|
+
/** 当前已选中的合集 ID 集合。 */
|
|
20
|
+
selectedIds?: Set<string>;
|
|
21
|
+
/** 切换合集选中态。 */
|
|
22
|
+
onToggleSelection?: (id: string) => void;
|
|
17
23
|
}
|
|
18
24
|
declare function CollectionList(props: CollectionListProps): react_jsx_runtime0.JSX.Element;
|
|
19
25
|
//#endregion
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{List as e}from"../../../ui/list.mjs";import{CollectionListItem as t}from"./collection-list-item.mjs";import{jsx as n}from"react/jsx-runtime";function r(r){let{list:i,loading:a,hasMore:o=!1,loadMore:s,emptyText:c
|
|
2
|
+
"use client";import{List as e}from"../../../ui/list.mjs";import{CollectionListItem as t}from"./collection-list-item.mjs";import{jsx as n}from"react/jsx-runtime";function r(r){let{list:i,loading:a,hasMore:o=!1,loadMore:s,emptyText:c=`暂无合集`,isEditMode:l=!1,selectedIds:u,onToggleSelection:d}=r;return n(e,{loading:a,loadMore:s,hasMore:o,empty:`no-content`,emptyText:c,className:`!bg-transparent flex flex-col gap-4`,children:i.map(e=>n(t,{...e,isEditMode:l,isSelected:u?.has(e.id)??!1,onToggleSelection:d},e.id))})}export{r as CollectionList};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";function n(){return e(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,children:e(`circle`,{cx:`12`,cy:`12`,r:`10`,fill:`var(--color-neutral-white)`,fillOpacity:`0.3`,stroke:`var(--color-neutral-white)`,strokeOpacity:`0.7`,strokeWidth:`2`})})}function r(){return t(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,children:[e(`circle`,{cx:`12`,cy:`12`,r:`10`,fill:`var(--color-brand-tag-gradient-start)`,stroke:`var(--color-brand-tag-gradient-start)`,strokeWidth:`2`}),e(`path`,{d:`M16.2929 8.29289C16.6834 7.90237 17.3164 7.90237 17.707 8.29289C18.0975 8.68342 18.0975 9.31643 17.707 9.70696L11.707 15.707C11.3164 16.0975 10.6834 16.0975 10.2929 15.707L7.29289 12.707C6.90237 12.3164 6.90237 11.6834 7.29289 11.2929C7.68342 10.9024 8.31643 10.9024 8.70696 11.2929L10.9999 13.5859L16.2929 8.29289Z`,fill:`var(--color-neutral-white)`})]})}export{n as CollectionSelectIcon,r as CollectionSelectedIcon};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
|
+
|
|
5
|
+
//#region components/common/list/waterfall-recommend/waterfall-recommend.d.ts
|
|
6
|
+
type WaterfallRecommendCardKind = 'tall' | 'short';
|
|
7
|
+
type WaterfallRecommendColumnName = 'left' | 'right';
|
|
8
|
+
/**
|
|
9
|
+
* 瀑布流卡片纯 UI 数据。
|
|
10
|
+
* 外部负责把业务数据组织成这个结构后传入。
|
|
11
|
+
*/
|
|
12
|
+
interface WaterfallRecommendItem {
|
|
13
|
+
/** 唯一 key。 */
|
|
14
|
+
key: string;
|
|
15
|
+
/** 原始序号,便于外部做曝光/分页触发。 */
|
|
16
|
+
sourceIndex: number;
|
|
17
|
+
/** 卡片跳转链接。 */
|
|
18
|
+
href: string;
|
|
19
|
+
/** 卡片高度类型。 */
|
|
20
|
+
cardKind: WaterfallRecommendCardKind;
|
|
21
|
+
/** 封面地址。 */
|
|
22
|
+
coverUrl?: string;
|
|
23
|
+
/** 标题。 */
|
|
24
|
+
title: string;
|
|
25
|
+
/** 左上角角标。 */
|
|
26
|
+
badgeImageUrl?: string;
|
|
27
|
+
/** 左上角文字标签(如"独播")。 */
|
|
28
|
+
badgeText?: string;
|
|
29
|
+
/** 右上角集数文字(如"24集全")。 */
|
|
30
|
+
episodeText?: string;
|
|
31
|
+
/** 标题下第一行辅助文案。 */
|
|
32
|
+
metaPrimaryText?: string;
|
|
33
|
+
/** 热度文案。 */
|
|
34
|
+
heatText?: string;
|
|
35
|
+
/** 评分,0-10。 */
|
|
36
|
+
score?: number;
|
|
37
|
+
/**
|
|
38
|
+
* 选择模式下的业务 ID(如视频 id)。
|
|
39
|
+
* 未设置时该卡片在选择模式下不可切换。
|
|
40
|
+
*/
|
|
41
|
+
selectionId?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 瀑布流左右列数据。
|
|
45
|
+
* 外部负责完成分列后传入。
|
|
46
|
+
*/
|
|
47
|
+
interface WaterfallRecommendColumns {
|
|
48
|
+
left: WaterfallRecommendItem[];
|
|
49
|
+
right: WaterfallRecommendItem[];
|
|
50
|
+
}
|
|
51
|
+
interface WaterfallRecommendProps {
|
|
52
|
+
/** 区块标题。 */
|
|
53
|
+
title: string;
|
|
54
|
+
/** 右上角“更多”链接。 */
|
|
55
|
+
moreHref?: string;
|
|
56
|
+
/** 右上角“更多”点击事件。 */
|
|
57
|
+
onMoreClick?: () => void;
|
|
58
|
+
/** 右上角“更多”图标。 */
|
|
59
|
+
moreIcon?: ReactNode;
|
|
60
|
+
/** 区块数据。 */
|
|
61
|
+
columns: WaterfallRecommendColumns;
|
|
62
|
+
/** 外层区块样式类。 */
|
|
63
|
+
sectionClassName?: string;
|
|
64
|
+
/** 标题行样式类。 */
|
|
65
|
+
headerClassName?: string;
|
|
66
|
+
/** 标题样式类。 */
|
|
67
|
+
titleClassName?: string;
|
|
68
|
+
/** 更多入口样式类。 */
|
|
69
|
+
moreLinkClassName?: string;
|
|
70
|
+
/** 内容区样式类。 */
|
|
71
|
+
containerClassName?: string;
|
|
72
|
+
/** 容器内覆盖层。 */
|
|
73
|
+
overlay?: ReactNode;
|
|
74
|
+
/** 底部附加内容。 */
|
|
75
|
+
footer?: ReactNode;
|
|
76
|
+
/**
|
|
77
|
+
* 外部注入 item ref,用于分页触发、首行测量等逻辑。
|
|
78
|
+
*/
|
|
79
|
+
getItemRef?: (params: {
|
|
80
|
+
item: WaterfallRecommendItem;
|
|
81
|
+
column: WaterfallRecommendColumnName;
|
|
82
|
+
columnIndex: number;
|
|
83
|
+
}) => ((node: HTMLDivElement | null) => void) | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* 是否处于选择模式(默认 false,不影响既有用法)。
|
|
86
|
+
* 为 true 时卡片不跳转,展示与收藏夹一致的选择圈,并隐藏角标/标题等头部信息区。
|
|
87
|
+
*/
|
|
88
|
+
selectionMode?: boolean;
|
|
89
|
+
/** 已选中的业务 ID 集合。 */
|
|
90
|
+
selectedIds?: Set<string>;
|
|
91
|
+
/** 切换某项选中状态。 */
|
|
92
|
+
onToggleSelection?: (id: string) => void;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 纯 UI 瀑布流组件。
|
|
96
|
+
*/
|
|
97
|
+
declare function WaterfallRecommend({
|
|
98
|
+
title,
|
|
99
|
+
moreHref,
|
|
100
|
+
onMoreClick,
|
|
101
|
+
moreIcon,
|
|
102
|
+
columns,
|
|
103
|
+
sectionClassName,
|
|
104
|
+
headerClassName,
|
|
105
|
+
titleClassName,
|
|
106
|
+
moreLinkClassName,
|
|
107
|
+
containerClassName,
|
|
108
|
+
overlay,
|
|
109
|
+
footer,
|
|
110
|
+
getItemRef,
|
|
111
|
+
selectionMode,
|
|
112
|
+
selectedIds,
|
|
113
|
+
onToggleSelection
|
|
114
|
+
}: WaterfallRecommendProps): react_jsx_runtime0.JSX.Element;
|
|
115
|
+
//#endregion
|
|
116
|
+
export { WaterfallRecommend, WaterfallRecommendCardKind, WaterfallRecommendColumnName, WaterfallRecommendColumns, WaterfallRecommendItem, WaterfallRecommendProps };
|
|
@@ -0,0 +1,2 @@
|
|
|
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{CollectionSelectIcon as i,CollectionSelectedIcon as a}from"../collection-list/collection-select-icon.mjs";import{jsx as o,jsxs as s}from"react/jsx-runtime";const c={backgroundImage:`var(--gradient-card-mask-strong)`},l={color:`var(--color-brand-rating)`};function u({title:e,moreHref:i,onMoreClick:a,moreIcon:c,columns:l,sectionClassName:u=`w-full`,headerClassName:f=`mb-[16px] flex items-center justify-between px-[16px]`,titleClassName:p=`flex-1 min-w-0 text-[18px] leading-[24px] font-medium line-clamp-1 text-text2`,moreLinkClassName:m=`ml-[8px] flex size-[24px] shrink-0 items-center justify-center opacity-50`,containerClassName:h=`relative flex w-full gap-[15px] px-[16px]`,overlay:g,footer:_,getItemRef:v,selectionMode:y=!1,selectedIds:b,onToggleSelection:x}){return s(t,{className:u,children:[s(t,{className:f,children:[o(n,{className:p,children:e}),c&&i&&o(r,{href:i,"aria-label":`更多`,className:m,children:c}),c&&!i&&a&&o(`button`,{type:`button`,"aria-label":`更多`,className:m,onClick:a,children:c})]}),s(t,{className:h,children:[o(t,{className:`flex-1 min-w-0 flex flex-col`,children:l.left.map((e,t)=>o(`div`,{ref:v?.({item:e,column:`left`,columnIndex:t}),children:o(d,{item:e,selectionMode:y,selectedIds:b,onToggleSelection:x})},e.key))}),o(t,{className:`flex-1 min-w-0 flex flex-col`,children:l.right.map((e,t)=>o(`div`,{ref:v?.({item:e,column:`right`,columnIndex:t}),children:o(d,{item:e,selectionMode:y,selectedIds:b,onToggleSelection:x})},e.key))}),g]}),_]})}function d({item:l,selectionMode:u=!1,selectedIds:d,onToggleSelection:m}){let h=l.cardKind===`short`?120:218,g=!!l.metaPrimaryText||!!l.heatText,_=l.cardKind===`short`?`absolute inset-x-0 bottom-0 z-10 flex flex-col justify-end px-[10px] pb-[14px]`:`absolute inset-x-0 bottom-0 z-10 flex flex-col justify-end px-[9px] pb-[14px]`,v=l.selectionId??``,y=!!(v&&d?.has(v));function b(){!u||!v||m?.(v)}let x=s(t,{className:`relative w-full overflow-hidden rounded-[8px] bg-[#18111f]`,style:{height:`${h}px`},children:[l.coverUrl&&o(e,{src:l.coverUrl,alt:l.title||`推荐封面`,fill:!0,objectFit:`cover`,className:`object-cover`}),o(t,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:c,"aria-hidden":!0}),u&&o(t,{className:`pointer-events-none absolute left-[8px] top-[8px] z-20`,children:o(y?a:i,{})}),!u&&s(t,{className:`absolute left-[8px] right-[8px] top-[8px] z-10 flex items-center justify-between`,children:[s(t,{className:`flex items-center`,children:[l.badgeImageUrl&&o(f,{url:l.badgeImageUrl}),!l.badgeImageUrl&&l.badgeText&&o(t,{className:`flex items-center justify-center rounded-[4px] px-[4px] py-[2px]`,style:{backgroundImage:`linear-gradient(90deg, #CA3FE9 0%, #9756E3 100%)`},children:o(n,{className:`text-[10px] font-semibold leading-[14px] text-white`,children:l.badgeText})})]}),l.episodeText&&o(n,{className:`text-[14px] leading-[18px] text-white`,children:l.episodeText})]}),!u&&o(t,{className:_,children:s(t,{className:`flex flex-col gap-[4px]`,children:[s(t,{className:`flex min-w-0 flex-col gap-[2px]`,children:[o(n,{as:`h3`,className:`line-clamp-1 text-[14px] leading-[20px] font-medium text-text1`,children:l.title}),g&&s(t,{className:`flex min-w-0 items-center gap-[10px] text-[14px] leading-[20px] font-normal text-text3`,children:[l.metaPrimaryText&&o(n,{as:`span`,className:`min-w-0 truncate text-[14px] leading-[20px] font-normal text-text3`,children:l.metaPrimaryText}),l.heatText&&o(n,{as:`span`,className:`shrink-0 text-[14px] leading-[20px] font-normal text-text3`,children:l.heatText})]})]}),l.score!==void 0&&o(p,{score:l.score})]})})]});return u?o(`button`,{type:`button`,className:`mb-[16px] block w-full cursor-pointer border-0 bg-transparent p-0 text-left`,onClick:b,"aria-pressed":y,disabled:!v,children:x}):o(r,{href:l.href,className:`mb-[16px] block w-full`,children:x})}function f({url:t}){return o(e,{src:t,alt:`角标`,width:96,height:18,className:`h-[18px] w-auto max-w-[96px] object-contain`})}function p({score:e}){let r=Math.max(0,Math.min(e,10)),i=Math.ceil(r/2);return s(t,{className:`flex items-center gap-[8px]`,children:[o(t,{className:`flex h-[14px] w-[86px] items-center gap-[4px]`,children:Array.from({length:5},(e,t)=>o(m,{active:t<i},`waterfall-star-${t}`))}),o(n,{as:`span`,className:`font-mono font-bold text-[12px] leading-[15px]`,style:l,children:e.toFixed(1)})]})}function m({active:e}){return o(t,{className:`size-[14px] shrink-0`,children:o(h,{className:e?``:`opacity-25`,style:l})})}function h({className:e,style:t}){return o(`svg`,{viewBox:`0 0 14 14`,fill:`currentColor`,"aria-hidden":!0,className:`size-full ${e||``}`.trim(),style:t,children:o(`path`,{d:`M7 0.75L8.775 4.348L12.75 4.926L9.875 7.728L10.554 11.686L7 9.818L3.446 11.686L4.125 7.728L1.25 4.926L5.225 4.348L7 0.75Z`})})}export{u as WaterfallRecommend};
|
|
@@ -4,6 +4,7 @@ import { CSSProperties } from "react";
|
|
|
4
4
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
5
|
|
|
6
6
|
//#region components/common/series-episodes/index.d.ts
|
|
7
|
+
declare function DetailStyleOneActiveBorderLayer(): react_jsx_runtime0.JSX.Element;
|
|
7
8
|
/**
|
|
8
9
|
* SeriesEpisodes
|
|
9
10
|
*
|
|
@@ -28,6 +29,7 @@ type SeriesEpisodesProps = {
|
|
|
28
29
|
onClose: () => void;
|
|
29
30
|
onSelectEpisode?: (episodeId: string, episodeNum: number) => void;
|
|
30
31
|
popupBodyStyle?: CSSProperties;
|
|
32
|
+
popupStylePreset?: 'default' | 'detail-style-one';
|
|
31
33
|
} | {
|
|
32
34
|
/** 详情页模式:渲染入口、横向集数条与弹层。 */mode: 'detail';
|
|
33
35
|
information: SafeInformationType;
|
|
@@ -36,4 +38,4 @@ type SeriesEpisodesProps = {
|
|
|
36
38
|
};
|
|
37
39
|
declare function SeriesEpisodes(props: SeriesEpisodesProps): react_jsx_runtime0.JSX.Element;
|
|
38
40
|
//#endregion
|
|
39
|
-
export { SeriesEpisodes, SeriesEpisodesProps };
|
|
41
|
+
export { DetailStyleOneActiveBorderLayer, SeriesEpisodes, SeriesEpisodesProps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Box as e}from"../../ui/box.mjs";import{Text as t}from"../../ui/text.mjs";import{Sheet as n,SheetContent as r,SheetHeader as i,SheetTitle as a}from"../../ui/sheet.mjs";import{Switch as o}from"../../ui/switch.mjs";import{useKeepAliveState as s}from"../keep-scroll-position/index.mjs";import c from"../../../assets/icons/close.mjs";import l from"../../../assets/icons/common/right_arrow.mjs";import u from"../../ui/popup.mjs";import{useCallback as d,useEffect as f,useMemo as p,useRef as m,useState as h}from"react";import{Fragment as 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=`funhub:detail-series-popup-query`,S=`funhub:detail-series-popup-close`;function C(e){return e.type===x&&e instanceof CustomEvent}function w(e,t,n){return(e||[]).map((e,r)=>{let i=Number.parseInt(e?.id||``,10),a=Number.isNaN(i)?r+1:i,o=e?.id||``,s=Number.isNaN(i)&&o||n(a);return{id:e?.id||`${t}-${a}`,series_num:a,title:s}})}function T(e,t,n){return(e||[]).map((e,r)=>{let i=Number(e?.id),a=Number.isNaN(i)?r+1:i,o=n(a);return{id:e?.id||`${t}-${a}`,series_num:a,title:o}})}function E(e,t,n){return e<=0?n(`singleContent`):n(t===`1`?`completedSeriesTotal`:`ongoingSeriesTotal`,{total:e})}function D(e){return e.mode===`detail`?_(k,{information:e.information,series_num:e.series_num,onEpisodeChange:e.onEpisodeChange}):_(O,{open:e.open,variant:e.variant,title:e.title,updateStatus:e.updateStatus,summaryText:e.summaryText,seriesList:e.seriesList,activeEpisodeId:e.activeEpisodeId,showEpisodeTitle:e.showEpisodeTitle,onToggleTitle:e.onToggleTitle,onClose:e.onClose,onSelectEpisode:e.onSelectEpisode,popupBodyStyle:e.popupBodyStyle})}function O({open:s,variant:l,title:d,updateStatus:g,summaryText:y,seriesList:x,activeEpisodeId:S,showEpisodeTitle:C=!1,onToggleTitle:T,onClose:D,onSelectEpisode:O,popupBodyStyle:k}){let A=b(`components.common.seriesEpisodes`),j=!!T,M=j&&C,N=m(null),P=m(null),F=p(()=>w(x,`episode`,e=>A(`episodeLabel`,{episode:e})),[x,A]),I=p(()=>{if(F.length===0)return[];let e=[];return F.forEach((t,n)=>{let r=Math.floor(n/50);e[r]||(e[r]=[]),e[r].push(t)}),e},[F]),L=p(()=>{if(!S)return 0;let e=F.findIndex(e=>e.id===S);return e<0?0:Math.floor(e/50)},[S,F]),[R,z]=h(L);f(()=>{z(L)},[L]);let B=p(()=>typeof y==`string`&&y.trim()?y:E(F.length,g,A),[F.length,y,A,g]),V=d||A(`selectorTitle`);function H(){let e=N.current;if(e){P.current&&=(window.cancelAnimationFrame(P.current),null),e.scrollTop=0;try{e.scrollTo({top:0,left:0,behavior:`auto`})}catch{}P.current=window.requestAnimationFrame(()=>{P.current=null;let e=N.current;e&&(e.scrollTop=0)})}}f(()=>{s&&H()},[s,C,R]);function U(e){T&&(T(e),H())}function W(e){O?.(e.id,e.series_num),D()}let G=M?2:5,K=I.length>1?_(`div`,{className:`shrink-0 w-full flex gap-[8px] overflow-x-auto`,children:I.map((e,t)=>{if(e.length===0)return null;let n=t===R,r=t*50+1,i=Math.min((t+1)*50,F.length);return v(`div`,{className:`shrink-0 px-[16px] py-[6px] rounded-[16px] text-[14px] transition-colors cursor-pointer relative overflow-hidden ${n?`text-theme5 bg-bg2`:`text-text2 bg-bg2`}`,onClick:()=>{z(t),H()},children:[r,`-`,i,n&&_(`div`,{className:`absolute w-full h-full top-0 left-0 opacity-20 bg-theme5`})]},`series-group-${t}`)})}):null,q=v(`div`,{className:`pb-[8px] flex justify-between`,children:[_(`span`,{className:`text-[16px] text-text1`,children:B}),j&&v(`div`,{className:`flex items-center gap-[4px]`,children:[_(o,{size:`sm`,className:`data-checked:bg-theme5 h-[20px] w-[33px]`,checked:C,onCheckedChange:e=>{U(!!e)}}),_(`button`,{type:`button`,className:`text-[16px] text-text1`,onClick:()=>{U(!C)},children:A(`episodeTitle`)})]})]}),J=_(`div`,{className:`grid w-full gap-2 ${G===2?`grid-cols-2`:`grid-cols-5`}`,children:(I[R]||[]).map((e,t)=>{let n=!!(S&&e.id===S);return _(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{W(e)},className:`flex items-center justify-center w-full h-[60px] rounded-[8px] border border-line1 border-solid text-[16px] cursor-pointer select-none transition-colors relative overflow-hidden ${n?`font-bold text-theme5 bg-line1`:`text-text1`} ${M?`h-[72px] px-[10px] text-[14px]`:``} ${t%G===0?``:`border-l-0`}`,children:M?_(`span`,{className:`leading-[22px] line-clamp-2`,children:e.title}):e.series_num},e.id)})});return l===`sheet`?_(n,{open:s,onOpenChange:e=>!e&&D(),children:v(r,{side:`bottom`,showCloseButton:!0,className:`min-h-[50vh] bg-bg1 text-text1 rounded-t-2xl border-t border-white/10`,children:[_(i,{className:`pt-3 pb-0`,children:_(a,{className:`flex items-center justify-between text-lg text-text1`,children:V})}),v(`div`,{className:`px-4 pb-2 flex flex-col gap-3`,children:[K,q]}),_(`div`,{ref:N,className:`flex-1 h-0 pt-[4px] pb-[12px] overflow-y-auto px-4`,children:J})]})}):_(u,{open:s,onOpenChange:e=>{e||D()},showCloseButton:!1,className:`border-0 bg-transparent p-0`,children:v(e,{className:`w-full flex flex-col bg-bg1 px-[12px] text-text1`,style:{height:`70vh`,...k},children:[v(e,{className:`shrink-0 flex justify-between items-center h-[48px]`,children:[_(t,{className:`text-[16px] font-bold text-text1`,children:V}),_(e,{className:`pl-[12px] h-full flex items-center`,onClick:D,children:_(c,{className:`w-[14px] h-[14px] text-text1 cursor-pointer`})})]}),v(e,{className:`flex-1 h-0 w-full pb-[12px] flex flex-col gap-3`,children:[K,q,_(e,{ref:N,className:`flex-1 h-0 pt-[4px] pb-[12px] overflow-y-auto`,children:J})]})]})})}function k({information:n,series_num:r,onEpisodeChange:i}){let a=b(`components.common`),[o,c]=s(`detail-series-popup-${n.id}`,!1),[u,w]=s(`detail-series-title-toggle-${n.id}`,!1),[E,D]=s(`detail-series-scroll-left-${n.id}`,null),[k,A]=h(r);f(()=>{A(r)},[n.id,r]),f(()=>{if(typeof window>`u`)return;let e=()=>{c(!1)};return window.addEventListener(S,e),()=>{window.removeEventListener(S,e)}},[c]),f(()=>{if(typeof window>`u`)return;let e=e=>{if(!C(e))return;let t=e.detail||{};t.open=!!t.open||!!o};return window.addEventListener(x,e),()=>{window.removeEventListener(x,e)}},[o]);let j=p(()=>T((n.links||[]).map(e=>({id:e.id,name:e.name})),n.id||`episode`,e=>a(`seriesEpisodes.episodeLabel`,{episode:e})),[n.id,n.links,a]),M=n.update_status===`1`?a(`seriesEpisodes.completedSeriesTotal`,{total:n.links.length}):a(`seriesEpisodes.ongoingSeriesUpdatedTo`,{total:n.links.length}),N=p(()=>n.links[k-1]?.id||n.links[0]?.id||``,[n.links,k]),P=m(null),F=m(null),I=m(null),L=m(!1),R=m(null),z=m(null),B=m(null),[V,H]=h(!1),U=d((e,t=`smooth`)=>{let n=P.current?.querySelector(`[data-content-id="${e}"]`);if(n&&P.current){let e=P.current,r=Math.max(0,n.offsetLeft-10);e.scrollTo({left:r,behavior:t})}},[]),W=d(()=>{z.current!==null&&(window.clearTimeout(z.current),z.current=null)},[]),G=d(()=>{B.current!==null&&(window.clearTimeout(B.current),B.current=null)},[]),K=d(()=>{R.current!==null&&(y.dismiss(R.current),R.current=null),W(),G()},[G,W]),q=d(()=>{F.current=null,I.current=null,K(),H(!1)},[K]),J=d((e,t)=>{G(),B.current=window.setTimeout(()=>{B.current=null,F.current===e&&q()},Math.max(0,t))},[G,q]);f(()=>{L.current=!1},[n.id]),f(()=>{if(L.current||!N)return;let e=window.requestAnimationFrame(()=>{let e=P.current;e&&(typeof E==`number`?e.scrollTo({left:Math.max(0,E),behavior:`auto`}):(U(N,`auto`),D(Math.max(0,Math.round(e.scrollLeft)))),L.current=!0)});return()=>{window.cancelAnimationFrame(e)}},[N,E,U,D]),f(()=>{let e=F.current;!e||e!==r||J(e,1e3)},[J,r]),f(()=>()=>{q()},[q]);let Y=d((e,t,n)=>{let r=P.current;if(!r||!e)return t;let i=r.querySelector(`[data-content-id="${e}"]`);if(!i)return t;let a=r.getBoundingClientRect();if(a.width<=0||typeof n!=`number`||(n-a.left)/a.width<.5)return t;let o=i.offsetLeft+i.offsetWidth/2,s=r.clientWidth/2,c=Math.max(0,r.scrollWidth-r.clientWidth),l=Math.min(c,Math.max(0,o-s));return r.scrollTo({left:l,behavior:`smooth`}),Math.round(l)},[]),X=d((e,t=`inline`,o,s)=>{if(e!==k){if(!n.links[e-1]){y.error(a(`seriesEpisodes.episodeNotFound`));return}if(typeof window<`u`&&window.isWebView===!0){try{A(e);let c=o||n.links[e-1]?.id||``,l=Math.max(0,Math.round(P.current?.scrollLeft||0));t===`popup`?(c&&U(c,`auto`),D(Math.max(0,Math.round(P.current?.scrollLeft||0)))):D(Y(c,l,s)),H(!0),K(),R.current=y.loading(a(`seriesEpisodes.episodeSwitching`)),F.current=e,I.current=t,z.current=window.setTimeout(()=>{F.current===e&&(A(r),q(),y.error(a(`seriesEpisodes.episodeSwitchFailed`)))},3e3),i(e)}catch(e){A(r),q(),console.error(`切换剧集失败`,e),y.error(a(`seriesEpisodes.episodeSwitchFailed`))}return}try{A(e);let c=o||n.links[e-1]?.id||``,l=Math.max(0,Math.round(P.current?.scrollLeft||0));t===`popup`?(c&&U(c,`auto`),D(Math.max(0,Math.round(P.current?.scrollLeft||0)))):D(Y(c,l,s)),H(!0),K(),R.current=y.loading(a(`seriesEpisodes.episodeSwitching`)),F.current=e,I.current=t,z.current=window.setTimeout(()=>{F.current===e&&(A(r),q(),y.error(a(`seriesEpisodes.episodeSwitchFailed`)))},8e3),i(e)}catch(e){A(r),q(),console.error(`切换剧集失败`,e),y.error(a(`seriesEpisodes.episodeSwitchFailed`))}}},[q,K,n.links,i,k,r,Y,U,D,a]),[Z,Q]=h(`70vh`),$=d(()=>{if(typeof window>`u`)return;if(window.isWebView===!0){Q(`100vh`);return}let e=document.getElementById(`selectPopupPosition`),t=window.visualViewport?.height||window.innerHeight;if(!e){Q(`70vh`);return}let n=Math.max(0,t-e.offsetTop);if(n<=0){Q(`70vh`);return}Q(`${n}px`)},[]);return f(()=>{if(!o)return;$();let e=()=>{$()};return window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[$,o]),j.length<=1?null:v(g,{children:[v(e,{className:`w-full mt-[16px] flex flex-col items-end mb-[4px]`,children:[v(e,{className:`w-fit flex items-center px-[12px] h-[28px]`,onClick:()=>c(!0),children:[_(t,{className:`text-[14px] text-text2 leading-[20px]`,children:M}),_(l,{className:`w-[11px] h-[18px] ml-[4px] text-text2`})]}),_(`div`,{ref:P,className:`w-full mt-[12px] overflow-x-auto px-[12px] flex gap-x-[8px] ${u?`h-[76px]`:`h-[60px]`} ${V?`touch-none`:``}`,children:j.map((e,n)=>_(`div`,{"data-content-id":e.id,className:`shrink-0 h-[full] px-[18px] rounded-[6px] border border-line1 flex items-center ${u?`w-[162px]`:`w-[60px] !px-[0] justify-center`} ${e.id===N?`!border-theme5 bg-line1`:``}`,onClick:t=>{X(n+1,`inline`,e.id,t.clientX)},children:_(t,{className:`text-[16px] text-text1 leading-[22px] line-clamp-2 ${e.id===N?`font-bold !text-theme5`:``}`,children:u?e.title:e.series_num})},e.id))})]}),_(O,{title:a(`seriesEpisodes.selectorTitle`),variant:`popup`,open:o,updateStatus:n.update_status,summaryText:M,seriesList:(n.links||[]).map(e=>({id:e.id,name:e.name})),activeEpisodeId:N,showEpisodeTitle:u,onToggleTitle:e=>{w(e)},onClose:()=>c(!1),onSelectEpisode:(e,t)=>{c(!1),X(t,`popup`,e)},popupBodyStyle:{height:Z}})]})}export{D as SeriesEpisodes};
|
|
2
|
+
"use client";import{Box as e}from"../../ui/box.mjs";import{Text as t}from"../../ui/text.mjs";import{Sheet as n,SheetContent as r,SheetHeader as i,SheetTitle as a}from"../../ui/sheet.mjs";import{Switch as o}from"../../ui/switch.mjs";import{useKeepAliveState as s}from"../keep-scroll-position/index.mjs";import c from"../../../assets/icons/common/right_arrow.mjs";import l from"../../ui/popup.mjs";import{useCallback as u,useEffect as d,useMemo as f,useRef as p,useState as m}from"react";import{Fragment as h,jsx as g,jsxs as _}from"react/jsx-runtime";import{toast as v}from"sonner";import{useTranslations as y}from"next-intl";const b=`funhub:detail-series-popup-query`,x=`funhub:detail-series-popup-close`;function S(e){return e.type===b&&e instanceof CustomEvent}function C({active:e}){return e?_(`svg`,{width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`shrink-0`,"aria-hidden":!0,children:[g(`circle`,{cx:`16`,cy:`12`,r:`3`,fill:`white`}),g(`path`,{d:`M8 5H16C19.866 5 23 8.13401 23 12C23 15.866 19.866 19 16 19H8C4.13401 19 1 15.866 1 12C1 8.13401 4.13401 5 8 5ZM16 15C17.6569 15 19 13.6569 19 12C19 10.3431 17.6569 9 16 9C14.3431 9 13 10.3431 13 12C13 13.6569 14.3431 15 16 15Z`,fill:`#9054E5`})]}):_(`svg`,{width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`shrink-0`,"aria-hidden":!0,children:[g(`path`,{d:`M1.5 12C1.5 8.68629 4.18629 6 7.5 6H16.5C19.8137 6 22.5 8.68629 22.5 12C22.5 15.3137 19.8137 18 16.5 18H7.5C4.18629 18 1.5 15.3137 1.5 12Z`,stroke:`currentColor`,strokeWidth:`1.5`,strokeOpacity:`0.6`}),g(`circle`,{cx:`9`,cy:`12`,r:`3`,fill:`rgba(255,255,255,0.6)`})]})}function w(){return g(`svg`,{width:`20`,height:`20`,viewBox:`0 0 20 20`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:`block h-[20px] w-[20px]`,"aria-hidden":!0,children:g(`path`,{d:`M10 8.61116L14.8611 3.75L16.25 5.13889L11.3889 10L16.25 14.8611L14.8611 16.25L10 11.3889L5.13889 16.25L3.75 14.8611L8.61111 10L3.75 5.13889L5.13889 3.75L10 8.61116Z`,fill:`currentColor`})})}function T(e,t,n){return(e||[]).map((e,r)=>{let i=Number.parseInt(e?.id||``,10),a=Number.isNaN(i)?r+1:i,o=e?.name||``,s=Number.isNaN(i)&&o||n(a);return{id:e?.id||`${t}-${a}`,series_num:a,title:s}})}function E(e,t,n){return(e||[]).map((e,r)=>{let i=Number(e?.id),a=Number.isNaN(i)?r+1:i,o=n(a);return{id:e?.id||`${t}-${a}`,series_num:a,title:o}})}function D(e,t,n){return e<=0?n(`singleContent`):n(t===`1`?`completedSeriesTotal`:`ongoingSeriesTotal`,{total:e})}function O(){return g(`span`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0 overflow-hidden rounded-[8px] p-[0.5px]`,style:{backgroundImage:`linear-gradient(180deg, #9756E3 0%, #6C43EE 100%), linear-gradient(135deg, rgba(255,30,172,0.7) 0%, rgba(108,67,238,0) 100%)`},children:g(`span`,{className:`block h-full w-full`,style:{borderRadius:`7.5px`,backgroundColor:`#000000`,backgroundImage:`linear-gradient(90deg, rgba(246,206,255,0.1) 0%, rgba(246,206,255,0.1) 100%), linear-gradient(90deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0.1) 100%)`}})})}function k(e){return e.mode===`detail`?g(j,{information:e.information,series_num:e.series_num,onEpisodeChange:e.onEpisodeChange}):g(A,{open:e.open,variant:e.variant,title:e.title,updateStatus:e.updateStatus,summaryText:e.summaryText,seriesList:e.seriesList,activeEpisodeId:e.activeEpisodeId,showEpisodeTitle:e.showEpisodeTitle,onToggleTitle:e.onToggleTitle,onClose:e.onClose,onSelectEpisode:e.onSelectEpisode,popupBodyStyle:e.popupBodyStyle,popupStylePreset:e.popupStylePreset})}function A({open:s,variant:c,title:u,updateStatus:h,summaryText:v,seriesList:b,activeEpisodeId:x,showEpisodeTitle:S=!1,onToggleTitle:E,onClose:k,onSelectEpisode:A,popupBodyStyle:j,popupStylePreset:M=`default`}){let N=y(`components.common.seriesEpisodes`),P=!!E,F=P&&S,I=c===`popup`&&M===`detail-style-one`,L=c===`popup`?20:50,R=p(null),z=p(null),B=f(()=>T(b,`episode`,e=>N(`episodeLabel`,{episode:e})),[b,N]),V=f(()=>{if(B.length===0)return[];let e=[];return B.forEach((t,n)=>{let r=Math.floor(n/L);e[r]||(e[r]=[]),e[r].push(t)}),e},[B,L]),H=f(()=>{if(!x)return 0;let e=B.findIndex(e=>e.id===x);return e<0?0:Math.floor(e/L)},[x,B,L]),[U,W]=m(H);d(()=>{W(H)},[H]);let G=f(()=>typeof v==`string`&&v.trim()?v:D(B.length,h,N),[B.length,v,N,h]),K=u||N(`selectorTitle`);function q(){let e=R.current;if(e){z.current&&=(window.cancelAnimationFrame(z.current),null),e.scrollTop=0;try{e.scrollTo({top:0,left:0,behavior:`auto`})}catch{}z.current=window.requestAnimationFrame(()=>{z.current=null;let e=R.current;e&&(e.scrollTop=0)})}}d(()=>{s&&q()},[s,S,U]);function J(e){E&&(E(e),q())}function Y(e){A?.(e.id,e.series_num),k()}let X=F?2:5,Z=V.length>1?g(`div`,{className:`shrink-0 w-full flex gap-[8px] overflow-x-auto`,children:V.map((e,t)=>{if(e.length===0)return null;let n=t===U,r=t*L+1,i=Math.min((t+1)*L,B.length);return _(`div`,{className:`shrink-0 px-[16px] py-[6px] rounded-[16px] text-[14px] transition-colors cursor-pointer relative overflow-hidden ${n?`text-theme5 bg-bg2`:`text-text2 bg-bg2`}`,onClick:()=>{W(t),q()},children:[r,`-`,i,n&&g(`div`,{className:`absolute w-full h-full top-0 left-0 opacity-20 bg-theme5`})]},`series-group-${t}`)})}):null,Q=_(`div`,{className:`pb-[8px] flex justify-between`,children:[g(`span`,{className:`text-[16px] text-text1`,children:G}),P&&_(`div`,{className:`flex items-center gap-[4px]`,children:[g(o,{size:`sm`,className:`data-checked:bg-theme5 h-[20px] w-[33px]`,checked:S,onCheckedChange:e=>{J(!!e)}}),g(`button`,{type:`button`,className:`text-[16px] text-text1`,onClick:()=>{J(!S)},children:N(`episodeTitle`)})]})]}),$=g(`div`,{className:`grid w-full gap-2 ${X===2?`grid-cols-2`:`grid-cols-5`}`,children:(V[U]||[]).map((e,t)=>{let n=!!(x&&e.id===x);return g(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Y(e)},className:`flex items-center justify-center w-full h-[60px] rounded-[8px] border border-line1 border-solid text-[16px] cursor-pointer select-none transition-colors relative overflow-hidden ${n?`font-bold text-theme5 bg-line1`:`text-text1`} ${F?`h-[72px] px-[10px] text-[14px]`:``} ${t%X===0?``:`border-l-0`}`,children:F?g(`span`,{className:`leading-[22px] line-clamp-2`,children:e.title}):e.series_num},e.id)})}),ee=V.length>1?g(`div`,{className:`flex gap-[8px] overflow-x-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden`,children:V.map((e,t)=>{if(e.length===0)return null;let n=t===U,r=t*L+1,i=Math.min((t+1)*L,B.length);return g(`button`,{type:`button`,className:`flex h-[28px] w-[72px] shrink-0 items-center justify-center rounded-[100px] px-[4px] transition-colors ${n?`bg-[linear-gradient(90deg,#9756E3_0%,#6C43EE_100%)] text-white`:`bg-white/20 text-white`}`,onClick:()=>{W(t),q()},children:_(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[20px]`,children:[r,`-`,i]})},`series-popup-group-${t}`)})}):null,te=_(`div`,{className:`flex items-center justify-between`,children:[g(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[24px] text-white/60`,children:G}),P&&_(`button`,{type:`button`,className:`flex items-center gap-[3px] text-white/60`,onClick:()=>{J(!S)},children:[g(C,{active:S}),g(`span`,{className:`font-['PingFang_SC'] text-[14px] font-normal not-italic leading-[24px] ${S?`text-[#9756E3]`:`text-white/60`}`,children:N(`episodeTitle`)})]})]}),ne=F?g(`div`,{className:`flex w-full flex-col gap-[12px]`,children:(V[U]||[]).map(e=>{let t=!!(x&&e.id===x);return _(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Y(e)},className:`relative flex w-full items-start overflow-hidden rounded-[8px] px-[16px] py-[18px] text-left transition-colors ${t?I?``:`border border-[#FF1EFF] bg-[linear-gradient(90deg,rgba(246,206,255,0.1)_0%,rgba(246,206,255,0.1)_100%),linear-gradient(90deg,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0.1)_100%)]`:`bg-white/10`}`,children:[t&&I&&g(O,{}),g(`span`,{className:`relative z-[1] line-clamp-1 font-['PingFang_SC'] text-[14px] ${t?`font-medium leading-[16px] text-[#9756E3]`:`font-normal leading-[16px] text-white/80`}`,children:e.title})]},`popup-${e.id}`)})}):g(`div`,{className:`grid w-full grid-cols-[repeat(6,52px)] justify-between gap-y-[8px]`,children:(V[U]||[]).map(e=>{let t=!!(x&&e.id===x);return _(`button`,{type:`button`,"data-episode-id":e.id,onClick:()=>{Y(e)},className:`relative flex h-[52px] w-[52px] items-center justify-center overflow-hidden rounded-[8px] transition-colors ${t?I?`text-[#9756E3]`:`border border-[#E62AFF]/90 bg-[linear-gradient(90deg,rgba(246,206,255,0.1)_0%,rgba(246,206,255,0.1)_100%),linear-gradient(90deg,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0.1)_100%)] text-[#9756E3]`:`bg-white/10 text-white/80`}`,children:[t&&I&&g(O,{}),g(`span`,{className:`relative z-[1] font-['PingFang_SC'] text-[16px] font-medium not-italic leading-[16px]`,children:e.series_num})]},`popup-${e.id}`)})});return c===`sheet`?g(n,{open:s,onOpenChange:e=>!e&&k(),children:_(r,{side:`bottom`,showCloseButton:!0,className:`min-h-[50vh] bg-bg1 text-text1 rounded-t-2xl border-t border-white/10`,children:[g(i,{className:`pt-3 pb-0`,children:g(a,{className:`flex items-center justify-between text-lg text-text1`,children:K})}),_(`div`,{className:`px-4 pb-2 flex flex-col gap-3`,children:[Z,Q]}),g(`div`,{ref:R,className:`flex-1 h-0 pt-[4px] pb-[12px] overflow-y-auto px-4`,children:$})]})}):g(l,{open:s,onOpenChange:e=>{e||k()},showCloseButton:!1,className:`!gap-0 !border-0 !bg-transparent !p-0 !shadow-none`,overlayClassName:`bg-black/50 backdrop-blur-0`,children:_(e,{className:`flex h-full w-full flex-col overflow-hidden rounded-t-[16px] bg-black text-text1`,style:{height:`70vh`,...j},children:[_(e,{className:`shrink-0 flex items-center justify-between px-[16px] pt-[32px]`,children:[g(t,{className:`font-['PingFang_SC'] text-[18px] font-medium not-italic leading-[24px] text-white`,children:K}),g(`button`,{type:`button`,"aria-label":`关闭`,className:`flex h-[24px] w-[24px] items-center justify-center text-white opacity-60`,onClick:k,children:g(`span`,{className:`flex h-[24px] w-[24px] items-center overflow-hidden p-[2px]`,children:g(w,{})})})]}),g(e,{className:`flex-1 h-0 w-full px-[16px] pb-[24px]`,children:_(e,{className:`flex h-full flex-col`,children:[ee&&g(e,{className:`mt-[16px] shrink-0`,children:ee}),g(e,{className:`mt-[16px] shrink-0`,children:te}),g(e,{ref:R,className:`flex-1 overflow-y-auto pb-[17px] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden ${F?`mt-[12px]`:`mt-[8px]`}`,children:ne})]})})]})})}function j({information:n,series_num:r,onEpisodeChange:i}){let a=y(`components.common`),[o,l]=s(`detail-series-popup-${n.id}`,!1),[C,w]=s(`detail-series-title-toggle-${n.id}`,!1),[T,D]=s(`detail-series-scroll-left-${n.id}`,null),[O,k]=m(r);d(()=>{k(r)},[n.id,r]),d(()=>{if(typeof window>`u`)return;let e=()=>{l(!1)};return window.addEventListener(x,e),()=>{window.removeEventListener(x,e)}},[l]),d(()=>{if(typeof window>`u`)return;let e=e=>{if(!S(e))return;let t=e.detail||{};t.open=!!t.open||!!o};return window.addEventListener(b,e),()=>{window.removeEventListener(b,e)}},[o]);let j=f(()=>E((n.links||[]).map(e=>({id:e.id,name:e.name})),n.id||`episode`,e=>a(`seriesEpisodes.episodeLabel`,{episode:e})),[n.id,n.links,a]),M=n.update_status===`1`?a(`seriesEpisodes.completedSeriesTotal`,{total:n.links.length}):a(`seriesEpisodes.ongoingSeriesUpdatedTo`,{total:n.links.length}),N=f(()=>n.links[O-1]?.id||n.links[0]?.id||``,[n.links,O]),P=p(null),F=p(null),I=p(null),L=p(!1),R=p(null),z=p(null),B=p(null),[V,H]=m(!1),U=u((e,t=`smooth`)=>{let n=P.current?.querySelector(`[data-content-id="${e}"]`);if(n&&P.current){let e=P.current,r=Math.max(0,n.offsetLeft-10);e.scrollTo({left:r,behavior:t})}},[]),W=u(()=>{z.current!==null&&(window.clearTimeout(z.current),z.current=null)},[]),G=u(()=>{B.current!==null&&(window.clearTimeout(B.current),B.current=null)},[]),K=u(()=>{R.current!==null&&(v.dismiss(R.current),R.current=null),W(),G()},[G,W]),q=u(()=>{F.current=null,I.current=null,K(),H(!1)},[K]),J=u((e,t)=>{G(),B.current=window.setTimeout(()=>{B.current=null,F.current===e&&q()},Math.max(0,t))},[G,q]);d(()=>{L.current=!1},[n.id]),d(()=>{if(L.current||!N)return;let e=window.requestAnimationFrame(()=>{let e=P.current;e&&(typeof T==`number`?e.scrollTo({left:Math.max(0,T),behavior:`auto`}):(U(N,`auto`),D(Math.max(0,Math.round(e.scrollLeft)))),L.current=!0)});return()=>{window.cancelAnimationFrame(e)}},[N,T,U,D]),d(()=>{let e=F.current;!e||e!==r||J(e,1e3)},[J,r]),d(()=>()=>{q()},[q]);let Y=u((e,t,n)=>{let r=P.current;if(!r||!e)return t;let i=r.querySelector(`[data-content-id="${e}"]`);if(!i)return t;let a=r.getBoundingClientRect();if(a.width<=0||typeof n!=`number`||(n-a.left)/a.width<.5)return t;let o=i.offsetLeft+i.offsetWidth/2,s=r.clientWidth/2,c=Math.max(0,r.scrollWidth-r.clientWidth),l=Math.min(c,Math.max(0,o-s));return r.scrollTo({left:l,behavior:`smooth`}),Math.round(l)},[]),X=u((e,t=`inline`,o,s)=>{if(e!==O){if(!n.links[e-1]){v.error(a(`seriesEpisodes.episodeNotFound`));return}if(typeof window<`u`&&window.isWebView===!0){try{k(e);let c=o||n.links[e-1]?.id||``,l=Math.max(0,Math.round(P.current?.scrollLeft||0));t===`popup`?(c&&U(c,`auto`),D(Math.max(0,Math.round(P.current?.scrollLeft||0)))):D(Y(c,l,s)),H(!0),K(),R.current=v.loading(a(`seriesEpisodes.episodeSwitching`)),F.current=e,I.current=t,z.current=window.setTimeout(()=>{F.current===e&&(k(r),q(),v.error(a(`seriesEpisodes.episodeSwitchFailed`)))},3e3),i(e)}catch(e){k(r),q(),console.error(`切换剧集失败`,e),v.error(a(`seriesEpisodes.episodeSwitchFailed`))}return}try{k(e);let c=o||n.links[e-1]?.id||``,l=Math.max(0,Math.round(P.current?.scrollLeft||0));t===`popup`?(c&&U(c,`auto`),D(Math.max(0,Math.round(P.current?.scrollLeft||0)))):D(Y(c,l,s)),H(!0),K(),R.current=v.loading(a(`seriesEpisodes.episodeSwitching`)),F.current=e,I.current=t,z.current=window.setTimeout(()=>{F.current===e&&(k(r),q(),v.error(a(`seriesEpisodes.episodeSwitchFailed`)))},8e3),i(e)}catch(e){k(r),q(),console.error(`切换剧集失败`,e),v.error(a(`seriesEpisodes.episodeSwitchFailed`))}}},[q,K,n.links,i,O,r,Y,U,D,a]),[Z,Q]=m(`70vh`),$=u(()=>{if(typeof window>`u`)return;if(window.isWebView===!0){Q(`100vh`);return}let e=document.getElementById(`selectPopupPosition`),t=window.visualViewport?.height||window.innerHeight;if(!e){Q(`70vh`);return}let n=Math.max(0,t-e.offsetTop);if(n<=0){Q(`70vh`);return}Q(`${n}px`)},[]);return d(()=>{if(!o)return;$();let e=()=>{$()};return window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[$,o]),j.length<=1?null:_(h,{children:[_(e,{className:`w-full mt-[16px] flex flex-col items-end mb-[4px]`,children:[_(e,{className:`w-fit flex items-center px-[12px] h-[28px]`,onClick:()=>l(!0),children:[g(t,{className:`text-[14px] text-text2 leading-[20px]`,children:M}),g(c,{className:`w-[11px] h-[18px] ml-[4px] text-text2`})]}),g(`div`,{ref:P,className:`w-full mt-[12px] overflow-x-auto px-[12px] flex gap-x-[8px] ${C?`h-[76px]`:`h-[60px]`} ${V?`touch-none`:``}`,children:j.map((e,n)=>g(`div`,{"data-content-id":e.id,className:`shrink-0 h-[full] px-[18px] rounded-[6px] border border-line1 flex items-center ${C?`w-[162px]`:`w-[60px] !px-[0] justify-center`} ${e.id===N?`!border-theme5 bg-line1`:``}`,onClick:t=>{X(n+1,`inline`,e.id,t.clientX)},children:g(t,{className:`text-[16px] text-text1 leading-[22px] line-clamp-2 ${e.id===N?`font-bold !text-theme5`:``}`,children:C?e.title:e.series_num})},e.id))})]}),g(A,{title:a(`seriesEpisodes.selectorTitle`),variant:`popup`,open:o,updateStatus:n.update_status,summaryText:M,seriesList:(n.links||[]).map(e=>({id:e.id,name:e.name})),activeEpisodeId:N,showEpisodeTitle:C,onToggleTitle:e=>{w(e)},onClose:()=>l(!1),onSelectEpisode:(e,t)=>{l(!1),X(t,`popup`,e)},popupBodyStyle:{height:Z},popupStylePreset:`default`})]})}export{O as DetailStyleOneActiveBorderLayer,k as SeriesEpisodes};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Box as e}from"../../ui/box.mjs";import{Text as t}from"../../ui/text.mjs";import n from"../../ui/link.mjs";import r from"../../../assets/icons/tabs/follow.mjs";import i from"../../../assets/icons/tabs/follow_active.mjs";import a from"../../../assets/icons/tabs/home.mjs";import o from"../../../assets/icons/tabs/home_active.mjs";import s from"../../../assets/icons/tabs/mine.mjs";import c from"../../../assets/icons/tabs/mine_active.mjs";import l from"../../ui/legacy/badge.mjs";import{useEffect as u,useState as d,useTransition as f}from"react";import{
|
|
2
|
+
"use client";import{Box as e}from"../../ui/box.mjs";import{Text as t}from"../../ui/text.mjs";import n from"../../ui/link.mjs";import r from"../../../assets/icons/tabs/follow.mjs";import i from"../../../assets/icons/tabs/follow_active.mjs";import a from"../../../assets/icons/tabs/home.mjs";import o from"../../../assets/icons/tabs/home_active.mjs";import s from"../../../assets/icons/tabs/mine.mjs";import c from"../../../assets/icons/tabs/mine_active.mjs";import l from"../../ui/legacy/badge.mjs";import{useEffect as u,useState as d,useTransition as f}from"react";import{jsx as p,jsxs as m}from"react/jsx-runtime";import{usePathname as h}from"next/navigation";import{useTranslations as g}from"next-intl";function _(e,t){if(t!==`/`)return e.startsWith(t);let n=[`/user`].some(t=>e.startsWith(t)),r=e.startsWith(`/category/`);return!n&&(e===`/`||r)}const v=[`/nav-page`];function y(y){let{className:b}=y,x=h(),S=g(`tabBar`),[C,w]=d(null),[,T]=f(),[E]=d(0),[D,O]=d(!1),k=[{badge:!1,id:1,labelKey:`home`,path:`/`,icon:a,activeIcon:o,width:20,height:20},{badge:!1,id:2,labelKey:`follow`,path:`/user/follow`,icon:r,activeIcon:i,width:20,height:20},{badge:!1,id:5,labelKey:`mine`,path:`/user/mine`,icon:s,activeIcon:c,width:20,height:20}],A=(e,t,n)=>{t!==x&&w(t)};return u(()=>{C&&_(x,C)&&T(()=>{w(null)})},[x,C]),u(()=>{let e=setTimeout(()=>{O(!0)},0);return()=>clearTimeout(e)},[]),x&&v.some(e=>x.includes(e))?null:p(e,{className:`fixed bottom-0 left-0 right-0 z-50 flex flex-col items-center ${b||``}`,style:{background:`rgba(5, 1, 15, 0.90)`,backdropFilter:`blur(4px)`,WebkitBackdropFilter:`blur(4px)`,paddingBottom:`env(safe-area-inset-bottom, 0px)`},children:p(e,{className:`my-[4px] flex h-[56px] w-[358px] items-center justify-between px-[40px]`,style:{background:`rgba(1, 0, 2, 0.80)`,borderRadius:`100px`,backdropFilter:`blur(8px)`,WebkitBackdropFilter:`blur(8px)`,boxShadow:`0 12px 100px rgba(255, 255, 255, 0.20)`},children:k.map(r=>{let i=D&&x?_(C||x||``,r.path):!1,a=i?r.activeIcon:r.icon,o=m(e,{className:`flex flex-col items-center ${i?`gap-[5px]`:`gap-[4px]`}`,children:[r.badge&&E>0?p(l,{dot:!0,children:p(a,{width:20,height:20})}):p(a,{width:20,height:20}),p(t,{className:`whitespace-nowrap text-center text-[12px] leading-[16px] ${i?`text-[#C043E8]`:`text-[#BFBFBF]`}`,children:S(r.labelKey)})]});return i?p(e,{className:`flex items-center justify-center`,children:o},r.id):p(n,{href:r.path,prefetch:!0,className:`flex items-center justify-center`,onClick:e=>{A(e,r.path,r.labelKey)},children:o},r.id)})})})}export{y as TabBar};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{cn as e}from"../../../../utils/cn.mjs";import{Image as t}from"../../../ui/image.mjs";import{Text as n}from"../../../ui/text.mjs";import{CollectionSelectIcon as r,CollectionSelectedIcon as i}from"../../../common/list/collection-list/collection-select-icon.mjs";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{useTranslations as s}from"next-intl";import c from"next/link";function l(e){return a(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`18`,height:`14`,viewBox:`0 0 18 14`,fill:`none`,...e,children:a(`path`,{d:`M11.34 6.138L7.5195 4.0635C7.3395 3.9645 7.1415 3.9105 6.957 3.9105C6.4035 3.9105 6.003 4.3335 6.003 4.9185V8.991C6.003 9.576 6.4035 9.999 6.957 9.999C7.146 9.999 7.3395 9.945 7.5195 9.8505L11.358 7.776C11.7045 7.587 11.907 7.29 11.907 6.966C11.907 6.6375 11.7 6.3315 11.34 6.138ZM14.7105 0L3.1995 1.1205C1.431 1.1205 0 2.5515 0 4.32V9.7155C0 11.484 1.431 12.915 3.1995 12.915L14.715 13.914C16.4835 13.914 17.9145 12.483 17.9145 10.7145V3.1995C17.9133 2.35053 17.5752 1.53673 16.9745 0.936838C16.3737 0.336945 15.5595 -8.37344e-07 14.7105 0ZM16.3125 10.7145C16.3125 10.9243 16.2712 11.132 16.1909 11.3258C16.1106 11.5197 15.9929 11.6958 15.8446 11.8441C15.6963 11.9924 15.5202 12.1101 15.3263 12.1904C15.1325 12.2707 14.9248 12.312 14.715 12.312L3.1995 11.313C2.98971 11.313 2.78198 11.2717 2.58816 11.1914C2.39435 11.1111 2.21824 10.9934 2.0699 10.8451C1.92156 10.6968 1.80388 10.5207 1.7236 10.3268C1.64332 10.133 1.602 9.92529 1.602 9.7155V4.32C1.602 3.89632 1.77031 3.48999 2.0699 3.1904C2.36949 2.89081 2.77582 2.7225 3.1995 2.7225L14.7105 1.602C14.9203 1.602 15.128 1.64332 15.3218 1.7236C15.5157 1.80388 15.6918 1.92156 15.8401 2.0699C15.9884 2.21824 16.1061 2.39435 16.1864 2.58816C16.2667 2.78198 16.308 2.98971 16.308 3.1995V10.7145H16.3125Z`,fill:`currentColor`})})}function u(e){let t=Number.isFinite(e)?Math.max(0,Math.floor(e||0)):0;if(t<=0)return``;let n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`}function d(e){let t=Number.isFinite(e)?Math.max(0,Math.floor(e||0)):0;return t>=1e8?`${(t/1e8).toFixed(1).replace(/\.0$/,``)}亿`:t>=1e4?`${(t/1e4).toFixed(1).replace(/\.0$/,``)}w`:`${t}`}function f({id:f,title:p,coverImage:m,duration:h=0,episodeCount:g=0,viewCount:_=0,is_more_link:v=!1,isEditMode:y=!1,isSelected:b=!1,onToggleSelection:x}){let S=s(`components.ui.list.videoList`),C=`/video/${f}/${p}`,w=S(v?`videoListItem.series`:`videoListItem.movie`),T=v?g>0?`${g}集全`:``:u(h),E=d(_);function D(){x?.(f)}function O(e){(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),D())}return o(`div`,{className:`relative w-full`,children:[o(`div`,{className:`relative h-[228px] w-full overflow-hidden rounded-[8px]`,children:[a(t,{src:m||`/empty/default-cover.png`,alt:p||S(`videoListItem.coverAlt`),fill:!0,className:`object-cover`}),a(`div`,{className:`pointer-events-none absolute inset-0 rounded-[8px] bg-[linear-gradient(180deg,rgba(8,2,17,0.56)_3.289%,rgba(8,2,17,0)_27.697%,rgba(8,2,17,0.8)_74.178%)]`}),y&&a(`div`,{className:`absolute left-3 top-3 z-20`,children:a(b?i:r,{})}),!y&&o(`div`,{className:e(`absolute left-2 right-2 top-3 z-10 flex items-start justify-between gap-2`),children:[a(`div`,{className:`inline-flex h-5 items-center justify-center rounded-[4px] bg-white/20 px-1 text-center text-[12px] leading-[14px] text-white`,children:a(n,{className:`text-[12px] leading-[14px] text-white`,children:w})}),T?a(n,{className:`shrink-0 text-[14px] leading-4 text-white`,children:T}):null]}),o(`div`,{className:`absolute bottom-3 left-[10px] right-[10px] z-10 flex items-end gap-2`,children:[a(n,{className:`min-w-0 flex-1 line-clamp-2 text-[16px] font-normal leading-6 text-[var(--color-text-white80)]`,dangerouslySetInnerHTML:{__html:p}}),o(`div`,{className:`mb-1 flex shrink-0 items-center gap-1 text-[12px] leading-5 text-white`,children:[a(l,{className:`h-[14px] w-[18px] opacity-80`}),a(n,{className:`text-[12px] leading-5 text-white`,children:E})]})]})]}),y?a(`button`,{type:`button`,className:`absolute inset-0 z-30 block w-full rounded-[8px] text-left`,onClick:D,onKeyDown:O,"aria-pressed":b,children:a(`span`,{className:`sr-only`,children:p||S(`videoListItem.coverAlt`)})}):a(c,{href:C,className:`absolute inset-0 z-30 block rounded-[8px]`,"aria-label":p||S(`videoListItem.coverAlt`)})]})}export{f as CollectionDetailVideoCard};
|
|
@@ -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{gCommunityGetCollectionInfo as n,
|
|
2
|
+
"use client";import{Button as e}from"../../ui/button.mjs";import{useUserStore as t}from"../../../store/modules/user-store.mjs";import{gCommunityGetCollectionInfo as n,pCommunityDeleteCollection as r,pCommunityRemoveContentFromCollection as i,pInteractionBatchDeleteCollects as a}from"../../../service/generated/client.mjs";import{useRouter as o}from"../../../utils/use-compatible-router.mjs";import{Box as s}from"../../ui/box.mjs";import{Checkbox as ee}from"../../ui/checkbox.mjs";import{DropdownMenu as te,DropdownMenuContent as c,DropdownMenuItem as l,DropdownMenuSeparator as u,DropdownMenuTrigger as ne}from"../../ui/dropdown-menu.mjs";import{List as d}from"../../ui/list.mjs";import{Text as re}from"../../ui/text.mjs";import{useLoginModalStore as f}from"../../../store/modules/login-modal-store.mjs";import{useDeleteRequest as p,useMutation as m,useRequest as ie}from"../../../hooks/query/use-query.mjs";import{CreateCollectionSheet as ae}from"../../common/collection-popup/create-collection-sheet.mjs";import{ShareDrawer as oe}from"../../common/share-popup/share-drawer.mjs";import{SharePlatformEnum as h}from"../../../types/share.mjs";import se from"../../../utils/share-manager.mjs";import{DeleteConfirmDialog as ce}from"../../common/delete-confirm-dialog/delete-confirm-dialog.mjs";import{HeaderNav as le}from"../../common/header-nav/client.mjs";import{CollectionDetailCard as g}from"./_components/collection-detail-card.mjs";import{CollectionDetailVideoCard as ue}from"./_components/collection-detail-video-card.mjs";import{useMemo as _,useState as v}from"react";import{MoreVertical as y}from"lucide-react";import{jsx as b,jsxs as x}from"react/jsx-runtime";import{toast as S}from"sonner";import{useTranslations as de}from"next-intl";function C(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 w(e){let t=e.detail.info?.video_duration;if(typeof t==`number`&&Number.isFinite(t)&&t>0)return Math.floor(t);let n=e.detail.duration;if(typeof n==`number`&&Number.isFinite(n)&&n>0)return Math.floor(n);let r=e.medias?.find(e=>{let t=e?.video_duration;return typeof t==`number`&&Number.isFinite(t)&&t>0})?.video_duration;return typeof r==`number`&&Number.isFinite(r)&&r>0?Math.floor(r):0}function T(e){let t=[e.detail.episode_cnt,e.detail.series_num_total,Array.isArray(e.detail.links)?e.detail.links.length:void 0].find(e=>typeof e==`number`&&Number.isFinite(e)&&e>0);return typeof t==`number`?Math.floor(t):0}function E(e){let t=e.detail.info?.play_count;if(typeof t==`number`&&Number.isFinite(t))return Math.max(0,Math.floor(t));let n=e.detail.view_count||e.viewCount;return typeof n==`number`&&Number.isFinite(n)?Math.max(0,Math.floor(n)):0}function D(e){return e.detail.type===2||e.is_more_link||e.detail.info?.is_more_link||e.detail.is_more_link?!0:T(e)>1}function fe(e){let t=e.detail,n=t.info,r=String(n?.cover_image||t.cover_image||C(e)||``),i=String(n?.text||n?.title||t.title||t.content||``),a=T(e),o=t.author_score??0,s=Array.isArray(t.tags)?t.tags:[];return{id:e.content_id?String(e.content_id):String(e.id),title:i,type:typeof e.type==`number`?e.type:0,coverImage:r,score:o,collectedAt:t.create_time==null?void 0:String(t.create_time),tags:s,duration:w(e),viewCount:E(e),episodeCount:a,publishTime:String(t.create_time??t.update_time??``),is_more_link:D(e),authorName:``}}function O({id:C}){let w=de(`components.pages.collectionDetail`),T=o(),{userId:E,isLogin:D}=t(),{open:O}=f(),k=p(),A=ie([`collection-detail`,C],()=>n({collection_id:C})),j=A.data?.data?.data?.collection?.user_id,M=!!(j&&E&&String(j)===String(E)),[pe,N]=v(!1),[P,F]=v(!1),[I,L]=v(!1),[R,z]=v(!1),[B,V]=v(()=>new Set),[H,U]=v(null),W=A.data?.data?.data?.collection,G=W?.contents,K=_(()=>G?G.map(e=>({content_id:e.content_id,is_more_link:e.is_more_link,id:Number(e.content_id),detail:e,type:Number(e.source_type??0),medias:e.medias,cover_image:e.cover_image,viewCount:e.view_count})):[],[G]).map(fe),me=K.length>0&&K.every(e=>e.type===1),q=_(()=>new Set(K.map(e=>e.id)),[K]),J=q.size>0&&B.size===q.size,{mutateAsync:he,isPending:ge}=m(async e=>await i({collection_id:C,content_id:e})),{mutateAsync:_e,isPending:Y}=m(async e=>await r({collection_id:e})),{mutateAsync:ve,isPending:X}=m(async e=>await a({app_id:0,user_id:E,folder_id:C,content_type:1,content_ids:e})),ye=M&&W?.is_default===!1;function be(e){U({kind:`content`,id:e.id,type:e.type,title:e.title,isCollected:!0}),N(!0)}function Z(){if(!D||!E){S.error(w(`detail.pleaseLogin`)),O();return}if(!M){S.error(w(`detail.operationFailed`));return}V(new Set),z(!0)}function xe(){V(new Set),z(!1)}function Q(e){V(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function Se(){if(J){V(new Set);return}V(new Set(q))}async function Ce(){if(!(B.size===0||X)){if(!D||!E){S.error(w(`detail.pleaseLogin`)),O();return}try{let e=await ve(Array.from(B));if(e.code===0){S.success(w(`detail.uncollectSuccess`)),k([`collection-detail`,C]),k([`user-profile`,`mine`]),k([`user-profile`,`profile`,j]),V(new Set),z(!1);return}S.error(e.message||w(`detail.uncollectFailed`))}catch(e){console.error(`批量取消收藏失败`,e),S.error(w(`detail.operationFailed`))}}}function we(e){if(typeof window>`u`)return``;if(e.kind===`collection`)return`${window.location.origin}/collection/${e.id}`;let t=e.title?encodeURIComponent(e.title):`detail`,n=e.type===1?`/video/${e.id}/${t}`:`/post/${e.id}`;return`${window.location.origin}${n}`}function $(e){if(!H)return;let t=we(H);t&&se.showSharePopup({type:e,data:{id:H.id},copyUrl:t})}function Te(){$(h.WECHAT)}function Ee(){$(h.QQ)}function De(){$(h.WECHAT_MOMENTS)}function Oe(){if(!ge){if(!D||!E){S.error(w(`detail.pleaseLogin`)),O();return}!H||H.kind!==`content`||he(H.id).then(e=>{if(e.code===0){S.success(w(`detail.uncollectSuccess`)),k([`collection-detail`,C]),U(e=>e&&{...e,isCollected:!1});return}S.error(e.message||w(`detail.uncollectFailed`))}).catch(e=>{console.error(`取消收藏失败`,e),S.error(w(`detail.operationFailed`))})}}function ke(){L(!0),N(!1)}function Ae(){if(!Y){if(!D||!E){S.error(w(`detail.pleaseLogin`)),O();return}if(!ye){S.error(w(`detail.defaultCollectionDeleteNotSupported`));return}F(!0)}}async function je(){if(!Y)try{let e=await _e(C);if(e.code===0){S.success(w(`detail.deleteSuccess`)),k([`collection-detail`,C]),k([`user-profile`,`mine`]),k([`user-profile`,`profile`,j]),F(!1),N(!1),T.back();return}S.error(e.message||w(`detail.deleteFailed`))}catch(e){console.error(`删除合集失败`,e),S.error(w(`detail.operationFailed`))}}return x(s,{className:`relative flex min-h-screen flex-col overflow-hidden bg-[var(--color-surface-panel-dark)] ${R?`pb-28`:`pb-6`}`,children:[b(le,{className:`!border-none !bg-[var(--color-surface-panel-dark)] !border-transparent`,title:W?.title??``,centerChild:b(`p`,{className:`line-clamp-1 px-12 text-center text-[18px] leading-[22px] font-medium text-text1`,children:W?.title??``}),onBack:()=>T.back(),rightChild:M?R?b(`button`,{type:`button`,onClick:xe,className:`px-2 py-1 text-sm text-text1`,children:w(`detail.done`)}):x(te,{children:[b(ne,{className:`flex h-10 w-10 items-center justify-center text-text1 outline-none`,children:b(y,{className:`h-5 w-5`,strokeWidth:2})}),x(c,{align:`end`,sideOffset:6,className:`!w-[180px] rounded-[8px] border-none !border-none !ring-0 shadow-none !shadow-none bg-[#252327] px-0 pb-1 pt-[3px]`,children:[b(l,{className:`mx-1 h-8 rounded-[4px] px-[10px] text-[13px] leading-4 text-[#fafafa]`,onClick:ke,children:w(`detail.editCollection`)}),b(u,{className:`mx-0 my-1 bg-[#343237]`}),b(l,{className:`mx-1 h-8 rounded-[4px] px-[10px] text-[13px] leading-4 text-[#fafafa]`,onClick:Z,children:w(`detail.manageCollection`)}),b(u,{className:`mx-0 my-1 bg-[#343237]`}),b(l,{className:`mx-1 h-8 rounded-[4px] px-[10px] text-[13px] leading-4 text-[#fafafa]`,onClick:Ae,disabled:Y,children:w(Y?`detail.deleting`:`detail.deleteCollection`)})]})]}):void 0}),b(s,{className:`relative z-[1] px-4 pb-4`,children:b(s,{className:`text-text2 text-sm leading-[22px] break-all text-ellipsis line-clamp-1`,children:W?.description})}),b(s,{className:`relative z-[1] px-4 ${R?`pb-20`:``}`,children:me?b(d,{loading:A.isLoading,hasMore:!1,emptyText:w(`detail.emptyContent`),columns:2,gridGap:16,className:`!bg-transparent`,children:K.map(e=>b(ue,{id:e.id,title:e.title,coverImage:e.coverImage,duration:e.duration,episodeCount:e.episodeCount,viewCount:e.viewCount,is_more_link:e.is_more_link,isEditMode:R,isSelected:B.has(e.id),onToggleSelection:Q},e.id))}):b(d,{loading:A.isLoading,hasMore:!1,emptyText:w(`detail.emptyContent`),className:`!bg-transparent divide-y divide-text1/5`,children:K.map(e=>b(g,{...e,onOpenShare:be,isEditMode:R,isSelected:B.has(e.id),onToggleSelection:Q},e.id))})}),R&&x(s,{className:`fixed bottom-0 left-0 right-0 z-10 flex items-center justify-between border-t border-text1/10 bg-bg1 px-4 py-3`,children:[x(s,{className:`flex items-center gap-2`,children:[b(ee,{checked:J,onCheckedChange:Se}),b(re,{className:`text-sm text-text1`,children:w(`detail.selectAll`)})]}),b(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:B.size>0?`default`:`outline`,disabled:B.size===0||X,onClick:Ce,children:w(X?`detail.deleting`:`detail.delete`)})]}),b(oe,{isShowCollect:H?.kind===`content`&&M&&D,isCollected:H?.isCollected,open:pe,onOpenChange:N,onShareWeChat:Te,onShareQQ:Ee,onShareMoments:De,onUncollect:Oe}),b(ae,{visible:I,mode:`edit`,collectionId:C,initialValues:W?{title:W.title??``,description:W.description??``}:void 0,onClose:()=>L(!1)}),b(ce,{open:P,onOpenChange:F,onConfirm:je,title:w(`detail.deleteCollection`),isConfirming:Y})]})}export{O as CollectionDetail};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{useUserStore as e}from"../../../store/modules/user-store.mjs";import{gUserGetUserEditInfo as t,gUserGetUserInfo as n,pUserEditUserInfo as r}from"../../../service/generated/client.mjs";import{uploadFile as i}from"../../../utils/upload-file.mjs";import{Avatar as ee,AvatarFallback as te,AvatarImage as ne}from"../../ui/avatar.mjs";import{Box as a}from"../../ui/box.mjs";import{InputGroup as
|
|
2
|
+
"use client";import{useUserStore as e}from"../../../store/modules/user-store.mjs";import{gUserGetUserEditInfo as t,gUserGetUserInfo as n,pUserEditUserInfo as r}from"../../../service/generated/client.mjs";import{uploadFile as i}from"../../../utils/upload-file.mjs";import{Avatar as ee,AvatarFallback as te,AvatarImage as ne}from"../../ui/avatar.mjs";import{Box as a}from"../../ui/box.mjs";import{InputGroup as re,InputGroupAddon as ie,InputGroupTextarea as ae}from"../../ui/input-group.mjs";import{Text as o}from"../../ui/text.mjs";import{useDeleteRequest as oe,useMutation as se,useRequest as ce}from"../../../hooks/query/use-query.mjs";import{HeaderNav as le}from"../../common/header-nav/client.mjs";import{PickerDrawer as s}from"../../common/picker/picker-drawer/picker-drawer.mjs";import{GenderPicker as ue}from"../../common/picker/gender-picker/gender-picker.mjs";import{ImageCropModal as de}from"../../common/image-crop-modal/image-crop-modal.mjs";import{useEffect as c,useRef as l,useState as u}from"react";import{ChevronDown as fe}from"lucide-react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{toast as p}from"sonner";import{useTranslations as pe}from"next-intl";import{produce as me}from"immer";const m={0:`secret`,1:`male`,2:`female`},h={male:1,female:2,secret:0},g=[`image/jpeg`,`image/png`],he=/^[\u4E00-\u9FFF\w.-]+$/;function ge(e){let t=e.name.toLowerCase(),n=e.type.toLowerCase();return g.includes(n)||/\.(?:jpg|jpeg|png)$/i.test(t)}function _(e){return e?h[e]===void 0?m[e]??`secret`:e:`secret`}function v(e){if(!e)return;if(h[e]!==void 0)return h[e];let t=Number(e);return Number.isNaN(t)?void 0:t}function _e(e){return{nickname:e?.nick_name??``,gender:_(e?.gender?.toString()),signature:e?.signature??``,avatar:e?.avatar??``}}function ve(e){if(!e)return;e.focus();let t=e.value.length;e.setSelectionRange(t,t)}function ye({id:m}){let h=pe(`components.pages.edit`),{userId:g,userInfo:_,setUserInfo:ye}=e(),y=m??g,b=oe(),be={male:h(`page.genderMale`),female:h(`page.genderFemale`),secret:h(`page.genderSecret`)},xe=l(null),x=l(null),S=l(null),C=l(null),[w,T]=u(()=>_e()),[E,D]=u(!1),[Se,O]=u(null),[Ce,k]=u(!1),[A,j]=u(``),[M,N]=u(!1),[P,F]=u(``),[we,I]=u(!1),[L,R]=u(`secret`),[z,Te]=u(!1),[B,V]=u(``),Ee={code:0,message:``,data:{}},De={code:0,message:``,data:{}},{data:Oe,isLoading:H}=ce([`user-edit-info`,y],()=>y?t({user_id:y}):Promise.resolve(Ee)),{data:ke}=ce([`user-info-basic`,y],()=>y?n({user_id:y}):Promise.resolve(De)),{mutateAsync:Ae,isPending:je}=se(async e=>r(e)),Me=E||je||Se!==null,U=H||Me,W=U?`cursor-not-allowed opacity-60`:`cursor-pointer`,Ne=ke?.data?.display_id||_?.display_id||`--`,G=w.gender||`secret`,Pe=U||P.trim()===w.nickname,Fe=U||L===G,Ie=U||B===w.signature,K=`flex h-12 w-full items-center rounded-md bg-[var(--color-surface-field-bg)] px-4`,q=`text-sm leading-6 text-text3`,J=`block min-w-0 flex-1 truncate text-sm leading-5 text-text3`;c(()=>{let e=Oe?.data;e&&T(_e(e))},[Oe]),c(()=>{if(!M)return;let e=window.setTimeout(()=>{ve(x.current)},250);return()=>{window.clearTimeout(e)}},[M]),c(()=>{if(!z)return;let e=window.setTimeout(()=>{ve(S.current)},250);return()=>{window.clearTimeout(e)}},[z]),c(()=>()=>{A&&URL.revokeObjectURL(A)},[A]);function Y(e,t){T(me(n=>{n[e]=t}))}function Le(){A&&(URL.revokeObjectURL(A),j(``))}function Re(){y&&(b([`user-edit-info`,y]),b([`user-info-basic`,y]),b([`user-profile`,`mine`]),b([`user-profile`,`mine`,y]),b([`user-profile`,`profile`,y]))}function X(e){!y||y!==g||ye({..._,user_id:y,...e})}function ze(){p.info(h(`page.editBlockedWhileSaving`))}function Z(){return H?!0:Me?(ze(),!0):!1}function Be(e){return C.current?(ze(),!1):(C.current=e,O(e),!0)}function Ve(e){C.current===e&&(C.current=null,O(null))}async function Q(e,t){if(!Be(e))return!1;let n=p.loading(h(`page.savingInProgress`));try{return await t()}finally{p.dismiss(n),Ve(e)}}function He(e,t){let n={...w,...t},r={nickname:[`nick_name`,n.nickname||void 0],avatar:[`avatar`,n.avatar||void 0],signature:[`signature`,n.signature||void 0],gender:[`gender`,v(n.gender)]},i=Object.keys(r).filter(t=>t!==e).map(e=>r[e]);return i.push(r[e]),Object.fromEntries(i)}async function $(e,t){if(!y)return p.error(h(`page.userNotFound`)),!1;let n=He(e,t);try{return await Ae({user_id:y,...n}),Re(),!0}catch(e){return console.error(`更新用户信息失败`,e),p.error(h(`page.updateFailed`)),!1}}function Ue(){Z()||E||xe.current?.click()}function We(e){if(Z()){e.target&&(e.target.value=``);return}let t=e.target.files?.[0];if(t){if(!ge(t)){p.error(h(`page.imageTypeInvalid`)),e.target&&(e.target.value=``);return}j(URL.createObjectURL(t)),k(!0),e.target&&(e.target.value=``)}}async function Ge(e){await Q(`avatar`,async()=>{try{D(!0);let t=await i(new File([e],`avatar.jpg`,{type:`image/jpeg`}),1);return await $(`avatar`,{avatar:t.objectKey})?(Y(`avatar`,t.objectKey),X({avatar:t.objectKey}),Ke(),p.success(h(`page.avatarUpdateSuccess`)),!0):!1}catch(e){return console.error(`上传头像失败`,e),p.error(h(`page.avatarUploadFailed`)),!1}finally{D(!1)}})}function Ke(){k(!1),Le()}function qe(){Z()||(F(w.nickname),N(!0))}function Je(e){let t=e.target.value;t.length>24||F(t)}function Ye(e){return e?e.length<2?h(`page.nicknameTooShort`):he.test(e)?``:h(`page.nicknameInvalidChars`):h(`page.nicknameRequired`)}async function Xe(e){if(Pe)return!1;let t=e.trim(),n=Ye(t);return n?(p.error(n),!1):await Q(`nickname`,async()=>$(`nickname`,{nickname:t}))?(Y(`nickname`,t),X({nick_name:t}),F(t),p.success(h(`page.nicknameUpdateSuccess`)),!0):!1}function Ze(){Z()||(R(G),I(!0))}function Qe(){I(!1)}function $e(e){R(e)}async function et(e){let t=e||L||`secret`;if(t===G)return!1;let n=v(t);return await Q(`gender`,async()=>$(`gender`,{gender:t}))?(Y(`gender`,t),X({gender:n}),R(t),p.success(h(`page.genderUpdateSuccess`)),!0):!1}function tt(){Z()||(V(w.signature),Te(!0))}function nt(e){let t=e.target.value;t.length>100||V(t)}function rt(e){let t=e.trim();return t.length>0&&t.length<2?h(`page.signatureTooShort`):``}async function it(e){if(Ie)return!1;let t=rt(e);return t?(p.error(t),!1):await Q(`signature`,async()=>$(`signature`,{signature:e}))?(Y(`signature`,e),X({signature:e}),V(e),p.success(h(`page.signatureUpdateSuccess`)),!0):!1}return f(a,{className:`min-h-screen bg-[var(--color-surface-panel-dark)]`,children:[d(le,{className:`h-11 !border-none !bg-[var(--color-surface-panel-dark)]`,title:h(`page.title`)}),f(a,{className:`mx-auto flex w-full max-w-[390px] flex-col px-8 pb-10 pt-17`,children:[f(`button`,{type:`button`,onClick:Ue,className:`flex flex-col items-center gap-4 pb-10 ${W}`,children:[d(`input`,{ref:xe,type:`file`,accept:`.jpg,.jpeg,.png,image/jpeg,image/png`,className:`hidden`,onChange:We}),d(a,{className:`flex h-[72px] w-[72px] items-center justify-center rounded-full bg-[var(--color-surface-white20)]`,children:f(ee,{className:`h-[60px] w-[60px] border-[3px] border-[var(--color-surface-white20)]`,children:[d(ne,{src:w.avatar}),d(te,{})]})}),f(o,{className:`text-base leading-5 text-text3`,children:[`ID:`,` `,H?h(`page.loading`):E?h(`page.avatarUploading`):`${Ne}`]})]}),f(a,{className:`flex flex-col gap-6`,children:[f(a,{className:`flex flex-col gap-2`,children:[d(o,{as:`p`,className:q,children:h(`page.label`)}),d(`button`,{type:`button`,onClick:qe,className:`${K} ${W}`,children:d(o,{className:J,children:w.nickname||h(`page.nicknamePlaceholder`)})})]}),f(a,{className:`flex flex-col gap-2`,children:[d(o,{as:`p`,className:q,children:h(`page.genderLabel`)}),f(`button`,{type:`button`,onClick:Ze,className:`${K} justify-between gap-3 ${W}`,children:[d(o,{className:J,children:be[G]||h(`page.genderSecret`)}),d(fe,{className:`h-5 w-5 shrink-0 text-text3`,strokeWidth:1.75})]})]}),f(a,{className:`flex flex-col gap-2`,children:[d(o,{as:`p`,className:q,children:h(`page.signatureLabel`)}),d(`button`,{type:`button`,onClick:tt,className:`${K} ${W}`,children:d(o,{className:J,children:w.signature||h(`page.signaturePlaceholder`)})})]})]})]}),d(s,{open:M,onClose:()=>N(!1),title:h(`page.label`),confirmText:h(`page.submit`),onConfirm:e=>Xe(String(e)),confirmDisabled:Pe,children:({onValueChange:e})=>d(a,{className:`px-4 py-4 min-h-[230px]`,children:f(re,{children:[d(ae,{ref:x,className:`!bg-bg1 p-2.5`,rows:4,maxLength:24,placeholder:h(`page.nicknamePlaceholder`),value:P,onChange:t=>{Je(t),e(t.target.value)},disabled:U}),d(ie,{className:`!bg-bg1`,align:`block-end`,children:d(`div`,{className:`text-right w-full`,children:f(`span`,{className:`text-xs`,children:[P.length,`/`,24]})})})]})})}),d(ue,{open:we,onClose:Qe,value:L,onValueChange:$e,onConfirm:et,confirmDisabled:Fe}),d(s,{open:z,onClose:()=>Te(!1),title:h(`page.signatureLabel`),confirmText:h(`page.submit`),onConfirm:e=>it(String(e)),confirmDisabled:Ie,children:({onValueChange:e})=>d(a,{className:`px-4 py-4 min-h-[230px]`,children:f(re,{children:[d(ae,{ref:S,className:`!bg-bg1 p-2.5`,rows:4,maxLength:100,placeholder:h(`page.signaturePlaceholder`),value:B,onChange:t=>{nt(t),e(t.target.value)},disabled:U}),d(ie,{className:`!bg-bg1`,align:`block-end`,children:d(`div`,{className:`text-right w-full`,children:f(`span`,{className:`text-xs`,children:[B.length,`/`,100]})})})]})})}),d(de,{open:Ce,onClose:Ke,imageSrc:A,onConfirm:Ge,cropShape:`round`})]})}export{ye as EditClient};
|