@funhub/platform 0.2.4-beta.4 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +10 -6
- 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 +7 -3
- package/dist/components/biz/business/advertisement/ad-match.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 +2 -2
- package/dist/components/biz/business/advertisement/banner-ad/material.mjs +1 -1
- package/dist/components/biz/business/advertisement/banner-ad/schema.d.mts +9 -4
- package/dist/components/biz/business/advertisement/banner-ad/schema.mjs +1 -1
- package/dist/components/biz/business/advertisement/feed-ad/index.d.mts +1 -31
- package/dist/components/biz/business/advertisement/feed-ad/index.mjs +1 -1
- package/dist/components/biz/business/advertisement/floating-ad/client.d.mts +4 -3
- package/dist/components/biz/business/advertisement/floating-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/floating-ad/index.d.mts +1 -1
- package/dist/components/biz/business/advertisement/floating-ad/material.d.mts +5 -0
- package/dist/components/biz/business/advertisement/floating-ad/schema.d.mts +21 -6
- package/dist/components/biz/business/advertisement/floating-ad/schema.mjs +1 -1
- package/dist/components/biz/business/advertisement/icon-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/icon-ad/material.d.mts +1 -1
- package/dist/components/biz/business/advertisement/icon-ad/material.mjs +1 -1
- package/dist/components/biz/business/advertisement/icon-ad/schema.d.mts +7 -1
- package/dist/components/biz/business/advertisement/icon-ad/schema.mjs +1 -1
- package/dist/components/biz/business/advertisement/index.d.mts +4 -4
- package/dist/components/biz/business/advertisement/popup-ad/client.mjs +2 -2
- package/dist/components/biz/business/advertisement/popup-ad/index.d.mts +1 -1
- package/dist/components/biz/business/advertisement/popup-ad/material.d.mts +2 -2
- package/dist/components/biz/business/advertisement/popup-ad/schema.d.mts +14 -15
- package/dist/components/biz/business/advertisement/popup-ad/schema.mjs +1 -1
- package/dist/components/biz/business/advertisement/text-ad/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/text-ad/material.d.mts +1 -1
- package/dist/components/biz/business/advertisement/text-ad/material.mjs +1 -1
- package/dist/components/biz/business/advertisement/text-ad/schema.d.mts +5 -1
- 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/inspector-schema.d.mts +0 -8
- 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 +0 -8
- package/dist/components/biz/business/home-recommend/home-recommend-waterfall/inspector-schema.d.mts +0 -8
- 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 +0 -8
- package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-preview.mjs +1 -1
- 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 +24 -0
- package/dist/components/biz/business/hot-recommend/material.mjs +2 -0
- package/dist/components/biz/business/hot-recommend/schema.d.mts +23 -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/index.d.mts +10 -5
- 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/large-feature-grid/schema.mjs +1 -1
- package/dist/components/biz/business/marquee/client.mjs +1 -1
- package/dist/components/biz/business/marquee/marquee.module.mjs +2 -6
- 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/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/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 +2 -2
- 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/box.d.mts +1 -1
- 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/service/generated/client.d.mts +38 -2
- package/dist/service/generated/client.mjs +1 -1
- package/dist/service/generated/tanstack.d.mts +47 -2
- package/dist/service/generated/tanstack.mjs +1 -1
- package/dist/service.d.mts +3 -3
- package/dist/service.mjs +1 -1
- package/dist/theme-tokens.d.mts +9 -0
- package/dist/theme-tokens.mjs +2 -0
- package/dist/types.d.mts +662 -9
- package/dist/utils/helper.d.mts +1 -1
- package/dist/utils/helper.mjs +1 -1
- package/package.json +8 -2
- package/theme.css +170 -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/images/marquee.mjs +0 -2
- package/dist/components/biz/business/detail/shared/detail-introduction.mjs +0 -2
- 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
|
@@ -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};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{cn as e}from"../../../../utils/cn.mjs";import{Button as t}from"../../../ui/button.mjs";import{useUserStore as n}from"../../../../store/modules/user-store.mjs";import{pUserUserFeedback as r}from"../../../../service/generated/client.mjs";import{compressImage as i}from"../../../../utils/image-compression.mjs";import{uploadFile as a}from"../../../../utils/upload-file.mjs";import{useRouter as o}from"../../../../utils/use-compatible-router.mjs";import{Image as s}from"../../../ui/image.mjs";import{Box as c}from"../../../ui/box.mjs";import{InputGroup as l,InputGroupAddon as u,InputGroupInput as d,InputGroupTextarea as f}from"../../../ui/input-group.mjs";import{Field as p,FieldLabel as m}from"../../../ui/field.mjs";import{Text as h}from"../../../ui/text.mjs";import{HeaderNav as g}from"../../../common/header-nav/client.mjs";import{AddIcon as _}from"../../../common/icons/add.mjs";import{useRef as v,useState as y}from"react";import{XIcon as b}from"lucide-react";import{jsx as x,jsxs as S}from"react/jsx-runtime";import{toast as C}from"sonner";import{useTranslations as w}from"next-intl";const T=new Set([`image/jpeg`,`image/jpg`,`image/png`]),E=new Set([`jpg`,`jpeg`,`png`]);function D(e){let t=e.type.toLowerCase(),n=e.name.split(`.`).pop()?.toLowerCase()||``;return t?T.has(t):E.has(n)}function O({className:T}={}){let E=w(`components.pages.feedback.components`),O=o(),{userId:k}=n(),A=v(null),[j,M]=y({content:``,contact:``}),[N,P]=y([]),[F,I]=y(!1),[L,R]=y(!1),z=!j.content.trim();function B(e,t){M(n=>({...n,[e]:t}))}function V(){L||F||N.length>=3||A.current?.click()}async function H(e){let t=Array.from(e.target.files??[]);if(!t.length)return;let n=3-N.length;if(n<=0){e.target&&(e.target.value=``);return}let r=t.slice(0,n),o=r.filter(D);if(!o.length){C.error(E(`feedbackForm.imageTypeInvalid`)),e.target&&(e.target.value=``);return}o.length!==r.length&&C.error(E(`feedbackForm.imageTypeInvalid`));try{R(!0);let e=[],t=!1;for(let n of o)try{let t=await a(await i(n),1);e.push(t.objectKey)}catch(e){console.error(`上传截图失败`,e),t=!0}e.length&&P(t=>[...t,...e].slice(0,3)),t&&C.error(E(`feedbackForm.screenshotUploadFailed`))}catch(e){console.error(`上传截图失败`,e),C.error(E(`feedbackForm.screenshotUploadFailed`))}finally{R(!1),e.target&&(e.target.value=``)}}function U(e){L||F||P(t=>t.filter((t,n)=>n!==e))}async function W(){let e=j.content.trim(),t=j.contact.trim();if(!e){C.error(E(`feedbackForm.missingFeedback`));return}if(e.length<4){C.error(E(`feedbackForm.contentMinLength`));return}if(F)return;let n=C.loading(E(`feedbackForm.loading`));try{I(!0);let i=await r({user_id:k,feedback_content:e,feedback_screenshots:N.length?N:void 0,contact_info:t||void 0});if(i.code===0){M({content:``,contact:``}),P([]),O.push(`/settings`),C.success(E(`feedbackForm.submitsuccess`),{id:n});return}C.error(i.message||E(`feedbackForm.message`),{id:n})}catch(e){console.error(`提交反馈失败`,e),C.error(e.message||E(`feedbackForm.message`),{id:n})}finally{I(!1)}}return S(c,{className:e(`min-h-screen bg-
|
|
2
|
+
"use client";import{cn as e}from"../../../../utils/cn.mjs";import{Button as t}from"../../../ui/button.mjs";import{useUserStore as n}from"../../../../store/modules/user-store.mjs";import{pUserUserFeedback as r}from"../../../../service/generated/client.mjs";import{compressImage as i}from"../../../../utils/image-compression.mjs";import{uploadFile as a}from"../../../../utils/upload-file.mjs";import{useRouter as o}from"../../../../utils/use-compatible-router.mjs";import{Image as s}from"../../../ui/image.mjs";import{Box as c}from"../../../ui/box.mjs";import{InputGroup as l,InputGroupAddon as u,InputGroupInput as d,InputGroupTextarea as f}from"../../../ui/input-group.mjs";import{Field as p,FieldLabel as m}from"../../../ui/field.mjs";import{Text as h}from"../../../ui/text.mjs";import{HeaderNav as g}from"../../../common/header-nav/client.mjs";import{AddIcon as _}from"../../../common/icons/add.mjs";import{useRef as v,useState as y}from"react";import{XIcon as b}from"lucide-react";import{jsx as x,jsxs as S}from"react/jsx-runtime";import{toast as C}from"sonner";import{useTranslations as w}from"next-intl";const T=new Set([`image/jpeg`,`image/jpg`,`image/png`]),E=new Set([`jpg`,`jpeg`,`png`]);function D(e){let t=e.type.toLowerCase(),n=e.name.split(`.`).pop()?.toLowerCase()||``;return t?T.has(t):E.has(n)}function O({className:T}={}){let E=w(`components.pages.feedback.components`),O=o(),{userId:k}=n(),A=v(null),[j,M]=y({content:``,contact:``}),[N,P]=y([]),[F,I]=y(!1),[L,R]=y(!1),z=!j.content.trim();function B(e,t){M(n=>({...n,[e]:t}))}function V(){L||F||N.length>=3||A.current?.click()}async function H(e){let t=Array.from(e.target.files??[]);if(!t.length)return;let n=3-N.length;if(n<=0){e.target&&(e.target.value=``);return}let r=t.slice(0,n),o=r.filter(D);if(!o.length){C.error(E(`feedbackForm.imageTypeInvalid`)),e.target&&(e.target.value=``);return}o.length!==r.length&&C.error(E(`feedbackForm.imageTypeInvalid`));try{R(!0);let e=[],t=!1;for(let n of o)try{let t=await a(await i(n),1);e.push(t.objectKey)}catch(e){console.error(`上传截图失败`,e),t=!0}e.length&&P(t=>[...t,...e].slice(0,3)),t&&C.error(E(`feedbackForm.screenshotUploadFailed`))}catch(e){console.error(`上传截图失败`,e),C.error(E(`feedbackForm.screenshotUploadFailed`))}finally{R(!1),e.target&&(e.target.value=``)}}function U(e){L||F||P(t=>t.filter((t,n)=>n!==e))}async function W(){let e=j.content.trim(),t=j.contact.trim();if(!e){C.error(E(`feedbackForm.missingFeedback`));return}if(e.length<4){C.error(E(`feedbackForm.contentMinLength`));return}if(F)return;let n=C.loading(E(`feedbackForm.loading`));try{I(!0);let i=await r({user_id:k,feedback_content:e,feedback_screenshots:N.length?N:void 0,contact_info:t||void 0});if(i.code===0){M({content:``,contact:``}),P([]),O.push(`/settings`),C.success(E(`feedbackForm.submitsuccess`),{id:n});return}C.error(i.message||E(`feedbackForm.message`),{id:n})}catch(e){console.error(`提交反馈失败`,e),C.error(e.message||E(`feedbackForm.message`),{id:n})}finally{I(!1)}}return S(c,{className:e(`min-h-screen bg-[var(--color-surface-panel-dark)]`,T),children:[x(g,{title:E(`feedbackForm.title`),className:`!border-none !bg-[var(--color-surface-panel-dark)]`,rightChild:x(t,{onClick:W,disabled:F||L||z,className:`rounded-[8px] border-0 px-3 py-1.5 text-[16px] font-normal leading-6 text-white active:opacity-90 disabled:text-white/60 disabled:opacity-100`,style:{background:F||L||z?`linear-gradient(90deg, rgba(166, 86, 227, 0.45) 0%, rgba(108, 67, 238, 0.45) 100%)`:`var(--gradient-action-button)`},children:E(F?`feedbackForm.loading`:`feedbackForm.submit`)})}),S(c,{className:`pb-3`,children:[S(p,{className:`border-none bg-[var(--color-surface-panel-dark)] px-3`,children:[x(m,{required:!0,className:`text-sm leading-6 text-text3`,children:E(`feedbackForm.label`)}),S(l,{className:`overflow-hidden rounded-md !bg-[var(--color-surface-field-bg)] shadow-none dark:!bg-[var(--color-surface-field-bg)]`,children:[x(f,{className:`p-2.5 text-text1 placeholder:text-text3`,maxLength:500,placeholder:E(`feedbackForm.placeholder`),value:j.content,onChange:e=>B(`content`,e.target.value)}),x(u,{className:`!bg-transparent font-normal !text-text3`,align:`block-end`,children:x(`div`,{className:`w-full text-right`,children:S(`span`,{className:`text-xs tabular-nums text-text3`,children:[j.content.length,`/500`]})})})]})]}),S(p,{className:`border-none bg-[var(--color-surface-panel-dark)] px-3`,children:[x(m,{className:`text-sm leading-6 text-text3`,children:E(`feedbackForm.screenshotLabel`)}),x(`input`,{ref:A,type:`file`,multiple:!0,accept:`image/jpeg,image/jpg,image/png,.jpg,.jpeg,.png`,className:`hidden`,onChange:H}),S(c,{className:`mt-2 grid grid-cols-3 gap-2`,children:[N.map((e,n)=>S(c,{className:`relative aspect-square overflow-hidden rounded-md bg-[var(--color-surface-field-bg)] shadow-none`,children:[x(s,{src:e,alt:E(`feedbackForm.alt`),fill:!0,className:`object-cover`}),x(t,{size:`icon-xs`,variant:`secondary`,className:`absolute right-1 top-1 rounded-full bg-[var(--color-surface-chip-gray20)] text-text1 shadow-none`,onClick:()=>U(n),"aria-label":E(`feedbackForm.delete`),children:x(b,{})})]},`${e}-${n}`)),N.length<3&&S(c,{className:`flex aspect-square flex-col items-center justify-center gap-2 rounded-md border border-dashed border-[var(--color-line1)] bg-[var(--color-surface-field-bg)] py-3 text-center shadow-none`,onClick:V,children:[x(_,{}),x(h,{className:`text-xs text-text3`,children:E(L?`feedbackForm.uploading`:`feedbackForm.addScreenshot`)})]})]})]}),S(p,{className:`border-none bg-[var(--color-surface-panel-dark)] px-3`,children:[x(m,{className:`text-sm leading-6 text-text3`,children:E(`feedbackForm.contactLabel`)}),x(l,{className:`h-auto min-h-11 overflow-hidden rounded-md !bg-[var(--color-surface-field-bg)] shadow-none dark:!bg-[var(--color-surface-field-bg)]`,children:x(d,{className:`h-auto min-h-11 px-2.5 py-2.5 text-text1 placeholder:text-text3`,placeholder:E(`feedbackForm.placeholder1_6d0242`),value:j.contact,onChange:e=>B(`contact`,e.target.value)})})]})]})]})}export{O as FeedbackForm};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{gContentGetAppChannelBlock as e,gContentGetAppChannelBlockData as t,gContentListVisibleFloatingBall as n}from"../../../service/generated/client.mjs";import{useRouter as r}from"../../../utils/use-compatible-router.mjs";import{useRequest as i}from"../../../hooks/query/use-query.mjs";import{useRequireLogin as a}from"../../../hooks/use-auth.mjs";import{queryKey as o}from"../../../constants/query-key.mjs";import{useKeepAliveState as s}from"../../common/keep-scroll-position/index.mjs";import{
|
|
2
|
+
"use client";import{gContentGetAppChannelBlock as e,gContentGetAppChannelBlockData as t,gContentListVisibleFloatingBall as n}from"../../../service/generated/client.mjs";import{useRouter as r}from"../../../utils/use-compatible-router.mjs";import{useRequest as i}from"../../../hooks/query/use-query.mjs";import{useRequireLogin as a}from"../../../hooks/use-auth.mjs";import{queryKey as o}from"../../../constants/query-key.mjs";import{useKeepAliveState as s}from"../../common/keep-scroll-position/index.mjs";import{extractDataByComponentType as c}from"../../biz/utils/transformers/data.mjs";import{FloatingAd as l}from"../../biz/business/advertisement/floating-ad/client.mjs";import{useEffect as u,useLayoutEffect as d,useMemo as f,useRef as p}from"react";import{Fragment as m,jsx as h,jsxs as g}from"react/jsx-runtime";function _(){if(typeof document>`u`)return 0;let e=document.querySelector(`[data-top-nav-root="true"]`);return e&&e.getBoundingClientRect().height||0}function v({currentChannelId:v,isPGC:y}){let b=r(),x=a(),{data:S}=i(o.GET_CONTENT_LIST(v),()=>e({channel_id:v})),{data:C}=i([o.FLOATING_BALL],()=>n()),w=f(()=>S?.data?.blocks||[],[S?.data?.blocks]),T=f(()=>{let e=w.findIndex(e=>e.type===4),t=e>=0?w[e]:null;return{index:e,block:t,blockId:t?.id||``}},[w]),{data:E}=i([o.GUESS_YOU_LIKE_USER_DATA,T.blockId],()=>t({block_id:T.blockId}),{enabled:!!T.blockId}),D=f(()=>{if(T.index<0)return w;let e=E?.data.block?.data?.users||[];return w.map((t,n)=>n===T.index?{...t,data:{...t.data||{},users:e}}:t)},[w,E,T.index]),[O,k]=s(`home-scroll-top-${v}`,0),A=p({restored:!1,lastScrollTop:O,key:v,rafId:null}),j=p(k),M=p(O);u(()=>{j.current=k},[k]),u(()=>{M.current=O},[O]),u(()=>{A.current.key!==v&&(A.current.restored=!1,A.current.lastScrollTop=O,M.current=O,A.current.key=v)},[v,O]);let N=D.length>0;d(()=>{if(!N||A.current.restored||O<=0)return;let e=_(),t=Math.max(0,O+e);window.requestAnimationFrame(()=>{window.scrollTo({top:t}),A.current.restored=!0,A.current.lastScrollTop=t})},[N,v,O]),u(()=>{let e=A.current;function t(){e.restored=!0,e.rafId!==null&&window.cancelAnimationFrame(e.rafId),e.rafId=window.requestAnimationFrame(()=>{e.rafId=null;let t=window.scrollY??document.documentElement.scrollTop??0,n=_(),r=Math.max(0,t-n);Math.abs(t-e.lastScrollTop)>1&&(e.lastScrollTop=t,j.current(r))})}return window.addEventListener(`scroll`,t,{passive:!0}),()=>{e.rafId!==null&&(window.cancelAnimationFrame(e.rafId),e.rafId=null),window.removeEventListener(`scroll`,t)}},[v]);let P=f(()=>c(D,y),[D,y]),F=f(()=>C?.data?.ball_infos?.find(e=>e.channel_id===v),[C?.data?.ball_infos,v]);return g(m,{children:[F&&h(l,{ad:{materialUrl:F.material_url||``,jumpUrl:F.jump_url||``,name:F.name||``},onClick:()=>{x(()=>{F?.jump_url&&b.push(F.jump_url)})}}),P.map(e=>{let t=e.component,n=e.data.block_id||`block-${e.data.title||``}`;return h(t,{data:e.data},n)})]})}export{v as default};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
|
|
2
|
+
const e={backgroundColor:`var(--color-surface-panel-dark)`,backgroundImage:`
|
|
3
|
+
radial-gradient(88% 52% at 8% 3%, rgba(144, 18, 255, 0.32) 0%, rgba(144, 18, 255, 0.14) 32%, rgba(6, 3, 21, 0) 70%),
|
|
4
|
+
radial-gradient(72% 48% at 100% 100%, rgba(108, 67, 238, 0.16) 0%, rgba(6, 3, 21, 0) 70%),
|
|
5
|
+
linear-gradient(180deg, #080211 0%, #060315 100%)
|
|
6
|
+
`},t={backgroundImage:`var(--gradient-brand-tag)`,backgroundClip:`text`,WebkitBackgroundClip:`text`,color:`transparent`};export{t as authGradientTextStyle,e as authPanelBackgroundStyle};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Button as e}from"../../ui/button.mjs";import{ensureGuestIdentity as t}from"../../../store/modules/user-store.mjs";import{Box as n}from"../../ui/box.mjs";import{Checkbox as r}from"../../ui/checkbox.mjs";import{Input as i}from"../../ui/input.mjs";import{Text as a}from"../../ui/text.mjs";import{CloseIcon as o}from"../../../assets/icons/close-icon.mjs";import{EyeIcon as s}from"../../../assets/icons/eye-icon.mjs";import{EyeOffIcon as c}from"../../../assets/icons/eye-off-icon.mjs";import{AgreementDialog as l}from"./agreement-dialog.mjs";import{
|
|
2
|
+
"use client";import{Button as e}from"../../ui/button.mjs";import{ensureGuestIdentity as t}from"../../../store/modules/user-store.mjs";import{Box as n}from"../../ui/box.mjs";import{Checkbox as r}from"../../ui/checkbox.mjs";import{Input as i}from"../../ui/input.mjs";import{Text as a}from"../../ui/text.mjs";import{CloseIcon as o}from"../../../assets/icons/close-icon.mjs";import{EyeIcon as s}from"../../../assets/icons/eye-icon.mjs";import{EyeOffIcon as c}from"../../../assets/icons/eye-off-icon.mjs";import{AgreementDialog as l}from"./agreement-dialog.mjs";import{authGradientTextStyle as u,authPanelBackgroundStyle as d}from"./auth-page-styles.mjs";import{useCallback as f,useMemo as p,useState as m}from"react";import{jsx as h,jsxs as g}from"react/jsx-runtime";import{useTranslations as _}from"next-intl";function v(v){let y=_(`components.pages.login`),{onClose:b,onForgotPassword:x,onRegister:S,onSubmit:C,errorText:w}=v,[T,E]=m(``),[D,O]=m(``),[k,A]=m(!1),[j,M]=m(!1),[N,P]=m(!1),[F,I]=m(null),L=p(()=>T.trim().length>0&&D.length>0&&N&&!j,[T,D,N,j]),R=f(()=>{t(!0),S?.()},[S]);async function z(){if(L)try{M(!0),await C?.({email:T.trim(),password:D})}finally{M(!1)}}return g(n,{className:`min-h-screen w-full h-full bg-bg1 text-text1 flex flex-col`,style:d,children:[g(n,{className:`relative z-[1] mx-auto flex min-h-screen w-full max-w-[390px] flex-col justify-between px-[32px] pt-[calc(env(safe-area-inset-top)+152px)] pb-[calc(env(safe-area-inset-bottom)+40px)]`,children:[h(e,{type:`button`,variant:`ghost`,onClick:b,"aria-label":y(`loginClient.close`),className:`absolute top-[calc(env(safe-area-inset-top)+12px)] right-[24px] h-[32px] w-[32px] rounded-full border border-white/10 bg-white/5 !p-0 text-text2 backdrop-blur-[12px] hover:!bg-white/10 hover:text-text1`,children:h(o,{className:`h-[16px] w-[16px]`,"aria-hidden":`true`,focusable:`false`})}),g(n,{className:`flex w-full flex-col`,children:[h(a,{className:`text-[28px] leading-[32px] font-medium text-[#E6E6E6]`,children:y(`loginClient.title`)}),h(a,{className:`mt-[16px] text-[14px] leading-[24px] text-[#E6E6E6]`,children:y(`loginClient.subtitle`)}),g(`form`,{className:`mt-[48px]`,autoComplete:`off`,onSubmit:e=>{e.preventDefault(),z()},children:[h(n,{className:`flex h-[48px] items-center rounded-[8px] bg-white/10 px-[22px]`,children:h(i,{placeholder:y(`loginClient.emailPlaceholder`),type:`email`,name:`funhub-login-email`,value:T,onChange:e=>E(e.target.value),autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`none`,spellCheck:!1,"data-lpignore":`true`,"data-1p-ignore":`true`,"data-form-type":`other`,className:`!h-auto !rounded-none !bg-transparent !px-0 !py-0 !text-[14px] !leading-[20px] !text-text2 placeholder:!text-white/60`})}),g(n,{className:`mt-[24px] flex h-[48px] items-center justify-between rounded-[8px] bg-white/10 px-[16px]`,children:[h(i,{placeholder:y(`loginClient.passwordPlaceholder`),type:k?`text`:`password`,name:`funhub-login-password`,value:D,onChange:e=>O(e.target.value),autoComplete:`new-password`,autoCorrect:`off`,autoCapitalize:`none`,spellCheck:!1,"data-lpignore":`true`,"data-1p-ignore":`true`,"data-form-type":`other`,className:`flex-1 !h-auto !rounded-none !bg-transparent !px-0 !py-0 !text-[14px] !leading-[20px] !text-text2 placeholder:!text-white/60`}),h(e,{type:`button`,variant:`ghost`,className:`ml-[12px] h-[24px] w-[24px] cursor-pointer select-none !p-0 text-white/50 hover:text-white/80`,"aria-label":y(k?`loginClient.hidePassword`:`loginClient.showPassword`),onClick:()=>A(e=>!e),children:h(k?s:c,{className:`h-[20px] w-[20px]`,"aria-hidden":`true`,focusable:`false`})})]}),!!w&&h(n,{className:`mt-[8px] text-[12px] leading-[16px] text-theme5`,children:w})]}),g(n,{className:`mt-[16px] flex items-center justify-between text-[14px] leading-[24px] text-[#9DA3AC]`,children:[g(a,{as:`span`,className:`whitespace-nowrap`,children:[y(`loginClient.noAccount`),h(e,{type:`button`,variant:`link`,onClick:R,className:`inline h-auto !p-0 text-[14px] font-normal leading-[24px] !no-underline hover:opacity-80 hover:!no-underline`,style:u,children:y(`loginClient.registerLink`)})]}),h(e,{type:`button`,variant:`link`,onClick:x,className:`inline h-auto !p-0 text-[14px] font-normal leading-[24px] text-[#9DA3AC] !no-underline hover:text-text1 hover:!no-underline`,children:y(`loginClient.forgotPassword`)})]})]}),g(n,{className:`flex w-full flex-col`,children:[g(n,{className:`flex items-center`,children:[h(r,{checked:N,onCheckedChange:e=>P(e===!0),"aria-label":y(`loginClient.agreeToTerms`),className:`mt-px size-[16px] border-white/60 bg-transparent data-[checked]:border-theme5 data-[checked]:bg-theme5 data-[checked]:text-white`}),g(a,{as:`span`,className:`ml-[8px] text-[12px] leading-[16px] text-[#9DA3AC]`,children:[y(`loginClient.agreeToTermsPrefix`),g(e,{type:`button`,variant:`link`,className:`inline h-auto !p-0 text-[12px] font-normal leading-[16px] !no-underline hover:opacity-80 hover:!no-underline`,style:u,onClick:()=>I(`terms`),children:[`《`,y(`loginClient.userAgreement`),`》`]}),y(`loginClient.and`),g(e,{type:`button`,variant:`link`,className:`inline h-auto !p-0 text-[12px] font-normal leading-[16px] !no-underline hover:opacity-80 hover:!no-underline`,style:u,onClick:()=>I(`privacy`),children:[`《`,y(`loginClient.privacyPolicy`),`》`]})]})]}),h(e,{type:`button`,onClick:z,disabled:!L,className:`mt-[16px] h-[48px] w-full !rounded-[8px] !border-0 !px-0 !py-0 text-[16px] font-normal leading-[24px] text-white disabled:opacity-100 active:opacity-90 ${L?``:`!text-white/60`}`,style:{background:L?`var(--gradient-action-button)`:`linear-gradient(90deg, rgba(151, 86, 227, 0.45) 0%, rgba(108, 67, 238, 0.45) 100%)`},children:y(j?`loginClient.loggingIn`:`loginClient.login`)})]})]}),h(l,{type:F,onClose:()=>I(null)})]})}export{v as LoginClient};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Button as e}from"../../ui/button.mjs";import{pUserSendEmailCode as t}from"../../../service/generated/client.mjs";import{Box as n}from"../../ui/box.mjs";import{Checkbox as r}from"../../ui/checkbox.mjs";import{Input as i}from"../../ui/input.mjs";import{Text as a}from"../../ui/text.mjs";import{useLoginModalStore as o}from"../../../store/modules/login-modal-store.mjs";import{LeftArrowIcon as s}from"../../../assets/icons/left-arrow-icon.mjs";import{AgreementDialog as c}from"./agreement-dialog.mjs";import{
|
|
2
|
+
"use client";import{Button as e}from"../../ui/button.mjs";import{pUserSendEmailCode as t}from"../../../service/generated/client.mjs";import{Box as n}from"../../ui/box.mjs";import{Checkbox as r}from"../../ui/checkbox.mjs";import{Input as i}from"../../ui/input.mjs";import{Text as a}from"../../ui/text.mjs";import{useLoginModalStore as o}from"../../../store/modules/login-modal-store.mjs";import{LeftArrowIcon as s}from"../../../assets/icons/left-arrow-icon.mjs";import{AgreementDialog as c}from"./agreement-dialog.mjs";import{authGradientTextStyle as l,authPanelBackgroundStyle as u}from"./auth-page-styles.mjs";import{useMemo as d,useState as f}from"react";import{jsx as p,jsxs as m}from"react/jsx-runtime";import{useTranslations as h}from"next-intl";function g(g){let _=h(`components.pages.login`),{onClose:v,onLogin:y,onVerify:b}=g,{setVerifyStep:x}=o(),[S,C]=f(``),[w,T]=f(!1),[E,D]=f(``),[O,k]=f(!1),[A,j]=f(null),M=d(()=>S.trim().length>0&&O&&!w,[S,O,w]);function N(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}function P(e){C(e),E&&D(``)}async function F(){if(M)try{T(!0),D(``);let e=S.trim();if(!N(e)){D(_(`register.invalidEmail`));return}await t({email:e}),x(`register-verify`),b?.(e)}catch(e){D(e.message??_(`register.sendFailed`))}finally{T(!1)}}return m(n,{className:`min-h-screen w-full h-full bg-bg1 text-text1 flex flex-col`,style:u,children:[m(n,{className:`relative z-[1] mx-auto flex min-h-screen w-full max-w-[390px] flex-col justify-between px-[32px] pt-[calc(env(safe-area-inset-top)+152px)] pb-[calc(env(safe-area-inset-bottom)+40px)]`,children:[p(e,{type:`button`,variant:`ghost`,onClick:v,"aria-label":_(`register.back`),className:`absolute top-[calc(env(safe-area-inset-top)+12px)] left-[24px] h-[32px] w-[32px] rounded-full border border-white/10 bg-white/5 !p-0 text-text2 backdrop-blur-[12px] hover:!bg-white/10 hover:text-text1`,children:p(s,{className:`h-[16px] w-[16px]`,"aria-hidden":`true`,focusable:`false`})}),m(n,{className:`flex w-full flex-col`,children:[p(a,{className:`text-[28px] leading-[32px] font-medium text-[#E6E6E6]`,children:_(`loginClient.title`)}),p(a,{className:`mt-[16px] text-[14px] leading-[24px] text-[#E6E6E6]`,children:_(`loginClient.subtitle`)}),p(`form`,{className:`mt-[48px]`,autoComplete:`off`,onSubmit:e=>{e.preventDefault(),F()},children:p(n,{className:`flex h-[48px] items-center rounded-[8px] bg-white/10 px-[22px]`,children:p(i,{placeholder:_(`register.emailPlaceholder`),type:`email`,name:`funhub-register-email`,value:S,onChange:e=>P(e.target.value),autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`none`,spellCheck:!1,"data-lpignore":`true`,"data-1p-ignore":`true`,"data-form-type":`other`,className:`!h-auto !rounded-none !bg-transparent !px-0 !py-0 !text-[14px] !leading-[20px] !text-text2 placeholder:!text-white/60`})})}),!!E&&p(n,{className:`mt-[8px] min-h-[16px] text-[12px] leading-[16px] text-theme5`,children:E}),p(n,{className:`mt-[16px] flex items-center justify-between text-[14px] leading-[24px] text-[#9DA3AC]`,children:m(a,{as:`span`,className:`whitespace-nowrap`,children:[_(`register.hasAccount`),p(e,{type:`button`,variant:`link`,onClick:y,className:`inline h-auto !p-0 text-[14px] font-normal leading-[24px] !no-underline hover:opacity-80 hover:!no-underline`,style:l,children:_(`register.loginLink`)})]})})]}),m(n,{className:`flex w-full flex-col`,children:[m(n,{className:`flex items-center`,children:[p(r,{checked:O,onCheckedChange:e=>k(e===!0),"aria-label":_(`loginClient.agreeToTerms`),className:`mt-px size-[16px] border-white/60 bg-transparent data-[checked]:border-theme5 data-[checked]:bg-theme5 data-[checked]:text-white`}),m(a,{as:`span`,className:`ml-[8px] text-[12px] leading-[16px] text-[#9DA3AC]`,children:[_(`loginClient.agreeToTermsPrefix`),m(e,{type:`button`,variant:`link`,className:`inline h-auto !p-0 text-[12px] font-normal leading-[16px] !no-underline hover:opacity-80 hover:!no-underline`,style:l,onClick:()=>j(`terms`),children:[`《`,_(`loginClient.userAgreement`),`》`]}),_(`loginClient.and`),m(e,{type:`button`,variant:`link`,className:`inline h-auto !p-0 text-[12px] font-normal leading-[16px] !no-underline hover:opacity-80 hover:!no-underline`,style:l,onClick:()=>j(`privacy`),children:[`《`,_(`loginClient.privacyPolicy`),`》`]})]})]}),p(e,{type:`button`,onClick:F,disabled:!M,className:`mt-[16px] h-[48px] w-full !rounded-[8px] !border-0 !px-0 !py-0 text-[16px] font-normal leading-[24px] text-white disabled:opacity-100 active:opacity-90 ${M?``:`!text-white/60`}`,style:{background:M?`var(--gradient-action-button)`:`linear-gradient(90deg, rgba(151, 86, 227, 0.45) 0%, rgba(108, 67, 238, 0.45) 100%)`},children:_(w?`register.sending`:`register.getCode`)})]})]}),p(c,{type:A,onClose:()=>j(null)})]})}export{g as Register};
|