@funhub/platform 0.2.28 → 0.2.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/biz.d.mts +6 -4
  2. package/dist/biz.mjs +1 -1
  3. package/dist/cli/init/create-client.mjs +1 -1
  4. package/dist/cli/init/shared/constants.mjs +1 -1
  5. package/dist/cli/init/shared/create-project.mjs +1 -1
  6. package/dist/cli/init/shared/prompts.mjs +1 -1
  7. package/dist/cli/init/shared/template.mjs +1 -1
  8. package/dist/cli.mjs +2 -2
  9. package/dist/components/biz/basics/fullscreen-feed/runtime/client.mjs +1 -1
  10. package/dist/components/biz/basics/logo/variants/basic-logo/runtime/client.mjs +1 -1
  11. package/dist/components/biz/business/advertisement/ad-match.d.mts +0 -7
  12. package/dist/components/biz/business/advertisement/ad-match.mjs +1 -1
  13. package/dist/components/biz/business/advertisement/popup-ad/client.mjs +2 -2
  14. package/dist/components/biz/business/advertisement/popup-ad/material.d.mts +0 -3
  15. package/dist/components/biz/business/advertisement/popup-ad/schema.d.mts +0 -6
  16. package/dist/components/biz/business/advertisement/popup-ad/schema.mjs +1 -1
  17. package/dist/components/biz/business/channel-list/client.mjs +1 -1
  18. package/dist/components/biz/business/detail/shared/detail-operate.mjs +1 -1
  19. package/dist/components/biz/business/detail/shared/runtime-context-provider.mjs +1 -1
  20. package/dist/components/biz/business/detail/shared/use-video-detail-webview-bridge.mjs +1 -1
  21. package/dist/components/biz/business/detail/shared/video-hero.mjs +1 -1
  22. package/dist/components/biz/business/detail/video-detail-actions/client.mjs +1 -1
  23. package/dist/components/biz/business/detail/video-detail-info/client.mjs +1 -1
  24. package/dist/components/biz/business/detail/video-detail-recommend/client.mjs +1 -1
  25. package/dist/components/biz/business/header-search/header-avatar-logo-search/client.mjs +1 -1
  26. package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
  27. package/dist/components/biz/business/home-recommend/shared/home-recommend-preview.mjs +1 -1
  28. package/dist/components/biz/business/image-text-recommend/client.mjs +1 -1
  29. package/dist/components/biz/business/index.d.mts +5 -3
  30. package/dist/components/biz/business/large-feature-grid/card-item.mjs +1 -1
  31. package/dist/components/biz/business/large-feature-grid/client.mjs +1 -1
  32. package/dist/components/biz/business/large-feature-grid/schema.mjs +1 -1
  33. package/dist/components/biz/business/marquee/client.mjs +1 -1
  34. package/dist/components/biz/business/profile/index.d.mts +5 -3
  35. package/dist/components/biz/business/profile/profile-header/client.d.mts +4 -2
  36. package/dist/components/biz/business/profile/profile-header/client.mjs +1 -1
  37. package/dist/components/biz/business/profile/profile-header/index.d.mts +4 -2
  38. package/dist/components/biz/business/profile/profile-header/material.d.mts +48 -6
  39. package/dist/components/biz/business/profile/profile-header/material.mjs +1 -1
  40. package/dist/components/biz/business/profile/profile-header/my-client.d.mts +12 -0
  41. package/dist/components/biz/business/profile/profile-header/my-client.mjs +2 -0
  42. package/dist/components/biz/business/profile/profile-header/my-profile-actions.mjs +2 -0
  43. package/dist/components/biz/business/profile/profile-header/my-profile-header.mjs +2 -0
  44. package/dist/components/biz/business/profile/profile-header/schema.d.mts +15 -5
  45. package/dist/components/biz/business/profile/profile-header/schema.mjs +1 -1
  46. package/dist/components/biz/business/profile/profile-header/shared.mjs +2 -0
  47. package/dist/components/biz/business/profile/profile-header/user-profile-avatar.mjs +1 -1
  48. package/dist/components/biz/business/profile/profile-header/user-profile-cover-background.mjs +1 -1
  49. package/dist/components/biz/business/profile/profile-header/visitor-client.d.mts +12 -0
  50. package/dist/components/biz/business/profile/profile-header/visitor-client.mjs +2 -0
  51. package/dist/components/biz/business/profile/profile-header/visitor-profile-actions.mjs +2 -0
  52. package/dist/components/biz/business/profile/profile-header/visitor-profile-header.mjs +2 -0
  53. package/dist/components/biz/business/profile/profile-main/client.d.mts +2 -0
  54. package/dist/components/biz/business/profile/profile-main/client.mjs +1 -1
  55. package/dist/components/biz/business/profile/profile-main/index.d.mts +2 -2
  56. package/dist/components/biz/business/profile/profile-main/material.d.mts +3 -0
  57. package/dist/components/biz/business/profile/profile-main/schema.d.mts +9 -3
  58. package/dist/components/biz/business/profile/profile-main/schema.mjs +1 -1
  59. package/dist/components/biz/business/profile/profile-main/shell.d.mts +7 -0
  60. package/dist/components/biz/business/profile/profile-main/shell.mjs +1 -1
  61. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.d.mts +5 -1
  62. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.mjs +1 -1
  63. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/video-waterfall.mjs +1 -1
  64. package/dist/components/biz/business/profile/profile-main/tabs/editor-preview-waterfall.mjs +2 -0
  65. package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.d.mts +5 -1
  66. package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.mjs +1 -1
  67. package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.d.mts +5 -1
  68. package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.mjs +1 -1
  69. package/dist/components/biz/business/profile/profile-main/tabs/publish-tab/client.d.mts +3 -0
  70. package/dist/components/biz/business/profile/profile-main/tabs/publish-tab/client.mjs +1 -1
  71. package/dist/components/biz/business/profile/profile-main/variants.d.mts +28 -3
  72. package/dist/components/biz/business/profile/profile-main/variants.mjs +1 -1
  73. package/dist/components/biz/business/search-history/client.mjs +1 -1
  74. package/dist/components/biz/business/search-input/client.mjs +1 -1
  75. package/dist/components/biz/business/shortcut-grid/client.mjs +1 -1
  76. package/dist/components/biz/business/tab-bar/client.mjs +1 -1
  77. package/dist/components/biz/business/text-recommend/client.mjs +1 -1
  78. package/dist/components/common/analytics-init/page-lifecycle-tracker.mjs +1 -1
  79. package/dist/components/common/background-preview-modal/background-preview-modal.mjs +1 -1
  80. package/dist/components/common/list/waterfall-recommend/waterfall-recommend.mjs +1 -1
  81. package/dist/components/common/popup-video/index.mjs +1 -1
  82. package/dist/components/common/series-episodes/index.mjs +1 -1
  83. package/dist/components/common/tab-bar/index.mjs +1 -1
  84. package/dist/components/common/top-nav-bar/client.mjs +1 -1
  85. package/dist/components/common/video-player/style.module.mjs +0 -4
  86. package/dist/components/common/video-player/video-blind-ad-overlay.mjs +1 -1
  87. package/dist/components/common/video-player/video-preroll-ad-overlay.mjs +1 -1
  88. package/dist/components/pages/collection-add/page.mjs +1 -1
  89. package/dist/components/pages/edit/page.mjs +1 -1
  90. package/dist/components/pages/fullscreen-feed/page.mjs +1 -1
  91. package/dist/components/pages/post-detail/post-detail-client.mjs +1 -1
  92. package/dist/components/pages/profile/layout.d.mts +2 -0
  93. package/dist/components/pages/profile/page.mjs +1 -1
  94. package/dist/components/pages/search/hot-recommend.mjs +1 -1
  95. package/dist/components/pages/search/hot-search.mjs +1 -1
  96. package/dist/components/pages/search/page-client.mjs +1 -1
  97. package/dist/components/pages/search/search-result/search-all.mjs +1 -1
  98. package/dist/components/pages/search/search-result/search-video-info.mjs +1 -1
  99. package/dist/components/pages/search/top-header.mjs +1 -1
  100. package/dist/components/pages/search-result/page-client.mjs +1 -1
  101. package/dist/components/pages/search-result/search-all.mjs +1 -1
  102. package/dist/components/pages/search-result/search-tab.mjs +1 -1
  103. package/dist/components/pages/search-result/search-user.mjs +1 -1
  104. package/dist/components/pages/search-result/top-header.mjs +1 -1
  105. package/dist/components/pages/settings/_components/settings.mjs +1 -1
  106. package/dist/components/pages/video-detail/video-detail-client.mjs +1 -1
  107. package/dist/components/pages/video-list/video-list-client.mjs +1 -1
  108. package/dist/components/pages/video-list/video-list-recommend-item.mjs +1 -1
  109. package/dist/components/pages/video-list/video-list-skeleton.mjs +1 -1
  110. package/dist/components/ui/badge.d.mts +1 -1
  111. package/dist/components/ui/button.d.mts +2 -2
  112. package/dist/components/ui/empty.d.mts +1 -1
  113. package/dist/components/ui/item.d.mts +2 -2
  114. package/dist/components/ui/toggle.d.mts +1 -1
  115. package/dist/hooks/use-content-operate.mjs +1 -1
  116. package/dist/i18n/locales/en.mjs +1 -1
  117. package/dist/i18n/locales/zh-CN.mjs +1 -1
  118. package/dist/materials.d.mts +2 -2
  119. package/dist/materials.mjs +1 -1
  120. package/dist/service/advertisement.d.mts +0 -4
  121. package/dist/service/advertisement.mjs +1 -1
  122. package/dist/utils/common.mjs +1 -1
  123. package/dist/utils/http.mjs +1 -1
  124. package/dist/utils/tracking.d.mts +11 -3
  125. package/dist/utils/tracking.mjs +1 -1
  126. package/dist/utils/use-compatible-router.mjs +1 -1
  127. package/dist/utils.d.mts +2 -2
  128. package/dist/utils.mjs +1 -1
  129. package/package.json +1 -1
  130. package/theme.css +0 -47
@@ -1,4 +1,6 @@
1
1
 
2
2
  import { ProfileHeaderInspectorProps, UserProfileHeaderAuthConfig, UserProfileHeaderClientProps, profileHeaderInspectorDefaultProps, profileHeaderInspectorPropsSchema } from "./schema.mjs";
3
- import { UserProfileHeaderClient, defaultBackground } from "./client.mjs";
4
- import { profileHeaderMaterial, profileHeaderMaterialWithDisabledBackground } from "./material.mjs";
3
+ import { UserProfileHeaderClient } from "./client.mjs";
4
+ import { MyProfileHeaderClient } from "./my-client.mjs";
5
+ import { VisitorProfileHeaderClient } from "./visitor-client.mjs";
6
+ import { myProfileHeaderMaterial, profileHeaderMaterial, profileHeaderMaterialWithDisabledBackground, visitorProfileHeaderMaterial } from "./material.mjs";
@@ -1,7 +1,9 @@
1
1
 
2
+ import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
2
3
  import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
3
4
  import "../../../../../utils.mjs";
4
- import { UserProfileHeaderClient } from "./client.mjs";
5
+ import { MyProfileHeaderClient } from "./my-client.mjs";
6
+ import { VisitorProfileHeaderClient } from "./visitor-client.mjs";
5
7
  import * as zod from "zod";
6
8
  import * as react_jsx_runtime0 from "react/jsx-runtime";
7
9
  import * as zod_v4_core0 from "zod/v4/core";
@@ -10,10 +12,14 @@ import * as zod_v4_core0 from "zod/v4/core";
10
12
  declare const profileHeaderMaterial: DefineMaterialOption<({
11
13
  mode,
12
14
  ...props
13
- }: React.ComponentProps<typeof UserProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, ({
15
+ }: React.ComponentProps<typeof MyProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, ({
14
16
  mode,
15
17
  ...props
16
- }: React.ComponentProps<typeof UserProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, zod.ZodObject<{
18
+ }: React.ComponentProps<typeof MyProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, zod.ZodObject<{
19
+ readonly defaultBackgroundSrc: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
20
+ readonly enableCustomBackground: zod.ZodBoolean & SchemaHasDefaultValue;
21
+ readonly showInteractionSection: zod.ZodBoolean & SchemaHasDefaultValue;
22
+ } & {
17
23
  mode: zod.ZodOptional<zod.ZodEnum<{
18
24
  renderer: "renderer";
19
25
  editor: "editor";
@@ -22,14 +28,50 @@ declare const profileHeaderMaterial: DefineMaterialOption<({
22
28
  declare const profileHeaderMaterialWithDisabledBackground: DefineMaterialOption<({
23
29
  mode,
24
30
  ...props
25
- }: React.ComponentProps<typeof UserProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, ({
31
+ }: React.ComponentProps<typeof MyProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, ({
26
32
  mode,
27
33
  ...props
28
- }: React.ComponentProps<typeof UserProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, zod.ZodObject<{
34
+ }: React.ComponentProps<typeof MyProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, zod.ZodObject<{
35
+ readonly defaultBackgroundSrc: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
36
+ readonly enableCustomBackground: zod.ZodBoolean & SchemaHasDefaultValue;
37
+ readonly showInteractionSection: zod.ZodBoolean & SchemaHasDefaultValue;
38
+ } & {
29
39
  mode: zod.ZodOptional<zod.ZodEnum<{
30
40
  renderer: "renderer";
31
41
  editor: "editor";
32
42
  }>>;
33
43
  }, zod_v4_core0.$strip>, "profile-header-with-disabled-background", "内容组件">;
44
+ declare const myProfileHeaderMaterial: DefineMaterialOption<({
45
+ mode,
46
+ ...props
47
+ }: React.ComponentProps<typeof MyProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, ({
48
+ mode,
49
+ ...props
50
+ }: React.ComponentProps<typeof MyProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, zod.ZodObject<{
51
+ readonly defaultBackgroundSrc: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
52
+ readonly enableCustomBackground: zod.ZodBoolean & SchemaHasDefaultValue;
53
+ readonly showInteractionSection: zod.ZodBoolean & SchemaHasDefaultValue;
54
+ } & {
55
+ mode: zod.ZodOptional<zod.ZodEnum<{
56
+ renderer: "renderer";
57
+ editor: "editor";
58
+ }>>;
59
+ }, zod_v4_core0.$strip>, "my-profile-header", "内容组件">;
60
+ declare const visitorProfileHeaderMaterial: DefineMaterialOption<({
61
+ mode,
62
+ ...props
63
+ }: React.ComponentProps<typeof VisitorProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, ({
64
+ mode,
65
+ ...props
66
+ }: React.ComponentProps<typeof VisitorProfileHeaderClient>) => react_jsx_runtime0.JSX.Element, zod.ZodObject<{
67
+ readonly defaultBackgroundSrc: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
68
+ readonly enableCustomBackground: zod.ZodBoolean & SchemaHasDefaultValue;
69
+ readonly showInteractionSection: zod.ZodBoolean & SchemaHasDefaultValue;
70
+ } & {
71
+ mode: zod.ZodOptional<zod.ZodEnum<{
72
+ renderer: "renderer";
73
+ editor: "editor";
74
+ }>>;
75
+ }, zod_v4_core0.$strip>, "visitor-profile-header", "内容组件">;
34
76
  //#endregion
35
- export { profileHeaderMaterial, profileHeaderMaterialWithDisabledBackground };
77
+ export { myProfileHeaderMaterial, profileHeaderMaterial, profileHeaderMaterialWithDisabledBackground, visitorProfileHeaderMaterial };
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineMaterial as e}from"../../../../../utils/schema/material.mjs";import{UserProfileHeaderClient as t}from"./client.mjs";import{profileHeaderInspectorPropsSchema as n}from"./schema.mjs";import{jsx as r}from"react/jsx-runtime";function i(e){return e===`editor`?{id:void 0,requireLogin:!0,cookieToken:``,cookieUserId:``,token:``,currentUserId:``}:{}}const a=e({type:`profile-header`,category:`内容组件`,name:`用户信息模块(有背景图)`,icon:`/static/components-thumb/user_profile_with_background.png`,serverComponent:({mode:e=`renderer`,...n})=>r(t,{...n,...i(e),mode:e}),clientComponent:({mode:e=`renderer`,...n})=>r(t,{...n,...i(e),mode:e}),propsSchema:n}),o=e({type:`profile-header-with-disabled-background`,category:`内容组件`,name:`用户信息模块(无背景图)`,icon:`/static/components-thumb/user_profile_plain.png`,serverComponent:({mode:e=`renderer`,...n})=>r(t,{...n,...i(e),mode:e,enableCustomBackground:!1}),clientComponent:({mode:e=`renderer`,...n})=>r(t,{...n,...i(e),mode:e,enableCustomBackground:!1}),propsSchema:n});export{a as profileHeaderMaterial,o as profileHeaderMaterialWithDisabledBackground};
2
+ import{defineMaterial as e}from"../../../../../utils/schema/material.mjs";import{MyProfileHeaderClient as t}from"./my-client.mjs";import{profileHeaderInspectorPropsSchema as n}from"./schema.mjs";import{VisitorProfileHeaderClient as r}from"./visitor-client.mjs";import{jsx as i}from"react/jsx-runtime";function a(e){return e===`editor`?{id:`editor-preview-user`,requireLogin:!1,cookieToken:``,cookieUserId:``,token:``,currentUserId:``}:{}}const o=e({type:`profile-header`,category:`内容组件`,name:`用户信息模块(有背景图)`,icon:`/static/components-thumb/user_profile_with_background.png`,serverComponent:({mode:e=`renderer`,...n})=>i(t,{...n,...a(e),mode:e}),clientComponent:({mode:e=`renderer`,...n})=>i(t,{...n,...a(e),mode:e}),propsSchema:n}),s=e({type:`profile-header-with-disabled-background`,category:`内容组件`,name:`用户信息模块(无背景图)`,icon:`/static/components-thumb/user_profile_plain.png`,serverComponent:({mode:e=`renderer`,...n})=>i(t,{...n,...a(e),mode:e,enableCustomBackground:!1,showBackgroundImage:!1}),clientComponent:({mode:e=`renderer`,...n})=>i(t,{...n,...a(e),mode:e,enableCustomBackground:!1,showBackgroundImage:!1}),propsSchema:n}),c=e({type:`my-profile-header`,category:`内容组件`,name:`我的主页模块`,icon:`/static/components-thumb/user_profile_with_background.png`,serverComponent:({mode:e=`renderer`,...n})=>i(t,{...n,...a(e),mode:e}),clientComponent:({mode:e=`renderer`,...n})=>i(t,{...n,...a(e),mode:e}),propsSchema:n}),l=e({type:`visitor-profile-header`,category:`内容组件`,name:`他人主页模块`,icon:`/static/components-thumb/user_profile_with_background.png`,serverComponent:({mode:e=`renderer`,...t})=>i(r,{...t,...a(e),mode:e}),clientComponent:({mode:e=`renderer`,...t})=>i(r,{...t,...a(e),mode:e}),propsSchema:n});export{c as myProfileHeaderMaterial,o as profileHeaderMaterial,s as profileHeaderMaterialWithDisabledBackground,l as visitorProfileHeaderMaterial};
@@ -0,0 +1,12 @@
1
+
2
+ import { UserProfileHeaderClientProps } from "./schema.mjs";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region components/biz/business/profile/profile-header/my-client.d.ts
6
+ /**
7
+ * 本人主页头部组件入口。
8
+ * 在编辑器里强制走本人视角,避免与他人主页配置互相干扰。
9
+ */
10
+ declare function MyProfileHeaderClient(props: UserProfileHeaderClientProps): react_jsx_runtime0.JSX.Element;
11
+ //#endregion
12
+ export { MyProfileHeaderClient };
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{UserProfileHeaderClient as e}from"./client.mjs";import{jsx as t}from"react/jsx-runtime";function n(n){let{mode:r=`renderer`,currentUserId:i,id:a,requireLogin:o=!1,...s}=n,c=i||`editor-preview-user`,l=r===`editor`?c:a||i;return t(e,{...s,mode:r,requireLogin:o,currentUserId:c,id:l})}export{n as MyProfileHeaderClient};
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{Button as e}from"../../../../ui/button.mjs";import{jsx as t}from"react/jsx-runtime";import{useTranslations as n}from"next-intl";import r from"next/link";function i({onTrack:i}){return t(r,{href:`/edit`,onClick:i,children:t(e,{variant:`ghost`,className:`h-7 min-w-0 rounded-full border border-[rgba(255,255,255,0.8)] bg-[rgba(11,3,23,0.5)] px-3 py-0 text-[12px] font-medium leading-[18px] text-[rgba(255,255,255,0.8)] shadow-none backdrop-blur-[2px] hover:bg-[rgba(11,3,23,0.65)] hover:text-[rgba(255,255,255,0.9)]`,children:n(`components.pages.profile`)(`client.editProfile`)})})}export{i as EditProfileButton};
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{trackProfilePageClick as e}from"../tracking.mjs";import{EditProfileButton as t}from"./my-profile-actions.mjs";import{ProfileHeaderContent as n}from"./shared.mjs";import{jsx as r}from"react/jsx-runtime";function i({userInfo:i,interactionStats:a,showInteractionSection:o,canEditProfileMedia:s,shouldPromptLoginOnMediaClick:c,storeIsLogin:l,isMine:u,isAuthenticated:d,onOpenLoginDialog:f}){return r(n,{userInfo:i,interactionStats:a,showInteractionSection:o,canEditProfileMedia:s,shouldPromptLoginOnMediaClick:c,storeIsLogin:l,isMine:u,onOpenLoginDialog:f,actionSlot:d?r(t,{onTrack:t=>e(t,`edit_profile`)}):null})}export{i as MyProfileHeader};
@@ -1,5 +1,5 @@
1
1
 
2
- import { InferSchemaProps } from "../../../../../utils/schema/schema.mjs";
2
+ import { InferSchemaProps, SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
3
3
  import "../../../../../utils.mjs";
4
4
  import * as zod from "zod";
5
5
  import * as zod_v4_core0 from "zod/v4/core";
@@ -9,21 +9,31 @@ import * as zod_v4_core0 from "zod/v4/core";
9
9
  * 用户资料头部物料 inspector 配置。
10
10
  */
11
11
  declare const profileHeaderInspectorPropsSchema: zod.ZodObject<{
12
+ readonly defaultBackgroundSrc: zod.ZodOptional<zod.ZodString> & SchemaHasDefaultValue;
13
+ readonly enableCustomBackground: zod.ZodBoolean & SchemaHasDefaultValue;
14
+ readonly showInteractionSection: zod.ZodBoolean & SchemaHasDefaultValue;
15
+ } & {
12
16
  mode: zod.ZodOptional<zod.ZodEnum<{
13
17
  renderer: "renderer";
14
18
  editor: "editor";
15
19
  }>>;
16
20
  }, zod_v4_core0.$strip>;
17
- declare const profileHeaderInspectorDefaultProps: {};
21
+ declare const profileHeaderInspectorDefaultProps: {
22
+ readonly defaultBackgroundSrc: string;
23
+ readonly enableCustomBackground: boolean;
24
+ readonly showInteractionSection: boolean;
25
+ };
18
26
  type ProfileHeaderInspectorProps = InferSchemaProps<typeof profileHeaderInspectorPropsSchema>;
19
27
  interface UserProfileHeaderAuthConfig {
20
28
  headers?: Record<string, string>;
21
29
  }
22
- interface UserProfileHeaderClientProps extends ProfileHeaderInspectorProps {
30
+ interface UserProfileHeaderClientProps extends Partial<ProfileHeaderInspectorProps> {
23
31
  /** 用户 ID。 */
24
32
  id?: string;
25
- /** 是否允许自定义背景图。 */
26
- enableCustomBackground?: boolean;
33
+ /** 是否为本人视角,优先级高于组件内部判断。 */
34
+ isMine?: boolean;
35
+ /** 是否展示背景图。 */
36
+ showBackgroundImage?: boolean;
27
37
  /** 是否显示返回按钮。 */
28
38
  showBackButton?: boolean;
29
39
  /** 是否要求登录。 */
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineComponentPropsSchema as e,getSchemaDefaultProps as t}from"../../../../../utils/schema/schema.mjs";const n=e(e=>({})),r=t(n);export{r as profileHeaderInspectorDefaultProps,n as profileHeaderInspectorPropsSchema};
2
+ import{defineComponentPropsSchema as e,getSchemaDefaultProps as t}from"../../../../../utils/schema/schema.mjs";const n=e(e=>({defaultBackgroundSrc:e.string(``,{label:`默认背景`,required:!1}),enableCustomBackground:e.boolean(!0,{fieldType:`switch`,label:`允许用户替换背景`,required:!0}),showInteractionSection:e.boolean(!0,{fieldType:`switch`,label:`是否展示互动组件`,required:!0})})),r=t(n);export{r as profileHeaderInspectorDefaultProps,n as profileHeaderInspectorPropsSchema};
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{cn as e}from"../../../../../utils/cn.mjs";import{Box as t}from"../../../../ui/box.mjs";import{Text as n}from"../../../../ui/text.mjs";import{UserProfileAvatar as r}from"./user-profile-avatar.mjs";import{jsx as i,jsxs as a}from"react/jsx-runtime";const o=`/images/mine/img_mine_head_bg.png`;function s(e){let t=typeof e==`string`?Number(String(e).trim()):Number(e??0);if(!Number.isFinite(t)||t<0)return`0`;let n=Math.floor(t);function r(e,t){return`${e.toFixed(1).replace(/\.0$/,``)}${t}`}return n<1e3?String(n):n<1e6?r(n/1e3,`k`):n<1e9?r(n/1e6,`m`):r(n/1e9,`b`)}function c({label:e,value:r}){return a(t,{className:`min-w-[64px] text-center`,children:[i(n,{as:`p`,className:`text-[16px] font-semibold leading-[22px] text-white`,children:s(r)}),i(n,{as:`p`,className:`mt-0.5 text-[12px] leading-[18px] text-[rgba(255,255,255,0.66)]`,children:e})]})}function l({userInfo:o,interactionStats:s,showInteractionSection:l,canEditProfileMedia:u,shouldPromptLoginOnMediaClick:d,storeIsLogin:f,isMine:p,onOpenLoginDialog:m,actionSlot:h}){let g=o.name||``,_=o.description||o.signature||``;return a(t,{className:`relative z-10 mt-[56px]`,children:[a(t,{className:`flex items-start justify-between gap-4`,children:[a(t,{className:`w-[116px] shrink-0`,children:[i(r,{isMine:u,src:o.avatar||``,alt:g||`avatar`,onUnauthorizedClick:d?m:void 0}),i(t,{className:`pt-3`,children:i(n,{as:`p`,className:`break-words text-center text-[18px] font-semibold leading-[26px] text-[var(--color-text-primary)]`,onClick:()=>{!f&&p&&m()},children:g})})]}),a(t,{className:`min-w-0 flex-1 pt-1`,children:[l?i(t,{className:`flex items-start justify-end gap-6`,children:s.map(e=>i(c,{label:e.label,value:e.value},e.key))}):null,l&&h?i(t,{className:e(`mt-6 flex justify-end gap-3`),children:h}):null]})]}),_&&i(t,{className:`pt-8`,children:i(n,{as:`p`,className:`line-clamp-2 break-words text-[14px] leading-[20px] text-[rgba(255,255,255,0.8)]`,children:_})})]})}export{l as ProfileHeaderContent,o as defaultBackground};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{cn as e}from"../../../../../utils/cn.mjs";import{useUserStore as t}from"../../../../../store/modules/user-store.mjs";import{gUserGetUserEditInfo as n,pUserEditUserInfo as r}from"../../../../../service/generated/client.mjs";import{uploadFile as i}from"../../../../../utils/upload-file.mjs";import{Button as a}from"../../../../ui/button.mjs";import{Avatar as o,AvatarFallback as s,AvatarImage as c}from"../../../../ui/avatar.mjs";import{Box as l}from"../../../../ui/box.mjs";import{Input as u}from"../../../../ui/input.mjs";import{Dialog as d,DialogContent as f}from"../../../../ui/dialog.mjs";import{Text as p}from"../../../../ui/text.mjs";import{useDeleteRequest as m}from"../../../../../hooks/query/use-query.mjs";import{trackProfilePageClick as h}from"../tracking.mjs";import{ImageCropModal as g}from"../../../../common/image-crop-modal/image-crop-modal.mjs";import{toast as _}from"sonner";import{useRef as v,useState as y}from"react";import{Fragment as b,jsx as x,jsxs as S}from"react/jsx-runtime";import{useTranslations as C}from"next-intl";const w=`https://guadd-sg-ccs-sing-dev.s3.ap-southeast-1.amazonaws.com/default/default_avatar.png`,T=[`image/jpeg`,`image/png`];function E(e){let t=e.name.toLowerCase(),n=e.type.toLowerCase();return T.includes(n)||/\.(?:jpg|jpeg|png)$/i.test(t)}function D({isMine:T,src:D,alt:O,onUnauthorizedClick:k}){let A=C(`components.pages.profile`),j=v(null),{userId:M,setUserInfo:N,userInfo:P}=t(),F=m(),[I,L]=y(!1),[R,z]=y(!1),[B,V]=y(``),[H,U]=y(!1);function W(e){if(h(e,`avatar`),!H){if(T){L(!0);return}k?.()}}function G(){B&&(URL.revokeObjectURL(B),V(``))}function K(){L(!1)}function q(){H||j.current?.click()}async function J(e){let t=(await n({user_id:String(M)})).data;return{user_id:String(M),nick_name:t?.nick_name??P?.nick_name??void 0,avatar:e||void 0,signature:t?.signature??P?.signature??void 0,gender:t?.gender??P?.gender??void 0}}function Y(e){let t=e.target.files?.[0];if(t){if(!E(t)){_.error(A(`client.imageTypeInvalid`)),e.target&&(e.target.value=``);return}if(t.size>5242880){_.error(A(`client.imageTooLarge`)),e.target&&(e.target.value=``);return}V(URL.createObjectURL(t)),z(!0),e.target&&(e.target.value=``)}}async function X(e){if(!M){_.error(A(`client.loginRequiredForUpload`));return}try{U(!0);let t=await i(new File([e],`avatar.jpg`,{type:`image/jpeg`}),1),n=await J(t.objectKey);await r(n),N({...P,nick_name:n.nick_name,avatar:t.objectKey,signature:n.signature,gender:n.gender}),F([`user-profile`,`mine`]),F([`user-profile`,`profile`,String(M)]),F([`user-edit-info`,String(M)]),L(!1),z(!1),_.success(A(`client.mediaUpdateSuccess`))}catch(e){console.error(`上传头像失败`,e),_.error(A(`client.uploadFailed`))}finally{G(),U(!1)}}function Z(){z(!1),G()}return S(b,{children:[T||k?x(a,{variant:`ghost`,size:`icon`,className:`h-[72px] w-[72px] rounded-full p-0 hover:bg-transparent`,onClick:W,"aria-label":`打开头像预览`,children:x(l,{className:`flex h-[72px] w-[72px] items-center justify-center rounded-full bg-[var(--color-surface-white20)]`,children:S(o,{className:`h-[60px] w-[60px] border-[3px] border-[var(--color-surface-white20)]`,children:[x(c,{src:D||w,alt:O||`avatar`}),x(s,{})]})})}):x(l,{className:`flex h-[72px] w-[72px] items-center justify-center rounded-full bg-[var(--color-surface-white20)]`,children:S(o,{className:`h-[60px] w-[60px] border-[3px] border-[var(--color-surface-white20)]`,children:[x(c,{src:D||w,alt:O||`avatar`}),x(s,{})]})}),x(d,{open:I,onOpenChange:K,children:x(f,{showCloseButton:!1,className:`bg-transparent !m-0 !p-0 !fixed !inset-0 !w-screen !h-screen !max-w-none !rounded-none !top-0 !left-0 !translate-x-0 !translate-y-0 !transform-none z-[9999] !pointer-events-auto `,children:S(l,{className:`fixed top-0 left-0 right-0 bottom-0 z-50 bg-black flex h-full w-full flex-col items-center justify-center`,children:[x(a,{variant:`ghost`,size:`icon`,className:`absolute left-0 top-0 h-14 w-14 text-text1 hover:bg-transparent hover:text-[var(--color-text-secondary)]`,onClick:K,"aria-label":`关闭头像预览`,children:x(`svg`,{className:`w-4 h-4`,xmlns:`http://www.w3.org/2000/svg`,fill:`currentColor`,viewBox:`0 0 16 16`,children:x(`path`,{d:`M14.55.2a.889.889 0 0 1 1.25 1.25l-.06.067L9.255 8l6.483 6.482.06.069a.888.888 0 0 1-1.25 1.25l-.067-.062L8 9.256l-6.482 6.483A.888.888 0 1 1 .26 14.482L6.742 8 .26 1.517.2 1.45A.888.888 0 0 1 1.45.2l.067.062 6.482 6.482L14.482.261l.068-.062Z`})})}),S(o,{className:`w-50 h-50`,children:[x(c,{src:D||w,alt:O||`avatar`}),x(s,{})]}),S(a,{variant:`ghost`,className:e(`absolute bottom-8 left-0 right-0 mx-auto flex w-[366px] max-w-[90%] items-center justify-between rounded-[12px] bg-[var(--color-surface-white10)] p-[12px] transition-colors hover:bg-[var(--color-surface-white20)]`,`active:scale-95 h-auto`),onClick:q,disabled:H,children:[x(p,{as:`span`,className:`text-base font-medium text-text1`,children:H?`上传中...`:`更换头像`}),S(`svg`,{className:`w-6 h-6 text-text1`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,children:[x(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z`}),x(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 13a3 3 0 11-6 0 3 3 0 016 0z`})]})]})]})})}),x(u,{ref:j,type:`file`,accept:`.jpg,.jpeg,.png,image/jpeg,image/png`,className:`hidden`,onChange:Y}),x(g,{open:R,onClose:Z,imageSrc:B,onConfirm:X})]})}export{D as UserProfileAvatar};
2
+ "use client";import{cn as e}from"../../../../../utils/cn.mjs";import{useUserStore as t}from"../../../../../store/modules/user-store.mjs";import{gUserGetUserEditInfo as n,pUserEditUserInfo as r}from"../../../../../service/generated/client.mjs";import{uploadFile as i}from"../../../../../utils/upload-file.mjs";import{Button as a}from"../../../../ui/button.mjs";import{Avatar as o,AvatarFallback as s,AvatarImage as c}from"../../../../ui/avatar.mjs";import{Box as l}from"../../../../ui/box.mjs";import{Input as u}from"../../../../ui/input.mjs";import{Dialog as d,DialogContent as f}from"../../../../ui/dialog.mjs";import{Text as p}from"../../../../ui/text.mjs";import{useDeleteRequest as m}from"../../../../../hooks/query/use-query.mjs";import{trackProfilePageClick as h}from"../tracking.mjs";import{ImageCropModal as g}from"../../../../common/image-crop-modal/image-crop-modal.mjs";import{toast as _}from"sonner";import{useRef as v,useState as y}from"react";import{Fragment as b,jsx as x,jsxs as S}from"react/jsx-runtime";import{useTranslations as C}from"next-intl";const w=`https://guadd-sg-ccs-sing-dev.s3.ap-southeast-1.amazonaws.com/default/default_avatar.png`,T=[`image/jpeg`,`image/png`];function E(e){let t=e.name.toLowerCase(),n=e.type.toLowerCase();return T.includes(n)||/\.(?:jpg|jpeg|png)$/i.test(t)}function D({isMine:T,src:D,alt:O,onUnauthorizedClick:k}){let A=C(`components.pages.profile`),j=v(null),{userId:M,setUserInfo:N,userInfo:P}=t(),F=m(),[I,L]=y(!1),[R,z]=y(!1),[B,V]=y(``),[H,U]=y(!1);function W(e){if(h(e,`avatar`),!H){if(T){L(!0);return}k?.()}}function G(){B&&(URL.revokeObjectURL(B),V(``))}function K(){L(!1)}function q(){H||j.current?.click()}async function J(e){let t=(await n({user_id:String(M)})).data;return{user_id:String(M),nick_name:t?.nick_name??P?.nick_name??void 0,avatar:e||void 0,signature:t?.signature??P?.signature??void 0,gender:t?.gender??P?.gender??void 0}}function Y(e){let t=e.target.files?.[0];if(t){if(!E(t)){_.error(A(`client.imageTypeInvalid`)),e.target&&(e.target.value=``);return}if(t.size>5242880){_.error(A(`client.imageTooLarge`)),e.target&&(e.target.value=``);return}V(URL.createObjectURL(t)),z(!0),e.target&&(e.target.value=``)}}async function X(e){if(!M){_.error(A(`client.loginRequiredForUpload`));return}try{U(!0);let t=await i(new File([e],`avatar.jpg`,{type:`image/jpeg`}),1),n=await J(t.objectKey);await r(n),N({...P,nick_name:n.nick_name,avatar:t.objectKey,signature:n.signature,gender:n.gender}),F([`user-profile`,`mine`]),F([`user-profile`,`profile`,String(M)]),F([`user-edit-info`,String(M)]),L(!1),z(!1),_.success(A(`client.mediaUpdateSuccess`))}catch(e){console.error(`上传头像失败`,e),_.error(A(`client.uploadFailed`))}finally{G(),U(!1)}}function Z(){z(!1),G()}return S(b,{children:[T||k?x(a,{variant:`ghost`,size:`icon`,className:`h-[72px] w-[72px] rounded-full p-0 hover:bg-transparent`,onClick:W,"aria-label":`打开头像预览`,children:x(l,{className:`flex h-[72px] w-[72px] items-center justify-center rounded-full bg-[var(--color-surface-white20)]`,children:S(o,{className:`h-[60px] w-[60px] border-[3px] border-[var(--color-surface-white20)]`,children:[x(c,{src:D||w,alt:O||`avatar`}),x(s,{})]})})}):x(l,{className:`flex h-[72px] w-[72px] items-center justify-center rounded-full bg-[var(--color-surface-white20)]`,children:S(o,{className:`h-[60px] w-[60px] border-[3px] border-[var(--color-surface-white20)]`,children:[x(c,{src:D||w,alt:O||`avatar`}),x(s,{})]})}),x(d,{open:I,onOpenChange:K,children:x(f,{showCloseButton:!1,className:`bg-transparent !m-0 !p-0 !fixed !inset-0 !w-screen !h-screen !max-w-none !rounded-none !top-0 !left-0 !translate-x-0 !translate-y-0 !transform-none z-[9999] !pointer-events-auto `,children:S(l,{className:`fixed top-0 left-0 right-0 bottom-0 z-50 bg-black flex h-full w-full flex-col items-center justify-center`,children:[x(a,{variant:`ghost`,size:`icon`,className:`absolute left-0 top-0 h-14 w-14 text-text1 hover:bg-transparent hover:text-[var(--color-text-secondary)]`,onClick:K,"aria-label":`关闭头像预览`,children:x(`svg`,{className:`w-4 h-4`,xmlns:`http://www.w3.org/2000/svg`,fill:`currentColor`,viewBox:`0 0 16 16`,children:x(`path`,{d:`M14.55.2a.889.889 0 0 1 1.25 1.25l-.06.067L9.255 8l6.483 6.482.06.069a.888.888 0 0 1-1.25 1.25l-.067-.062L8 9.256l-6.482 6.483A.888.888 0 1 1 .26 14.482L6.742 8 .26 1.517.2 1.45A.888.888 0 0 1 1.45.2l.067.062 6.482 6.482L14.482.261l.068-.062Z`})})}),S(o,{className:`w-50 h-50`,children:[x(c,{src:D||w,alt:O||`avatar`}),x(s,{})]}),S(a,{variant:`ghost`,className:e(`absolute bottom-8 left-0 right-0 mx-auto flex w-[366px] max-w-[90%] items-center justify-between rounded-3xl bg-[var(--color-surface-white10)] px-3 py-3 transition-colors hover:bg-[var(--color-surface-white20)]`,`active:scale-95 h-auto`),onClick:q,disabled:H,children:[x(p,{as:`span`,className:`text-base font-medium text-text1`,children:H?`上传中...`:`更换头像`}),S(`svg`,{className:`w-6 h-6 text-text1`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,children:[x(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z`}),x(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 13a3 3 0 11-6 0 3 3 0 016 0z`})]})]})]})})}),x(u,{ref:j,type:`file`,accept:`.jpg,.jpeg,.png,image/jpeg,image/png`,className:`hidden`,onChange:Y}),x(g,{open:R,onClose:Z,imageSrc:B,onConfirm:X})]})}export{D as UserProfileAvatar};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{pUserUploadUserBgImage as t}from"../../../../../service/generated/client.mjs";import{uploadFile as n}from"../../../../../utils/upload-file.mjs";import{Image as r}from"../../../../ui/image.mjs";import{Box as i}from"../../../../ui/box.mjs";import{Input as a}from"../../../../ui/input.mjs";import{useDeleteRequest as o}from"../../../../../hooks/query/use-query.mjs";import{ImageCropModal as s}from"../../../../common/image-crop-modal/image-crop-modal.mjs";import{BackgroundPreviewModal as c}from"../../../../common/background-preview-modal/background-preview-modal.mjs";import{defaultBackground as l}from"./client.mjs";import{toast as u}from"sonner";import{useCallback as d,useEffect as f,useRef as p,useState as m}from"react";import{Fragment as h,jsx as g,jsxs as _}from"react/jsx-runtime";import{useTranslations as v}from"next-intl";const y=[`image/jpeg`,`image/png`];function b(e){let t=e.name.toLowerCase(),n=e.type.toLowerCase();return y.includes(n)||/\.(?:jpg|jpeg|png)$/i.test(t)}function x({isMine:y,enableCustomBackground:x=!0,src:S,onUnauthorizedClick:C}){let w=v(`components.pages.profile`),T=l,E=p(null),{userId:D,setUserInfo:O,userInfo:k}=e(),A=o(),[j,M]=m(!1),[N,P]=m(!1),[F,I]=m(!1),[L,R]=m(``),z=x&&(!!y||typeof C==`function`),B=d(()=>{L&&(URL.revokeObjectURL(L),R(``))},[L]),V=()=>{if(x){if(y){j||P(!0);return}C?.()}},H=()=>{P(!1)};function U(){j||E.current?.click()}async function W(e){let t=e.target.files?.[0];if(e.target&&(e.target.value=``),t)try{if(!b(t)){u.error(w(`client.imageTypeInvalid`));return}if(t.size>5242880){u.error(w(`client.imageTooLarge`));return}B(),R(URL.createObjectURL(t)),P(!1),I(!0)}catch(e){console.error(`上传背景图失败`,e),u.error(w(`client.uploadFailed`))}}let G=d(()=>{I(!1),B()},[B]);f(()=>{x||(P(!1),I(!1),B())},[B,x]);async function K(e){if(!D){u.error(w(`client.loginRequiredForUpload`));return}try{M(!0);let r=await n(new File([e],`background.jpg`,{type:`image/jpeg`}),1);await t({user_id:String(D),bg_image:r.objectKey}),O({...k,bg_image:r.objectKey}),A([`user-profile`,`mine`]),P(!1),I(!1),u.success(w(`client.mediaUpdateSuccess`))}catch(e){console.error(`上传背景图失败`,e),u.error(w(`client.uploadFailed`))}finally{B(),M(!1)}}return _(h,{children:[g(i,{className:`h-[284px]`,children:x?g(i,{className:`relative h-full w-full`,onClick:z?V:void 0,children:g(r,{alt:`cover background`,fill:!0,objectFit:`cover`,className:`pointer-events-none`,src:S||T})}):g(i,{className:`h-full w-full bg-bg1`})}),x&&_(h,{children:[g(c,{open:N,onClose:H,bgUrl:S||T,onUpload:U}),g(a,{ref:E,type:`file`,accept:`.jpg,.jpeg,.png,image/jpeg,image/png`,className:`hidden`,onChange:W}),g(s,{open:F,onClose:G,imageSrc:L,onConfirm:K,cropShape:`rect`,aspectRatio:430/256})]})]})}export{x as UserProfileCoverBackground};
2
+ "use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{pUserUploadUserBgImage as t}from"../../../../../service/generated/client.mjs";import{uploadFile as n}from"../../../../../utils/upload-file.mjs";import{Image as r}from"../../../../ui/image.mjs";import{Box as i}from"../../../../ui/box.mjs";import{Input as a}from"../../../../ui/input.mjs";import{useDeleteRequest as o}from"../../../../../hooks/query/use-query.mjs";import{ImageCropModal as s}from"../../../../common/image-crop-modal/image-crop-modal.mjs";import{defaultBackground as c}from"./shared.mjs";import{BackgroundPreviewModal as l}from"../../../../common/background-preview-modal/background-preview-modal.mjs";import{toast as u}from"sonner";import{useCallback as d,useEffect as f,useRef as p,useState as m}from"react";import{Fragment as h,jsx as g,jsxs as _}from"react/jsx-runtime";import{useTranslations as v}from"next-intl";const y=[`image/jpeg`,`image/png`];function b(e){let t=e.name.toLowerCase(),n=e.type.toLowerCase();return y.includes(n)||/\.(?:jpg|jpeg|png)$/i.test(t)}function x({isMine:y,enableCustomBackground:x=!0,src:S,onUnauthorizedClick:C}){let w=v(`components.pages.profile`),T=c,E=p(null),{userId:D,setUserInfo:O,userInfo:k}=e(),A=o(),[j,M]=m(!1),[N,P]=m(!1),[F,I]=m(!1),[L,R]=m(``),z=x&&(!!y||typeof C==`function`),B=d(()=>{L&&(URL.revokeObjectURL(L),R(``))},[L]),V=()=>{if(x){if(y){j||P(!0);return}C?.()}},H=()=>{P(!1)};function U(){j||E.current?.click()}async function W(e){let t=e.target.files?.[0];if(e.target&&(e.target.value=``),t)try{if(!b(t)){u.error(w(`client.imageTypeInvalid`));return}if(t.size>5242880){u.error(w(`client.imageTooLarge`));return}B(),R(URL.createObjectURL(t)),P(!1),I(!0)}catch(e){console.error(`上传背景图失败`,e),u.error(w(`client.uploadFailed`))}}let G=d(()=>{I(!1),B()},[B]);f(()=>{x||(P(!1),I(!1),B())},[B,x]);async function K(e){if(!D){u.error(w(`client.loginRequiredForUpload`));return}try{M(!0);let r=await n(new File([e],`background.jpg`,{type:`image/jpeg`}),1);await t({user_id:String(D),bg_image:r.objectKey}),O({...k,bg_image:r.objectKey}),A([`user-profile`,`mine`]),P(!1),I(!1),u.success(w(`client.mediaUpdateSuccess`))}catch(e){console.error(`上传背景图失败`,e),u.error(w(`client.uploadFailed`))}finally{B(),M(!1)}}return _(h,{children:[g(i,{className:`h-[284px]`,children:x?g(i,{className:`relative h-full w-full`,onClick:z?V:void 0,children:g(r,{alt:`cover background`,fill:!0,objectFit:`cover`,className:`pointer-events-none`,src:S||T})}):g(i,{className:`h-full w-full bg-bg1`})}),x&&_(h,{children:[g(l,{open:N,onClose:H,bgUrl:S||T,onUpload:U}),g(a,{ref:E,type:`file`,accept:`.jpg,.jpeg,.png,image/jpeg,image/png`,className:`hidden`,onChange:W}),g(s,{open:F,onClose:G,imageSrc:L,onConfirm:K,cropShape:`rect`,aspectRatio:430/256})]})]})}export{x as UserProfileCoverBackground};
@@ -0,0 +1,12 @@
1
+
2
+ import { UserProfileHeaderClientProps } from "./schema.mjs";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region components/biz/business/profile/profile-header/visitor-client.d.ts
6
+ /**
7
+ * 他人主页头部组件入口。
8
+ * 在编辑器里强制走访客视角,便于单独编辑关注/私信布局。
9
+ */
10
+ declare function VisitorProfileHeaderClient(props: UserProfileHeaderClientProps): react_jsx_runtime0.JSX.Element;
11
+ //#endregion
12
+ export { VisitorProfileHeaderClient };
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{UserProfileHeaderClient as e}from"./client.mjs";import{jsx as t}from"react/jsx-runtime";function n(n){let{mode:r=`renderer`,currentUserId:i,id:a,requireLogin:o=!1,...s}=n,c=i||`editor-preview-viewer-user`,l=r===`editor`?`editor-preview-visitor-user`:a;return t(e,{...s,mode:r,requireLogin:o,currentUserId:c,id:l})}export{n as VisitorProfileHeaderClient};
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{cn as e}from"../../../../../utils/cn.mjs";import{pInteractionFollow as t,pInteractionUnfollow as n}from"../../../../../service/generated/client.mjs";import{Button as r}from"../../../../ui/button.mjs";import{toast as i}from"../../../../../ui.mjs";import{useLoginModalStore as a}from"../../../../../store/modules/login-modal-store.mjs";import{useDeleteRequest as o,useMutation as s,useUpdateRequest as c}from"../../../../../hooks/query/use-query.mjs";import{useEffect as l,useState as u}from"react";import{Check as d,MessageCircle as f,Plus as p}from"lucide-react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{useTranslations as g}from"next-intl";function _({userId:f,currentUserId:_,isFollowing:v,useLocalPreview:y=!1}){let b=g(`components.pages.profile`),{open:x}=a(),S=o(),C=c(),[w,T]=u(!!v),{mutateAsync:E,isPending:D}=s(async e=>t(e)),{mutateAsync:O,isPending:k}=s(async e=>n(e)),A=D||k,j=!!_&&!!f&&!y&&_!==f;l(()=>{T(!!v)},[v]);async function M(){return E({app_id:0,follower_id:_||``,followee_id:f})}async function N(){return O({app_id:0,follower_id:_||``,followee_id:f})}function P(e){C([`user-profile`,`profile`,f],t=>!t||!t.data?t:{...t,data:{...t.data,is_following:e}})}async function F(){if(!A){if(!j){T(e=>!e);return}if(!_){x();return}try{if(w){let e=await N();e.code===0?(i.success(b(`client.unfollowSuccess`),{duration:1500}),T(!1),P(!1),S([`check-follow`,f]),S([`user-profile`,`profile`,f])):i.error(e.message||b(`client.unfollowFailed`))}else{let e=await M();e.code===0?(i.success(b(`client.followSuccess`),{duration:1500}),T(!0),P(!0),S([`check-follow`,f]),S([`user-profile`,`profile`,f])):i.error(e.message||b(`client.followFailed`))}}catch(e){console.error(`关注操作失败`,e),i.error(b(`client.operationFailed`))}}}return h(r,{type:`button`,variant:`ghost`,size:`xs`,className:e(`h-7 min-w-0 gap-1 rounded-full border px-3 py-0 text-[12px] font-medium leading-[18px] shadow-none`,`disabled:pointer-events-none disabled:opacity-100`,w?`!border-text3 !bg-transparent !text-text3 hover:!bg-transparent hover:!text-text3`:`!border-theme5 !bg-transparent !text-theme5 hover:!bg-transparent hover:!text-theme5`),onClick:F,disabled:A,children:[m(w?d:p,{className:`size-3`}),b(A?`client.processing`:w?`client.followed`:`client.follow`)]})}function v({userId:e,currentUserId:t}){let n=g(`components.pages.profile`)(`client.message`);return h(r,{type:`button`,variant:`ghost`,size:`xs`,className:`h-7 min-w-0 gap-1 rounded-full border border-text3 bg-transparent px-3 py-0 text-[12px] font-medium leading-[18px] text-text3 shadow-none hover:!bg-transparent hover:!text-text3 disabled:pointer-events-none disabled:opacity-100`,disabled:!0,children:[m(f,{className:`size-3`}),n.includes(`.`)?`私信`:n]})}export{_ as FollowButton,v as MessageButton};
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{ProfileHeaderContent as e}from"./shared.mjs";import{FollowButton as t,MessageButton as n}from"./visitor-profile-actions.mjs";import{Fragment as r,jsx as i,jsxs as a}from"react/jsx-runtime";function o({userInfo:o,interactionStats:s,showInteractionSection:c,canEditProfileMedia:l,shouldPromptLoginOnMediaClick:u,storeIsLogin:d,isMine:f,currentUserId:p,onOpenLoginDialog:m,useLocalPreview:h=!1}){let g=o.userId||``;return i(e,{userInfo:o,interactionStats:s,showInteractionSection:c,canEditProfileMedia:l,shouldPromptLoginOnMediaClick:u,storeIsLogin:d,isMine:f,onOpenLoginDialog:m,actionSlot:g?a(r,{children:[i(t,{userId:g,currentUserId:p,isFollowing:o.isFollowing,useLocalPreview:h}),i(n,{userId:g,currentUserId:p})]}):null})}export{o as VisitorProfileHeader};
@@ -7,7 +7,9 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
7
7
  * 用户资料主体客户端组件。
8
8
  */
9
9
  declare function UserProfileMainClient({
10
+ contentTypes,
10
11
  id,
12
+ isMine,
11
13
  showCreateAction,
12
14
  requireLogin,
13
15
  className,
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{gUserViewUserInfo as t}from"../../../../../service/generated/client.mjs";import{useRequest as n}from"../../../../../hooks/query/use-query.mjs";import{profileMainMineTabOptions as r,profileMainProfileTabOptions as i}from"./variants.mjs";import{UserProfileMainShell as a}from"./shell.mjs";import{CollectVideoWaterfall as o}from"./tabs/collect-tab/video-waterfall.mjs";import{CollectTab as s}from"./tabs/collect-tab/client.mjs";import{HistoryTab as c}from"./tabs/history-tab/client.mjs";import{LikeTab as l}from"./tabs/like-tab/client.mjs";import{useMemo as u}from"react";import{jsx as d}from"react/jsx-runtime";import{parseAsString as f,useQueryState as p}from"nuqs";function m(e){return e*1e3}const h=[{id:`00d21b841126c976`,title:`朝朝暮暮都是你`,coverImage:`/md-204/uploads/default/other/2024-04-15/2750647625e6193940163169b77fb566.jpg`,duration:192,viewCount:237,createTime:1772175066,isMoreLink:!0},{id:`009f2e1820718add`,title:`狗哥的乡村爱情故事`,coverImage:`/md-204/uploads/default/other/2024-04-11/579bc5eb807d29657828945330b0ac47.jpg`,duration:74,viewCount:191,createTime:1770714221,isMoreLink:!0},{id:`02e2a11f78a3ffbf`,title:`唯爱百分之十二`,coverImage:`/md-204/resource/b6/b689e34f40d0e5baccb8f79630b99425.jpg`,duration:3348,viewCount:214,createTime:1770347155,isMoreLink:!0},{id:`2c19073cbd3c5c5a`,title:`疯狂磕学家`,coverImage:`/md-204/uploads/default/other/2024-08-23/5e174eeb8f2009dd7bb797fcabd5a649.jpg`,duration:2359,viewCount:17,createTime:1769757646,isMoreLink:!0},{id:`07e029915c2a9c96`,title:`我和祖宗做交易`,coverImage:`/md-204/uploads/default/other/2024-05-23/b53e50fa75986b41aac766c253a91fea.jpg`,duration:194,viewCount:75,createTime:1769670600,isMoreLink:!0},{id:`0ae1056a620b286f`,title:`识汝不识丁`,coverImage:`/md-204/uploads/default/other/2024-08-24/8958d46da3087a420d1d55e691dcb10a.jpg`,duration:2053,viewCount:13,createTime:1769651310,isMoreLink:!0},{id:`05564bf1aaf5fad6`,title:`我们的天空`,coverImage:`/md-204/resource/1a/1af6ce7117dcda390cf08db26e832684.jpg`,duration:2737,viewCount:180,createTime:1769566315,isMoreLink:!0},{id:`00f61e5be01409bb`,title:`我初初爱你`,coverImage:`/md-204/resource/bd/bd657a65bc6adc202a94acb8aca33f38.jpg`,duration:2898,viewCount:362,createTime:1769410683,isMoreLink:!0},{id:`062cd69d44fcb772`,title:`料理情缘`,coverImage:`/md-204/uploads/default/other/2023-11-27/de0491f07909b05fa012d15552e02cd0.png`,duration:2726,viewCount:33,createTime:1769157580,isMoreLink:!0},{id:`05751871b640b1a7`,title:`穷小伙被碎玻璃割伤眼睛,却因祸得福获得了一只超能神眼,人生直接开挂,之前欺负他的人统统匍匐在他脚下,征服姐妹花,走向人生巅峰!`,coverImage:`/md-204/dcc-file/29/29a0fdc86f0d756ad8f123e81693d233-small.jpgbnc`,duration:9236,viewCount:137,createTime:1769157575,isMoreLink:!1}].map((e,t)=>({id:e.id,title:e.title,coverImage:e.coverImage,duration:e.duration,authorName:``,viewCount:e.viewCount,publishTime:m(e.createTime),is_more_link:e.isMoreLink,imgType:t%3==1?`long`:`short`,description:`示例文案,用于低代码编辑器预览列表第二行。`}));function g({isMine:e,tab:t}){let n=e?r:i;return t&&n.includes(t)?t:n[0]}function _(e,t){return e&&(t===`collect`||t===`like`)}function v({id:r,showCreateAction:i=!1,requireLogin:m=!1,className:v,currentUserId:y,mode:b=`renderer`,tab:x}){let S=b===`renderer`,C=e(e=>e.userId),[w]=p(`tab`,f),T=b===`editor`?``:y||C||``,E=r==null||!!T&&r===T,D=!E&&!!r,O=E?T:r?String(r):void 0,k=E?[`user-profile`,`mine`]:[`user-profile`,`profile`,r],A=u(()=>g({isMine:E,tab:w??x}),[E,x,w]),j=S&&_(D,A)&&!!r,{data:M}=n([`user-profile`,`privacy`,r,T],async()=>await t({target_user_id:String(r),user_id:T||String(r)}),{staleTime:0,enabled:j}),N=`content`;if(b===`editor`)N=`content`;else if(m&&E&&!T)N=`login-required`;else if(j&&M){let e=M.data??{},t=Number(e.collections_open??1)>0,n=Number(e.like_open??1)>0;A===`collect`&&!t&&(N=`privacy-collect`),A===`like`&&!n&&(N=`privacy-like`)}let P=N===`content`&&(!j||!!M),F=null;if(b===`editor`)F=d(o,{list:h,loading:!1,hasMore:!1});else if(P)switch(A){case`like`:F=d(l,{mode:b,isMine:E,targetUserId:O,queryKeyPrefix:k});break;case`history`:F=d(c,{mode:b,targetUserId:O,queryKeyPrefix:k});break;default:F=d(s,{mode:b,isMine:E,userId:O,showCreateAction:i&&E,queryKeyPrefix:k});break}return d(a,{profileId:r,currentUserId:T,isMine:E,renderMode:N,className:v,children:F})}export{v as UserProfileMainClient};
2
+ "use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{gUserViewUserInfo as t}from"../../../../../service/generated/client.mjs";import{useRequest as n}from"../../../../../hooks/query/use-query.mjs";import{UserProfileMainShell as r}from"./shell.mjs";import{getProfileMainTabOptions as i}from"./variants.mjs";import{CollectTab as a}from"./tabs/collect-tab/client.mjs";import{HistoryTab as o}from"./tabs/history-tab/client.mjs";import{LikeTab as s}from"./tabs/like-tab/client.mjs";import{PublishTab as c}from"./tabs/publish-tab/client.mjs";import{useMemo as l}from"react";import{jsx as u}from"react/jsx-runtime";import{parseAsString as d,useQueryState as f}from"nuqs";const p=[`video`,`novel`,`comic`],m=[];function h({contentTypes:e,tab:t}){let n=i(e);return t&&n.includes(t)?t:n[0]}function g(e,t){return e&&(t===`collect`||t===`like`)}function _({contentTypes:_=p,id:v,isMine:y=!1,showCreateAction:b=!1,requireLogin:x=!1,className:S,currentUserId:C,mode:w=`renderer`,tab:T}){let E=w===`renderer`,D=e(e=>e.userId),[O]=f(`tab`,d),k=w===`editor`?``:C||D||``,A=!y&&!!v,j=y?k:v?String(v):void 0,M=y?[`user-profile`,`mine`]:[`user-profile`,`profile`,v],N=l(()=>i(_),[_]),P=l(()=>h({contentTypes:_,tab:O??T}),[_,T,O]),F=E&&g(A,P)&&!!v,{data:I}=n([`user-profile`,`privacy`,v,k],async()=>await t({target_user_id:String(v),user_id:k||String(v)}),{staleTime:0,enabled:F}),L=`content`;if(w===`editor`)L=`content`;else if(x&&y&&!k)L=`login-required`;else if(F&&I){let e=I.data??{},t=Number(e.collections_open??1)>0,n=Number(e.like_open??1)>0;P===`collect`&&!t&&(L=`privacy-collect`),P===`like`&&!n&&(L=`privacy-like`)}let R=L===`content`&&(!F||!!I),z=null;if(R)switch(P){case`like`:z=u(s,{mode:w,isMine:y,targetUserId:j,queryKeyPrefix:M,contentTypes:_.length?_:m});break;case`history`:z=u(o,{mode:w,targetUserId:j,queryKeyPrefix:M,contentTypes:_.length?_:m});break;case`publish`:z=u(c,{mode:w,targetUserId:j,queryKeyPrefix:M,isMine:y,contentTypes:_.length?_:m});break;default:z=u(a,{mode:w,isMine:y,userId:j,showCreateAction:b&&y,queryKeyPrefix:M,contentTypes:_.length?_:m});break}return u(r,{profileId:v,currentUserId:k,isMine:y,tabs:N,activeTab:w===`editor`?N[0]:void 0,renderMode:L,className:S,children:z})}export{_ as UserProfileMainClient};
@@ -3,6 +3,7 @@ import { ProfileMainInspectorProps, UserProfileMainProps, profileMainInspectorDe
3
3
  import { UserProfileMainClient } from "./client.mjs";
4
4
  import { UserProfileMain } from "./server.mjs";
5
5
  import { profileMainMaterial } from "./material.mjs";
6
+ import { ProfileMainBaseTabKey, ProfileMainContentType, ProfileMainSecondaryTabKey, ProfileMainTabKey, getProfileMainSecondaryTabOptions, getProfileMainTabOptions, profileMainBaseTabOptions, profileMainCollectCollectionTabOptions, profileMainCollectTabOptions, profileMainContentTypeOptions, profileMainHistoryTabOptions, profileMainLikeTabOptions, profileMainMineTabOptions, profileMainProfileTabOptions, profileMainPublishTabOption, profileMainSecondaryTabDisplayOrder, profileMainTabOptions } from "./variants.mjs";
6
7
  import { UserProfileMainRenderMode, UserProfileMainShell, UserProfileMainShellProps } from "./shell.mjs";
7
8
  import { CollectTab, CollectTabProps } from "./tabs/collect-tab/client.mjs";
8
9
  import { CollectTabServer } from "./tabs/collect-tab/server.mjs";
@@ -12,5 +13,4 @@ import { LikeDetailItem, LikeTab, LikeTabProps } from "./tabs/like-tab/client.mj
12
13
  import { LikeTabServer } from "./tabs/like-tab/server.mjs";
13
14
  import { PublishTab, PublishTabProps, PublishTabUserInfo } from "./tabs/publish-tab/client.mjs";
14
15
  import { PublishTabServer } from "./tabs/publish-tab/server.mjs";
15
- import "./tabs/index.mjs";
16
- import { profileMainCollectCollectionTabOptions, profileMainCollectTabOptions, profileMainHistoryTabOptions, profileMainLikeTabOptions, profileMainMineTabOptions, profileMainProfileTabOptions, profileMainTabOptions } from "./variants.mjs";
16
+ import "./tabs/index.mjs";
@@ -1,4 +1,5 @@
1
1
 
2
+ import { SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
2
3
  import { DefineMaterialOption } from "../../../../../utils/schema/material.mjs";
3
4
  import "../../../../../utils.mjs";
4
5
  import { UserProfileMainClient } from "./client.mjs";
@@ -8,6 +9,8 @@ import * as zod_v4_core0 from "zod/v4/core";
8
9
 
9
10
  //#region components/biz/business/profile/profile-main/material.d.ts
10
11
  declare const profileMainMaterial: DefineMaterialOption<typeof UserProfileMain, typeof UserProfileMainClient, zod.ZodObject<{
12
+ readonly contentTypes: zod.ZodOptional<zod.ZodArray<zod.ZodType<"video" | "novel" | "comic" | "post", unknown, zod_v4_core0.$ZodTypeInternals<"video" | "novel" | "comic" | "post", unknown>>>> & SchemaHasDefaultValue;
13
+ } & {
11
14
  mode: zod.ZodOptional<zod.ZodEnum<{
12
15
  renderer: "renderer";
13
16
  editor: "editor";
@@ -1,20 +1,24 @@
1
1
 
2
- import { InferSchemaProps, MaterialComponentMode } from "../../../../../utils/schema/schema.mjs";
2
+ import { InferSchemaProps, MaterialComponentMode, SchemaHasDefaultValue } from "../../../../../utils/schema/schema.mjs";
3
3
  import "../../../../../utils.mjs";
4
4
  import * as zod from "zod";
5
5
  import * as zod_v4_core0 from "zod/v4/core";
6
6
 
7
7
  //#region components/biz/business/profile/profile-main/schema.d.ts
8
8
  /**
9
- * 用户资料主体物料暂不对外开放 inspector 配置。
9
+ * 用户资料主体物料 inspector 配置。
10
10
  */
11
11
  declare const profileMainInspectorPropsSchema: zod.ZodObject<{
12
+ readonly contentTypes: zod.ZodOptional<zod.ZodArray<zod.ZodType<"video" | "novel" | "comic" | "post", unknown, zod_v4_core0.$ZodTypeInternals<"video" | "novel" | "comic" | "post", unknown>>>> & SchemaHasDefaultValue;
13
+ } & {
12
14
  mode: zod.ZodOptional<zod.ZodEnum<{
13
15
  renderer: "renderer";
14
16
  editor: "editor";
15
17
  }>>;
16
18
  }, zod_v4_core0.$strip>;
17
- declare const profileMainInspectorDefaultProps: {};
19
+ declare const profileMainInspectorDefaultProps: {
20
+ readonly contentTypes: ("video" | "novel" | "comic" | "post")[];
21
+ };
18
22
  type ProfileMainInspectorProps = InferSchemaProps<typeof profileMainInspectorPropsSchema>;
19
23
  interface ProfileMainRuntimeTabProps {
20
24
  tab?: string;
@@ -28,6 +32,8 @@ interface UserProfileMainProps extends ProfileMainInspectorProps, ProfileMainRun
28
32
  mode?: MaterialComponentMode;
29
33
  /** 用户 ID。 */
30
34
  id?: string;
35
+ /** 是否为本人视角,优先级高于组件内部判断。 */
36
+ isMine?: boolean;
31
37
  /** 是否显示创建入口。 */
32
38
  showCreateAction?: boolean;
33
39
  /** 是否要求登录。 */
@@ -1,2 +1,2 @@
1
1
 
2
- import{defineComponentPropsSchema as e,getSchemaDefaultProps as t}from"../../../../../utils/schema/schema.mjs";const n=e(e=>({})),r=t(n);export{r as profileMainInspectorDefaultProps,n as profileMainInspectorPropsSchema};
2
+ import{defineComponentPropsSchema as e,getSchemaDefaultProps as t}from"../../../../../utils/schema/schema.mjs";import{profileMainContentTypeOptions as n}from"./variants.mjs";const r=e(e=>({contentTypes:e.array(e.enum(n),{label:`内容类型配置`,description:`可多选视频、小说、漫画、帖子;仅当选择“帖子”时,内容分类标签额外展示“发布”。`,required:!1,defaultValue:[]})})),i=t(r);export{i as profileMainInspectorDefaultProps,r as profileMainInspectorPropsSchema};
@@ -1,4 +1,5 @@
1
1
 
2
+ import { ProfileMainTabKey } from "./variants.mjs";
2
3
  import { PropsWithChildren } from "react";
3
4
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
5
 
@@ -11,6 +12,10 @@ interface UserProfileMainShellProps extends PropsWithChildren {
11
12
  currentUserId?: string;
12
13
  /** 是否为本人视角。 */
13
14
  isMine: boolean;
15
+ /** 当前允许展示的主 Tab 列表。 */
16
+ tabs: ProfileMainTabKey[];
17
+ /** 外部强制指定当前激活主 Tab。 */
18
+ activeTab?: ProfileMainTabKey;
14
19
  /** 当前内容区渲染模式。 */
15
20
  renderMode: UserProfileMainRenderMode;
16
21
  /** 主体容器附加类名。 */
@@ -23,6 +28,8 @@ declare function UserProfileMainShell({
23
28
  profileId,
24
29
  currentUserId,
25
30
  isMine,
31
+ tabs,
32
+ activeTab,
26
33
  renderMode,
27
34
  className,
28
35
  children
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{cn as e}from"../../../../../utils/cn.mjs";import{useUserStore as t}from"../../../../../store/modules/user-store.mjs";import{Button as n}from"../../../../ui/button.mjs";import{Box as r}from"../../../../ui/box.mjs";import{EmptyState as i}from"../../../../ui/empty.mjs";import{Text as a}from"../../../../ui/text.mjs";import{Tabs as o,TabsList as s,TabsTrigger as c}from"../../../../ui/tabs.mjs";import{useLoginModalStore as l}from"../../../../../store/modules/login-modal-store.mjs";import{trackProfilePageClick as u}from"../tracking.mjs";import{profileMainMineTabOptions as d,profileMainProfileTabOptions as f}from"./variants.mjs";import{useEffect as p,useId as m,useMemo as h,useRef as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import{useTranslations as y}from"next-intl";import{parseAsString as b,useQueryState as x}from"nuqs";function S(e){let t=m();return v(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`37`,height:`10`,viewBox:`0 0 37 10`,fill:`none`,...e,children:[_(`path`,{d:`M32.8921 0.212888C34.4317 -0.398985 36.1765 0.353067 36.7886 1.89258C37.4004 3.43219 36.6484 5.17704 35.1089 5.78906L29.9204 7.85058C26.0475 9.38961 21.7156 9.29046 17.9175 7.57519C15.9234 6.67463 13.6771 6.5 11.5679 7.08203L3.79833 9.22656C2.20143 9.66708 0.549808 8.72958 0.108873 7.13281C-0.331916 5.53567 0.605478 3.88317 2.20262 3.44238L9.97118 1.29785C13.431 0.342993 17.1161 0.629191 20.3872 2.10644C22.7028 3.15218 25.3434 3.21271 27.7046 2.27441L32.8921 0.212888Z`,fill:`url(#${t})`}),_(`defs`,{children:v(`linearGradient`,{id:t,x1:`3.00047`,y1:`5.00097`,x2:`34.0005`,y2:`5.00097`,gradientUnits:`userSpaceOnUse`,children:[_(`stop`,{stopColor:`var(--color-brand-tag-gradient-start)`}),_(`stop`,{offset:`1`,stopColor:`var(--color-brand-tag-gradient-end)`})]})})]})}function C(e){return v(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`68`,height:`58`,viewBox:`0 0 68 58`,fill:`none`,...e,children:[_(`rect`,{x:`0.5`,y:`0.5`,width:`67`,height:`57`,rx:`7.5`,fill:`#1B1829`,stroke:`#322F3E`}),_(`path`,{d:`M27.1175 33.8211L27.118 23.9652C27.1182 21.7159 29.502 20.2667 31.4989 21.3021L40.5835 26.0125C42.6976 27.1086 42.7531 30.1126 40.681 31.2861L31.5959 36.4317C29.596 37.5644 27.1173 36.1195 27.1175 33.8211Z`,fill:`#54525E`})]})}function w(e){return e?[...d]:[...f]}function T(e,t){let n=w(t);return n.includes(e)?e:n[0]}function E(e){let t=window.getComputedStyle(e);return/auto|scroll|overlay/.test(t.overflowY)}function D(e){if(typeof window>`u`)return null;let t=e?.parentElement??null;for(;t;){if(E(t))return t;t=t.parentElement}return null}function O(e){return typeof window>`u`?0:e?e.scrollTop:window.scrollY||window.pageYOffset||0}function k(e,t){if(!(typeof window>`u`)){if(e){e.scrollTo({top:t});return}window.scrollTo({top:t,left:0})}}function A({profileId:d,currentUserId:f,isMine:m,renderMode:E,className:A,children:j}){let M=y(`components.pages.profile`),N=g(null),P=l(e=>e.open),F=t(e=>e.userId),I=g(``),L=w(m),[R,z]=x(`tab`,b.withDefault(`collect`)),B=h(()=>T(R,m),[m,R]),V=f||F||``,H=m?V:d,U=h(()=>`profile-scroll:${H||(m?`mine`:`guest`)}:${B}`,[m,B,H]);p(()=>{R!==B&&z(B,{shallow:!1})},[B,z,R]),p(()=>{if(typeof window>`u`)return;let e=`${m?`mine`:`profile`}:${H||``}:${B}`;I.current!==e&&(I.current=e)},[m,d,V,B,H]),p(()=>{if(typeof window>`u`)return;let e=D(N.current),t=window.sessionStorage.getItem(U),n=t?Number(t):0;Number.isFinite(n)&&n>0&&requestAnimationFrame(()=>{k(e,n)});let r=!1,i=()=>{r||(r=!0,requestAnimationFrame(()=>{window.sessionStorage.setItem(U,String(O(e))),r=!1}))};return e?(e.addEventListener(`scroll`,i,{passive:!0}),()=>{e.removeEventListener(`scroll`,i)}):(window.addEventListener(`scroll`,i,{passive:!0}),()=>{window.removeEventListener(`scroll`,i)})},[U]);let W={collect:M(`client.collect`),like:M(`client.like`),history:M(`client.history`)},G=j;return E===`login-required`?G=v(r,{className:`flex flex-col items-center pt-[132px] text-center`,children:[_(C,{className:`h-[58px] w-[68px]`}),_(a,{className:`mt-[16px] text-[15px] leading-[normal] text-[#54525E]`,children:M(`client.loginToSeeMoreVideos`)}),_(n,{type:`button`,onClick:P,className:`mt-[16px] h-[40px] min-w-[100px] rounded-[8px] border-0 bg-[linear-gradient(90deg,#9756E3_0%,#6C43EE_100%)] px-[24px] py-0 text-[16px] font-normal leading-[24px] text-white active:opacity-90`,children:M(`client.loginNow`)})]}):E===`privacy-collect`?G=_(i,{type:`no-content`,text:M(`client.collectionNotPublic`)}):E===`privacy-like`&&(G=_(i,{type:`no-content`,text:M(`client.likeNotPublic`)})),v(r,{ref:N,className:e(`relative grow overflow-hidden rounded-t-[24px] bg-[var(--color-surface-panel-dark)]`,A),children:[_(r,{className:`sticky top-0 z-10 bg-[var(--color-surface-panel-dark)] no-vw-x-16 pt-8`,children:_(o,{value:B,onValueChange:e=>{z(e,{shallow:!1})},className:`h-6 w-full`,children:_(s,{variant:`default`,className:`h-6 w-fit gap-8 px-0`,children:L.map(t=>v(c,{value:t,onClick:e=>{u(e,`${t}_tab`)},className:e(`group/profile-main-tab !flex-none !h-6 min-w-8 !px-0 !py-0 !pb-0 text-[16px] !font-normal leading-6 text-[var(--color-text-secondary)]`,`data-[active]:!text-text1 data-[active]:!font-semibold data-[active]:!text-[18px]`,`data-[state=active]:!text-text1 data-[state=active]:!font-semibold data-[state=active]:!text-[18px]`,`after:hidden`),children:[_(S,{"aria-hidden":`true`,className:e(`pointer-events-none absolute bottom-0 left-1/2 h-[10px] w-[37px] -translate-x-1/2 opacity-0 transition-opacity duration-200`,`group-data-[active]/profile-main-tab:opacity-100`,`group-data-[state=active]/profile-main-tab:opacity-100`)}),_(`span`,{className:`relative z-10`,children:W[t]})]},t))})})}),_(r,{className:`relative no-vw-x-16 pb-6 pt-7`,children:G})]})}export{A as UserProfileMainShell};
2
+ "use client";import{cn as e}from"../../../../../utils/cn.mjs";import{useUserStore as t}from"../../../../../store/modules/user-store.mjs";import{Button as n}from"../../../../ui/button.mjs";import{Box as r}from"../../../../ui/box.mjs";import{EmptyState as i}from"../../../../ui/empty.mjs";import{Text as a}from"../../../../ui/text.mjs";import{Tabs as o,TabsList as s,TabsTrigger as c}from"../../../../ui/tabs.mjs";import{useLoginModalStore as l}from"../../../../../store/modules/login-modal-store.mjs";import{trackProfilePageClick as u}from"../tracking.mjs";import{useEffect as d,useId as f,useMemo as p,useRef as m}from"react";import{jsx as h,jsxs as g}from"react/jsx-runtime";import{useTranslations as _}from"next-intl";import{parseAsString as v,useQueryState as y}from"nuqs";function b(e){let t=f();return g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`37`,height:`10`,viewBox:`0 0 37 10`,fill:`none`,...e,children:[h(`path`,{d:`M32.8921 0.212888C34.4317 -0.398985 36.1765 0.353067 36.7886 1.89258C37.4004 3.43219 36.6484 5.17704 35.1089 5.78906L29.9204 7.85058C26.0475 9.38961 21.7156 9.29046 17.9175 7.57519C15.9234 6.67463 13.6771 6.5 11.5679 7.08203L3.79833 9.22656C2.20143 9.66708 0.549808 8.72958 0.108873 7.13281C-0.331916 5.53567 0.605478 3.88317 2.20262 3.44238L9.97118 1.29785C13.431 0.342993 17.1161 0.629191 20.3872 2.10644C22.7028 3.15218 25.3434 3.21271 27.7046 2.27441L32.8921 0.212888Z`,fill:`url(#${t})`}),h(`defs`,{children:g(`linearGradient`,{id:t,x1:`3.00047`,y1:`5.00097`,x2:`34.0005`,y2:`5.00097`,gradientUnits:`userSpaceOnUse`,children:[h(`stop`,{stopColor:`var(--color-brand-tag-gradient-start)`}),h(`stop`,{offset:`1`,stopColor:`var(--color-brand-tag-gradient-end)`})]})})]})}function x(e){return g(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`68`,height:`58`,viewBox:`0 0 68 58`,fill:`none`,...e,children:[h(`rect`,{x:`0.5`,y:`0.5`,width:`67`,height:`57`,rx:`7.5`,fill:`#1B1829`,stroke:`#322F3E`}),h(`path`,{d:`M27.1175 33.8211L27.118 23.9652C27.1182 21.7159 29.502 20.2667 31.4989 21.3021L40.5835 26.0125C42.6976 27.1086 42.7531 30.1126 40.681 31.2861L31.5959 36.4317C29.596 37.5644 27.1173 36.1195 27.1175 33.8211Z`,fill:`#54525E`})]})}function S(e,t){return t.includes(e)?e:t[0]}function C(e){let t=window.getComputedStyle(e);return/auto|scroll|overlay/.test(t.overflowY)}function w(e){if(typeof window>`u`)return null;let t=e?.parentElement??null;for(;t;){if(C(t))return t;t=t.parentElement}return null}function T(e){return typeof window>`u`?0:e?e.scrollTop:window.scrollY||window.pageYOffset||0}function E(e,t){if(!(typeof window>`u`)){if(e){e.scrollTo({top:t});return}window.scrollTo({top:t,left:0})}}function D({profileId:f,currentUserId:C,isMine:D,tabs:O,activeTab:k,renderMode:A,className:j,children:M}){let N=_(`components.pages.profile`),P=m(null),F=l(e=>e.open),I=t(e=>e.userId),L=m(``),[R,z]=y(`tab`,v.withDefault(`collect`)),B=p(()=>k&&O.includes(k)?k:S(R,O),[k,R,O]),V=C||I||``,H=D?V:f,U=p(()=>`profile-scroll:${H||(D?`mine`:`guest`)}:${B}`,[D,B,H]);d(()=>{k||R!==B&&z(B,{shallow:!1})},[k,B,z,R]),d(()=>{if(typeof window>`u`)return;let e=`${D?`mine`:`profile`}:${H||``}:${B}`;L.current!==e&&(L.current=e)},[D,f,V,B,H]),d(()=>{if(typeof window>`u`)return;let e=w(P.current),t=window.sessionStorage.getItem(U),n=t?Number(t):0;Number.isFinite(n)&&n>0&&requestAnimationFrame(()=>{E(e,n)});let r=!1,i=()=>{r||(r=!0,requestAnimationFrame(()=>{window.sessionStorage.setItem(U,String(T(e))),r=!1}))};return e?(e.addEventListener(`scroll`,i,{passive:!0}),()=>{e.removeEventListener(`scroll`,i)}):(window.addEventListener(`scroll`,i,{passive:!0}),()=>{window.removeEventListener(`scroll`,i)})},[U]);let W={collect:N(`client.collect`)||`收藏`,publish:N(`client.publish`)||`发布`,like:N(`client.like`)||`点赞`,history:N(`client.history`)||`历史`},G=M;return A===`login-required`?G=g(r,{className:`flex flex-col items-center pt-[132px] text-center`,children:[h(x,{className:`h-[58px] w-[68px]`}),h(a,{className:`mt-[16px] text-[15px] leading-[normal] text-[#54525E]`,children:N(`client.loginToSeeMoreVideos`)}),h(n,{type:`button`,onClick:F,className:`mt-[16px] h-[40px] min-w-[100px] rounded-[8px] border-0 bg-[linear-gradient(90deg,#9756E3_0%,#6C43EE_100%)] px-[24px] py-0 text-[16px] font-normal leading-[24px] text-white active:opacity-90`,children:N(`client.loginNow`)})]}):A===`privacy-collect`?G=h(i,{type:`no-content`,text:N(`client.collectionNotPublic`)}):A===`privacy-like`&&(G=h(i,{type:`no-content`,text:N(`client.likeNotPublic`)})),g(r,{ref:P,className:e(`relative grow overflow-hidden rounded-t-[24px] bg-[var(--color-surface-panel-dark)]`,j),children:[h(r,{className:`sticky top-0 z-10 bg-[var(--color-surface-panel-dark)] px-4 pt-8`,children:h(o,{value:B,onValueChange:e=>{k||z(e,{shallow:!1})},className:`h-6 w-full`,children:h(s,{variant:`default`,className:`h-6 w-fit gap-8 px-0`,children:O.map(t=>g(c,{value:t,onClick:e=>{u(e,`${t}_tab`)},className:e(`group/profile-main-tab !flex-none !h-6 min-w-8 !px-0 !py-0 !pb-0 text-[16px] !font-normal leading-6 text-[var(--color-text-secondary)]`,`data-[active]:!text-text1 data-[active]:!font-semibold data-[active]:!text-[18px]`,`data-[state=active]:!text-text1 data-[state=active]:!font-semibold data-[state=active]:!text-[18px]`,`after:hidden`),children:[h(b,{"aria-hidden":`true`,className:e(`pointer-events-none absolute bottom-0 left-1/2 h-[10px] w-[37px] -translate-x-1/2 opacity-0 transition-opacity duration-200`,`group-data-[active]/profile-main-tab:opacity-100`,`group-data-[state=active]/profile-main-tab:opacity-100`)}),h(`span`,{className:e(`relative z-10 text-current`,`group-data-[active]/profile-main-tab:text-text1`,`group-data-[state=active]/profile-main-tab:text-text1`),children:W[t]})]},t))})})}),h(r,{className:`relative px-4 pb-6 pt-7`,children:G})]})}export{D as UserProfileMainShell};
@@ -1,6 +1,7 @@
1
1
 
2
2
  import { MaterialComponentMode } from "../../../../../../../utils/schema/schema.mjs";
3
3
  import "../../../../../../../utils.mjs";
4
+ import { ProfileMainContentType } from "../../variants.mjs";
4
5
  import * as react_jsx_runtime0 from "react/jsx-runtime";
5
6
 
6
7
  //#region components/biz/business/profile/profile-main/tabs/collect-tab/client.d.ts
@@ -15,6 +16,8 @@ interface CollectTabProps {
15
16
  queryKeyPrefix?: Array<string | number | undefined>;
16
17
  /** 是否为本人视角。 */
17
18
  isMine?: boolean;
19
+ /** 二级标签配置。 */
20
+ contentTypes?: ProfileMainContentType[];
18
21
  }
19
22
  /**
20
23
  * 收藏 Tab
@@ -24,7 +27,8 @@ declare function CollectTab({
24
27
  userId,
25
28
  showCreateAction,
26
29
  queryKeyPrefix,
27
- isMine
30
+ isMine,
31
+ contentTypes
28
32
  }: CollectTabProps): react_jsx_runtime0.JSX.Element;
29
33
  //#endregion
30
34
  export { CollectTab, CollectTabProps };
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{cn as e}from"../../../../../../../utils/cn.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{gCommunityGetSubscribedCollections as n,gCommunityGetUserCollections as r,gInteractionListCollects as i,pCommunityBatchDeleteCollection as a,pInteractionBatchDeleteCollects as ee}from"../../../../../../../service/generated/client.mjs";import{Button as te}from"../../../../../../ui/button.mjs";import{Box as o}from"../../../../../../ui/box.mjs";import{Text as s}from"../../../../../../ui/text.mjs";import{Tabs as ne,TabsList as re,TabsTrigger as ie}from"../../../../../../ui/tabs.mjs";import{useMutation as ae,usePaginated as c,useUpdateRequest as oe}from"../../../../../../../hooks/query/use-query.mjs";import{CreateCollectionSheet as se}from"../../../../../../common/collection-popup/create-collection-sheet.mjs";import{DeleteConfirmDialog as ce}from"../../../../../../common/delete-confirm-dialog/delete-confirm-dialog.mjs";import{CollectionList as le}from"../../../../../../common/list/collection-list/collection-list.mjs";import{PostList as ue}from"../../../../../../common/list/post-list/post-list.mjs";import{trackProfilePageClick as de}from"../../../tracking.mjs";import{ProfileMainEmptyState as l}from"../../empty-state.mjs";import{CollectVideoWaterfall as fe}from"./video-waterfall.mjs";import{toast as u}from"sonner";import{useEffect as d,useMemo as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{useTranslations as g}from"next-intl";import _ from"dayjs";import{parseAsString as pe,useQueryState as me}from"nuqs";const he={video:1,post:2};function ge(e,t){if(!e)return e;let n=0,r=e.pages.map(e=>({page:e,filteredList:(e.data?.list??b).filter(e=>{let r=e?.id??``,i=t.has(r);return i&&(n+=1),!i})}));return{...e,pages:r.map(({page:e,filteredList:t})=>{if(!e.data)return e;let r=typeof e.data.total==`number`?Math.max(0,e.data.total-n):e.data.total;return{...e,data:{...e.data,list:t,total:r}}})}}function v(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 _e(e,t){let n=t[e.content_id||``]?.create_time,r=v(e);return{id:e.content_id||``,title:e.content||``,coverImage:r,publishTime:_(n).toDate().getTime()}}function ve(e){return String(e.description||e.detail?.description||``).trim()||``}function ye(e){let t=String(e.img_type||``).trim().toLowerCase();return t===`short`?e.img_y||e.img_x||``:t===`long`?e.img_x||e.img_y||``:e.img_y||e.img_x||``}function be(e,t){let n=t[e.id||``]?.create_time;return{is_more_link:e.is_more_link,id:e.id||``,title:e.name||``,coverImage:ye(e),duration:Number(e.duration??e.detail?.duration??0),authorName:e.up_user||e.source_username||``,viewCount:e.play_count??0,publishTime:_(n).toDate().getTime(),imgType:e.img_type||e.media?.img_type||``,score:e.score??e.detail?.score,description:ve(e)}}function xe(e){let t=v(e);return{contentType:e.source_type,id:e.content_id,title:e.title||e.content,coverImage:t,isVideo:!1,isMovie:!1}}function y(e){return Array.from({length:3},(t,n)=>({id:`${e}-placeholder-${n}`,isPlaceholder:!0}))}function Se(e){let t=e.contents??[],n=(Array.isArray(t)?t:[]).slice(0,3).map(xe),r=e.content_count??n.length;return{id:e.collection_id||``,title:e.title||``,contentCount:r,isDefaultCollection:!!e.is_default,contents:r===0?y(e.collection_id||`collection`):n}}const b=[],Ce=[`video`,`post`,`collection`],we=[`created`,`subscribed`];function Te({className:t}){return m(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,className:e(`text-[var(--color-text-secondary)] opacity-60`,t),children:m(`path`,{d:`M7.33398 7.3335V4.66683H8.66732V7.3335H11.334V8.66683H8.66732V11.3335H7.33398V8.66683H4.66732V7.3335H7.33398ZM8.00065 14.6668C4.31875 14.6668 1.33398 11.682 1.33398 8.00016C1.33398 4.31826 4.31875 1.3335 8.00065 1.3335C11.6825 1.3335 14.6673 4.31826 14.6673 8.00016C14.6673 11.682 11.6825 14.6668 8.00065 14.6668ZM8.00065 13.3335C10.9462 13.3335 13.334 10.9457 13.334 8.00016C13.334 5.05464 10.9462 2.66683 8.00065 2.66683C5.05513 2.66683 2.66732 5.05464 2.66732 8.00016C2.66732 10.9457 5.05513 13.3335 8.00065 13.3335Z`,fill:`currentColor`})})}function Ee({className:t}){return m(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,className:e(`text-[var(--color-text-secondary)] opacity-60`,t),children:m(`g`,{children:m(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M10.7666 2.12385C10.9828 1.94731 11.3023 1.95935 11.5039 2.16096L13.8389 4.49592C13.942 4.5991 13.9999 4.73966 14 4.88557C14 5.03152 13.942 5.17199 13.8389 5.27522L11.5078 7.6053C11.5063 7.60688 11.5055 7.60959 11.5039 7.61116C11.5023 7.61279 11.4997 7.61345 11.498 7.61506L5.27539 13.8387C5.17216 13.9418 5.03168 13.9998 4.88574 13.9998H2.55078C2.24679 13.9998 2.00001 13.753 2 13.449V11.1141C2 10.9681 2.05794 10.8277 2.16113 10.7244L10.7246 2.16096L10.7666 2.12385ZM3.10059 11.3416V12.8992H4.6582L10.335 7.22151L8.77734 5.66389L3.10059 11.3416ZM9.55664 4.88459L11.1143 6.44221L12.6709 4.88557L11.1133 3.32893L9.55664 4.88459Z`,fill:`currentColor`})})})}const De=`flex items-center gap-[2px] text-[14px] leading-6 text-[var(--color-text-secondary)]`;function Oe(){return e(`!flex !items-center !flex-none !h-6 !w-auto !rounded-[4px] !bg-[var(--color-surface-chip-gray20)] !text-[12px] !font-normal !leading-[14px] !text-text1 hover:!text-text1`,`data-[active]:!text-text1 data-[state=active]:!text-text1`,`data-[active]:!bg-[image:var(--gradient-action-button)]`,`data-[state=active]:!bg-[image:var(--gradient-action-button)]`)}function x({mode:e=`renderer`,userId:_,showCreateAction:v=!1,queryKeyPrefix:ve,isMine:ye=!1}){let xe=g(),y=g(`components.pages.collectionDetail`),x=g(`components.pages.profile.components.tabs`),S=e===`renderer`,C=ve??[],[w,T]=me(`collectTab`,pe.withDefault(`video`)),[E,ke]=me(`collectCollectionTab`,pe.withDefault(`created`)),D=f(()=>Ce.includes(w)?w:`video`,[w]),O=f(()=>we.includes(E)?E:`created`,[E]),[k,A]=p(!1),[j,M]=p(!1),[Ae,N]=p(!1),[je,P]=p(!1),[Me,Ne]=p(!1),[F,I]=p(()=>new Set),[L,R]=p(()=>new Set),{userId:Pe,userInfo:Fe}=t(),z=_||Pe||Fe?.userId||``,Ie=oe();async function Le(e,t){if(!z)return{data:{list:[],total:0}};let n=await i({user_id:z,folder_id:``,content_type:t,page:e,page_size:10}),r=n.data.collect_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},a=n.data?.collect_items?.map(e=>t===he.video?be(e.video_info,r):_e(e.post_info,r))??[];return{data:{list:a,total:n.data?.total??a.length}}}let B=c({key:[...C,`user-collect-video`,z],initialPageParam:1,async queryFn(e){return Le(e,he.video)},options:{staleTime:0,enabled:S},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),V=c({key:[...C,`user-collect-post`,z],initialPageParam:1,options:{staleTime:0,enabled:S},async queryFn(e){return{data:{list:[],total:0,has_more:!1}}},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}});async function Re(e){if(!z)return{data:{list:[],total:0}};let t=await r({page:e,user_id:_,page_size:10}),n=t.data?.data?.collections??[];return{data:{list:n.map(Se),total:t.data?.data?.total??n.length}}}async function ze(e){if(!z)return{data:{list:[],total:0}};let t=(await n({page:e,user_id:_,page_size:10})).data?.data,r=t?.collections??[];return{data:{list:r.map(Se),total:t?.total??r.length}}}let H=c({key:[...C,`user-collection-created`,z],initialPageParam:1,options:{staleTime:0,enabled:S},async queryFn(e){return Re(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),U=c({key:[...C,`user-collection-subscribed`,z],initialPageParam:1,options:{staleTime:0,enabled:S},async queryFn(e){return ze(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),W=f(()=>B.data?.pages.flatMap(e=>e.data?.list??b)??b,[B.data]),G=f(()=>V.data?.pages.flatMap(e=>e.data?.list??b)??b,[V.data]),Be=f(()=>H.data?.pages.flatMap(e=>e.data?.list??b)??b,[H.data]),Ve=f(()=>U.data?.pages.flatMap(e=>e.data?.list??b)??b,[U.data]),He=D===`video`?W:D===`post`?G:b,K=new Set(He.map(e=>e.id)),Ue=K.size,We=Ue>0&&F.size===Ue,q=D===`video`?B:V,J=O===`created`?H:U,Y=O===`created`?Be:Ve,X=D===`video`?W.length===0&&!q.isFetching:D===`post`?G.length===0&&!q.isFetching:Y.length===0&&!J.isFetching,Z=f(()=>new Set(Y.filter(e=>!e.isDefaultCollection).map(e=>e.id)),[Y]),Ge=Z.size>0&&[...Z].every(e=>L.has(e)),Ke=D===`video`,qe=v&&O===`created`,Je=[...C,`user-collect-video`,z],Ye=[...C,`user-collect-post`,z],{mutateAsync:Xe,isPending:Q}=ae(async e=>await ee({app_id:0,user_id:z,folder_id:``,content_type:Ke?1:2,content_ids:e})),{mutateAsync:Ze,isPending:$}=ae(async e=>await a({collection_ids:e})),Qe=()=>{A(!k),I(new Set)};function $e(){qe&&(M(e=>!e),R(new Set))}d(()=>{if(I(new Set),D===`collection`){A(!1),N(!1);return}A(!1),R(new Set),M(!1),P(!1)},[D]),d(()=>{R(new Set),M(!1),P(!1)},[O]),d(()=>{w!==D&&T(D)},[D,w,T]),d(()=>{E!==O&&ke(O)},[O,E,ke]);let et=e=>{I(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},tt=()=>{F.size===K.size&&K.size>0?I(new Set):I(new Set(K))};function nt(e){if(Y.find(t=>t.id===e)?.isDefaultCollection){u.error(y(`detail.defaultCollectionDeleteNotSupported`));return}R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function rt(){if(Ge){R(new Set);return}R(new Set(Z))}function it(){F.size===0||Q||N(!0)}function at(){Q||N(!1)}function ot(){$||P(!1)}async function st(){if(!(F.size===0||Q)){if(!z){u.error(x(`collectTab.pleaseLogin`));return}try{let e=Array.from(F),t=await Xe(e);if(t.code===0){u.success(x(`collectTab.uncollectedSuccess`));let t=new Set(e);Ie(Ke?Je:Ye,e=>ge(e,t)),N(!1),I(new Set),A(!1)}else u.error(t.message||x(`collectTab.uncollectFailed`))}catch(e){console.error(`取消收藏失败`,e),u.error(x(`collectTab.operationFailed`))}}}function ct(){L.size===0||$||P(!0)}async function lt(){if(!(L.size===0||$)){if(!z){u.error(x(`collectTab.pleaseLogin`));return}try{let e=await Ze(Array.from(L));if(e.code===0){u.success(y(`detail.deleteSuccess`)),await J.refetch(),P(!1),R(new Set),M(!1);return}u.error(e.message||y(`detail.deleteFailed`))}catch(e){console.error(`删除收藏夹失败`,e),u.error(y(`detail.deleteFailed`))}}}let ut=async()=>{if(S){if(D===`collection`){await J.fetchNextPage();return}await q.fetchNextPage()}};return h(o,{children:[h(o,{className:`flex items-center justify-between`,children:[m(ne,{value:D,onValueChange:e=>{T(e)},children:h(re,{variant:`tag`,className:`!h-6 !gap-4 !p-0`,children:[m(ie,{value:`video`,className:Oe(),children:x(`collectTab.video`)}),m(ie,{value:`collection`,className:Oe(),children:x(`collectTab.collections`)})]})}),D===`collection`?v&&h(o,{className:`flex items-center gap-3`,children:[h(`button`,{type:`button`,className:De,onClick:()=>Ne(!0),children:[m(Te,{}),m(s,{className:`text-[14px] leading-6 text-[var(--color-text-secondary)]`,children:xe(`components.pages.collectionCreate.form.create`)})]}),qe&&h(`button`,{type:`button`,className:De,onClick:$e,children:[!j&&m(Ee,{}),m(s,{className:`text-[14px] leading-6 text-[var(--color-text-secondary)]`,children:x(j?`collectTab.cancel`:`collectTab.edit`)})]})]}):(D===`video`||D===`post`)&&ye&&h(te,{variant:`ghost`,size:`sm`,className:`h-6 gap-[2px] px-0 text-[14px] leading-6 text-[var(--color-text-secondary)] hover:bg-transparent hover:text-[var(--color-text-secondary)]`,onClick:Qe,children:[k?null:m(Ee,{}),m(s,{className:`text-[14px] leading-6 text-[var(--color-text-secondary)]`,children:x(k?`collectTab.cancel`:`collectTab.edit`)})]})]}),m(o,{onClick:e=>{de(e,`content_item`)},className:`pt-4`,children:D===`video`?X?m(l,{text:x(`collectTab.emptyContent`)}):m(fe,{list:W,loading:q.isFetching,hasMore:q.hasNextPage??!1,loadMore:ut,emptyText:x(`collectTab.emptyContent`),isEditMode:k,selectedIds:F,onToggleSelection:et}):D===`post`?X?m(l,{text:x(`collectTab.emptyContent`)}):m(ue,{list:G,loading:q.isFetching,hasMore:q.hasNextPage??!1,loadMore:ut,emptyText:x(`collectTab.emptyContent`),isEditMode:k,selectedIds:F,onToggleSelection:et}):X?m(l,{text:x(`collectTab.emptyContent`)}):m(le,{list:Y,loading:J.isFetching,hasMore:J.hasNextPage??!1,loadMore:ut,emptyText:x(`collectTab.emptyContent`),isEditMode:j,selectedIds:L,onToggleSelection:nt})}),k&&D!==`collection`&&h(o,{className:`fixed bottom-0 left-0 right-0 z-[60] h-[98px] bg-[var(--color-overlay-panel-fade-start90)] backdrop-blur-[50px]`,children:[h(o,{className:`flex items-center gap-[2px] px-4 pt-2`,children:[m(`button`,{type:`button`,className:`flex h-12 w-[178px] items-center justify-center rounded-[100px] text-[16px] leading-6 text-[var(--color-text-primary)]`,onClick:tt,children:x(We?`collectTab.cancelSelectAll`:`collectTab.selectAll`)}),m(`button`,{type:`button`,className:`flex h-12 w-[178px] items-center justify-center rounded-[100px] bg-[var(--color-surface-white10)] text-[16px] leading-6 text-[var(--color-border-required)] disabled:opacity-40`,disabled:F.size===0||Q,onClick:it,children:x(Q?`collectTab.processing`:`collectTab.delete`)})]}),m(o,{className:`pointer-events-none absolute bottom-2 left-1/2 h-[5px] w-[134px] -translate-x-1/2 rounded-[100px] bg-[var(--color-neutral-black)]`})]}),j&&h(o,{className:`fixed bottom-0 left-0 right-0 z-[60] h-[98px] bg-[var(--color-overlay-panel-fade-start90)] backdrop-blur-[50px]`,children:[h(o,{className:`flex items-center gap-[2px] px-4 pt-2`,children:[m(`button`,{type:`button`,className:`flex h-12 w-[178px] items-center justify-center rounded-[100px] text-[16px] leading-6 text-[var(--color-text-primary)]`,onClick:rt,children:x(Ge?`collectTab.cancelSelectAll`:`collectTab.selectAll`)}),m(`button`,{type:`button`,className:`flex h-12 w-[178px] items-center justify-center rounded-[100px] bg-[var(--color-surface-white10)] text-[16px] leading-6 text-[var(--color-border-required)] disabled:opacity-40`,disabled:L.size===0||$,onClick:ct,children:x($?`collectTab.processing`:`collectTab.delete`)})]}),m(o,{className:`pointer-events-none absolute bottom-2 left-1/2 h-[5px] w-[134px] -translate-x-1/2 rounded-[100px] bg-[var(--color-neutral-black)]`})]}),m(ce,{open:Ae,onOpenChange:N,onCancel:at,onConfirm:st,title:``,description:x(`collectTab.deleteConfirmDescription`),confirmText:x(`collectTab.delete`),cancelText:x(`collectTab.cancel`),isConfirming:Q}),m(ce,{open:je,onOpenChange:P,onCancel:ot,onConfirm:lt,title:y(`detail.deleteCollection`),isConfirming:$}),m(se,{visible:Me,onClose:()=>Ne(!1),onCreated:()=>{H.refetch()}})]})}export{x as CollectTab};
2
+ "use client";import{cn as e}from"../../../../../../../utils/cn.mjs";import{useUserStore as t}from"../../../../../../../store/modules/user-store.mjs";import{gCommunityGetSubscribedCollections as n,gCommunityGetUserCollections as r,gInteractionListCollects as i,pCommunityBatchDeleteCollection as a,pInteractionBatchDeleteCollects as ee}from"../../../../../../../service/generated/client.mjs";import{Button as te}from"../../../../../../ui/button.mjs";import{Box as o}from"../../../../../../ui/box.mjs";import{Text as ne}from"../../../../../../ui/text.mjs";import{Tabs as re,TabsList as ie,TabsTrigger as s}from"../../../../../../ui/tabs.mjs";import{useMutation as ae,usePaginated as c,useUpdateRequest as oe}from"../../../../../../../hooks/query/use-query.mjs";import{CreateCollectionSheet as se}from"../../../../../../common/collection-popup/create-collection-sheet.mjs";import{DeleteConfirmDialog as ce}from"../../../../../../common/delete-confirm-dialog/delete-confirm-dialog.mjs";import{CollectionList as le}from"../../../../../../common/list/collection-list/collection-list.mjs";import{PostList as ue}from"../../../../../../common/list/post-list/post-list.mjs";import{trackProfilePageClick as de}from"../../../tracking.mjs";import{ProfileMainEmptyState as l}from"../../empty-state.mjs";import{getProfileMainSecondaryTabOptions as fe}from"../../variants.mjs";import{EditorPreviewWaterfall as pe}from"../editor-preview-waterfall.mjs";import{CollectVideoWaterfall as me}from"./video-waterfall.mjs";import{toast as u}from"sonner";import{useEffect as d,useMemo as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{useTranslations as g}from"next-intl";import _ from"dayjs";import{parseAsString as he,useQueryState as ge}from"nuqs";const _e={video:1,post:2};function ve(e,t){if(!e)return e;let n=0,r=e.pages.map(e=>({page:e,filteredList:(e.data?.list??b).filter(e=>{let r=e?.id??``,i=t.has(r);return i&&(n+=1),!i})}));return{...e,pages:r.map(({page:e,filteredList:t})=>{if(!e.data)return e;let r=typeof e.data.total==`number`?Math.max(0,e.data.total-n):e.data.total;return{...e,data:{...e.data,list:t,total:r}}})}}function v(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 ye(e,t){let n=t[e.content_id||``]?.create_time,r=v(e);return{id:e.content_id||``,title:e.content||``,coverImage:r,publishTime:_(n).toDate().getTime()}}function be(e){return String(e.description||e.detail?.description||``).trim()||``}function xe(e){let t=String(e.img_type||``).trim().toLowerCase();return t===`short`?e.img_y||e.img_x||``:t===`long`?e.img_x||e.img_y||``:e.img_y||e.img_x||``}function Se(e,t){let n=t[e.id||``]?.create_time;return{is_more_link:e.is_more_link,id:e.id||``,title:e.name||``,coverImage:xe(e),duration:Number(e.duration??e.detail?.duration??0),authorName:e.up_user||e.source_username||``,viewCount:e.play_count??0,publishTime:_(n).toDate().getTime(),imgType:e.img_type||e.media?.img_type||``,score:e.score??e.detail?.score,description:be(e)}}function y(e){let t=v(e);return{contentType:e.source_type,id:e.content_id,title:e.title||e.content,coverImage:t,isVideo:!1,isMovie:!1}}function Ce(e){return Array.from({length:3},(t,n)=>({id:`${e}-placeholder-${n}`,isPlaceholder:!0}))}function we(e){let t=e.contents??[],n=(Array.isArray(t)?t:[]).slice(0,3).map(y),r=e.content_count??n.length;return{id:e.collection_id||``,title:e.title||``,contentCount:r,isDefaultCollection:!!e.is_default,contents:r===0?Ce(e.collection_id||`collection`):n}}const b=[],Te=[`created`,`subscribed`];function Ee({className:t}){return m(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,className:e(`text-[var(--color-text-secondary)] opacity-60`,t),children:m(`path`,{d:`M7.33398 7.3335V4.66683H8.66732V7.3335H11.334V8.66683H8.66732V11.3335H7.33398V8.66683H4.66732V7.3335H7.33398ZM8.00065 14.6668C4.31875 14.6668 1.33398 11.682 1.33398 8.00016C1.33398 4.31826 4.31875 1.3335 8.00065 1.3335C11.6825 1.3335 14.6673 4.31826 14.6673 8.00016C14.6673 11.682 11.6825 14.6668 8.00065 14.6668ZM8.00065 13.3335C10.9462 13.3335 13.334 10.9457 13.334 8.00016C13.334 5.05464 10.9462 2.66683 8.00065 2.66683C5.05513 2.66683 2.66732 5.05464 2.66732 8.00016C2.66732 10.9457 5.05513 13.3335 8.00065 13.3335Z`,fill:`currentColor`})})}function De({className:t}){return m(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,className:e(`text-[var(--color-text-secondary)] opacity-60`,t),children:m(`g`,{children:m(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M10.7666 2.12385C10.9828 1.94731 11.3023 1.95935 11.5039 2.16096L13.8389 4.49592C13.942 4.5991 13.9999 4.73966 14 4.88557C14 5.03152 13.942 5.17199 13.8389 5.27522L11.5078 7.6053C11.5063 7.60688 11.5055 7.60959 11.5039 7.61116C11.5023 7.61279 11.4997 7.61345 11.498 7.61506L5.27539 13.8387C5.17216 13.9418 5.03168 13.9998 4.88574 13.9998H2.55078C2.24679 13.9998 2.00001 13.753 2 13.449V11.1141C2 10.9681 2.05794 10.8277 2.16113 10.7244L10.7246 2.16096L10.7666 2.12385ZM3.10059 11.3416V12.8992H4.6582L10.335 7.22151L8.77734 5.66389L3.10059 11.3416ZM9.55664 4.88459L11.1143 6.44221L12.6709 4.88557L11.1133 3.32893L9.55664 4.88459Z`,fill:`currentColor`})})})}const Oe=`shrink-0 whitespace-nowrap flex items-center gap-[2px] text-[14px] leading-6 text-[var(--color-text-secondary)]`;function x(){return e(`!flex !items-center !flex-none !h-auto !w-auto !rounded-[4px] !px-2 !py-[5px] !bg-[var(--color-surface-chip-gray20)] !text-[12px] !font-normal !leading-[14px] !text-text1 hover:!text-text1`,`data-[active]:!text-text1 data-[state=active]:!text-text1`,`data-[active]:!bg-[image:var(--gradient-action-button)]`,`data-[state=active]:!bg-[image:var(--gradient-action-button)]`)}function S({mode:e=`renderer`,userId:_,showCreateAction:v=!1,queryKeyPrefix:be,isMine:xe=!1,contentTypes:y}){let Ce=g(),S=g(`components.pages.collectionDetail`),C=g(`components.pages.profile.components.tabs`),w=e===`renderer`,T=be??[],E=f(()=>fe(y),[y]),D=f(()=>[...E,`collection`],[E]),[O,k]=ge(`collectTab`,he.withDefault(`video`)),[A,ke]=ge(`collectCollectionTab`,he.withDefault(`created`)),j=f(()=>{let e=D[0]??`video`;return D.includes(O)?O:e},[D,O]),M=f(()=>Te.includes(A)?A:`created`,[A]),[N,P]=p(!1),[F,I]=p(!1),[Ae,L]=p(!1),[je,R]=p(!1),[Me,Ne]=p(!1),[z,B]=p(()=>new Set),[V,H]=p(()=>new Set),{userId:Pe,userInfo:Fe}=t(),U=_||Pe||Fe?.userId||``,Ie=oe();async function Le(e,t){if(!U)return{data:{list:[],total:0}};let n=await i({user_id:U,folder_id:``,content_type:t,page:e,page_size:10}),r=n.data.collect_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},a=n.data?.collect_items?.map(e=>t===_e.video?Se(e.video_info,r):ye(e.post_info,r))??[];return{data:{list:a,total:n.data?.total??a.length}}}let W=c({key:[...T,`user-collect-video`,U],initialPageParam:1,async queryFn(e){return Le(e,_e.video)},options:{staleTime:0,enabled:w},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),G=c({key:[...T,`user-collect-post`,U],initialPageParam:1,options:{staleTime:0,enabled:w},async queryFn(e){return{data:{list:[],total:0,has_more:!1}}},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}});async function Re(e){if(!U)return{data:{list:[],total:0}};let t=await r({page:e,user_id:_,page_size:10}),n=t.data?.data?.collections??[];return{data:{list:n.map(we),total:t.data?.data?.total??n.length}}}async function ze(e){if(!U)return{data:{list:[],total:0}};let t=(await n({page:e,user_id:_,page_size:10})).data?.data,r=t?.collections??[];return{data:{list:r.map(we),total:t?.total??r.length}}}let K=c({key:[...T,`user-collection-created`,U],initialPageParam:1,options:{staleTime:0,enabled:w},async queryFn(e){return Re(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),q=c({key:[...T,`user-collection-subscribed`,U],initialPageParam:1,options:{staleTime:0,enabled:w},async queryFn(e){return ze(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),Be=f(()=>W.data?.pages.flatMap(e=>e.data?.list??b)??b,[W.data]),Ve=f(()=>G.data?.pages.flatMap(e=>e.data?.list??b)??b,[G.data]),He=f(()=>K.data?.pages.flatMap(e=>e.data?.list??b)??b,[K.data]),Ue=f(()=>q.data?.pages.flatMap(e=>e.data?.list??b)??b,[q.data]),We=j===`video`?Be:j===`post`?Ve:b,J=new Set(We.map(e=>e.id)),Ge=J.size,Ke=Ge>0&&z.size===Ge,Y=j===`video`?W:G,X=M===`created`?K:q,Z=M===`created`?He:Ue,qe=j===`video`?Be.length===0&&!Y.isFetching:j===`post`?Ve.length===0&&!Y.isFetching:Z.length===0&&!X.isFetching,Je=f(()=>new Set(Z.filter(e=>!e.isDefaultCollection).map(e=>e.id)),[Z]),Ye=Je.size>0&&[...Je].every(e=>V.has(e)),Xe=j===`video`,Ze=v&&M===`created`,Qe=[...T,`user-collect-video`,U],$e=[...T,`user-collect-post`,U],{mutateAsync:et,isPending:Q}=ae(async e=>await ee({app_id:0,user_id:U,folder_id:``,content_type:Xe?1:2,content_ids:e})),{mutateAsync:tt,isPending:$}=ae(async e=>await a({collection_ids:e})),nt=()=>{P(!N),B(new Set)};function rt(){Ze&&(I(e=>!e),H(new Set))}d(()=>{if(B(new Set),j===`collection`){P(!1),L(!1);return}P(!1),H(new Set),I(!1),R(!1)},[j]),d(()=>{H(new Set),I(!1),R(!1)},[M]),d(()=>{O!==j&&k(j)},[j,O,k]),d(()=>{A!==M&&ke(M)},[M,A,ke]);let it=e=>{B(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},at=()=>{z.size===J.size&&J.size>0?B(new Set):B(new Set(J))};function ot(e){if(Z.find(t=>t.id===e)?.isDefaultCollection){u.error(S(`detail.defaultCollectionDeleteNotSupported`));return}H(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function st(){if(Ye){H(new Set);return}H(new Set(Je))}function ct(){z.size===0||Q||L(!0)}function lt(){Q||L(!1)}function ut(){$||R(!1)}async function dt(){if(!(z.size===0||Q)){if(!U){u.error(C(`collectTab.pleaseLogin`));return}try{let e=Array.from(z),t=await et(e);if(t.code===0){u.success(C(`collectTab.uncollectedSuccess`));let t=new Set(e);Ie(Xe?Qe:$e,e=>ve(e,t)),L(!1),B(new Set),P(!1)}else u.error(t.message||C(`collectTab.uncollectFailed`))}catch(e){console.error(`取消收藏失败`,e),u.error(C(`collectTab.operationFailed`))}}}function ft(){V.size===0||$||R(!0)}async function pt(){if(!(V.size===0||$)){if(!U){u.error(C(`collectTab.pleaseLogin`));return}try{let e=await tt(Array.from(V));if(e.code===0){u.success(S(`detail.deleteSuccess`)),await X.refetch(),R(!1),H(new Set),I(!1);return}u.error(e.message||S(`detail.deleteFailed`))}catch(e){console.error(`删除收藏夹失败`,e),u.error(S(`detail.deleteFailed`))}}}let mt=async()=>{if(w){if(j===`collection`){await X.fetchNextPage();return}await Y.fetchNextPage()}};return h(o,{children:[h(o,{className:`flex items-start justify-between gap-3`,children:[m(o,{className:`min-w-0 flex-1 overflow-x-auto overflow-y-hidden [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden`,children:D.length>0&&m(re,{value:j,onValueChange:e=>{k(e)},children:h(ie,{variant:`tag`,className:`!h-auto !gap-4 !p-0`,children:[E.includes(`video`)&&m(s,{value:`video`,className:x(),children:C(`collectTab.video`)}),E.includes(`novel`)&&m(s,{value:`novel`,className:x(),children:C(`collectTab.novel`)}),E.includes(`comic`)&&m(s,{value:`comic`,className:x(),children:C(`collectTab.comic`)}),E.includes(`post`)&&m(s,{value:`post`,className:x(),children:C(`collectTab.posts`)}),m(s,{value:`collection`,className:x(),children:C(`collectTab.collections`)})]})})}),j===`collection`?v&&h(o,{className:`shrink-0 flex items-center gap-3 pl-2`,children:[h(`button`,{type:`button`,className:Oe,onClick:()=>Ne(!0),children:[m(Ee,{}),m(ne,{className:`text-[14px] leading-6 text-[var(--color-text-secondary)]`,children:Ce(`components.pages.collectionCreate.form.create`)})]}),Ze&&h(`button`,{type:`button`,className:Oe,onClick:rt,children:[!F&&m(De,{}),m(ne,{className:`text-[14px] leading-6 text-[var(--color-text-secondary)]`,children:C(F?`collectTab.cancel`:`collectTab.edit`)})]})]}):(j===`video`||j===`post`)&&xe&&h(te,{variant:`ghost`,size:`sm`,className:`h-6 gap-[2px] px-0 text-[14px] leading-6 text-[var(--color-text-secondary)] hover:bg-transparent hover:text-[var(--color-text-secondary)]`,onClick:nt,children:[N?null:m(De,{}),m(ne,{className:`text-[14px] leading-6 text-[var(--color-text-secondary)]`,children:C(N?`collectTab.cancel`:`collectTab.edit`)})]})]}),m(o,{onClick:e=>{de(e,`content_item`)},className:`pt-4`,children:!w&&(j===`video`||j===`post`||j===`novel`||j===`comic`)?m(pe,{contentType:j}):j===`video`?qe?m(l,{text:C(`collectTab.emptyContent`)}):m(me,{list:Be,loading:Y.isFetching,hasMore:Y.hasNextPage??!1,loadMore:mt,emptyText:C(`collectTab.emptyContent`),isEditMode:N,selectedIds:z,onToggleSelection:it}):j===`post`?qe?m(l,{text:C(`collectTab.emptyContent`)}):m(ue,{list:Ve,loading:Y.isFetching,hasMore:Y.hasNextPage??!1,loadMore:mt,emptyText:C(`collectTab.emptyContent`),isEditMode:N,selectedIds:z,onToggleSelection:it}):j===`novel`||j===`comic`||qe?m(l,{text:C(`collectTab.emptyContent`)}):m(le,{list:Z,loading:X.isFetching,hasMore:X.hasNextPage??!1,loadMore:mt,emptyText:C(`collectTab.emptyContent`),isEditMode:F,selectedIds:V,onToggleSelection:ot})}),N&&j!==`collection`&&h(o,{className:`fixed bottom-0 left-0 right-0 z-[60] h-[98px] bg-[var(--color-overlay-panel-fade-start90)] backdrop-blur-[50px]`,children:[h(o,{className:`flex items-center gap-[2px] px-4 pt-2`,children:[m(`button`,{type:`button`,className:`flex h-12 w-[178px] items-center justify-center rounded-[100px] text-[16px] leading-6 text-[var(--color-text-primary)]`,onClick:at,children:C(Ke?`collectTab.cancelSelectAll`:`collectTab.selectAll`)}),m(`button`,{type:`button`,className:`flex h-12 w-[178px] items-center justify-center rounded-[100px] bg-[var(--color-surface-white10)] text-[16px] leading-6 text-[var(--color-border-required)] disabled:opacity-40`,disabled:z.size===0||Q,onClick:ct,children:C(Q?`collectTab.processing`:`collectTab.delete`)})]}),m(o,{className:`pointer-events-none absolute bottom-2 left-1/2 h-[5px] w-[134px] -translate-x-1/2 rounded-[100px] bg-[var(--color-neutral-black)]`})]}),F&&h(o,{className:`fixed bottom-0 left-0 right-0 z-[60] h-[98px] bg-[var(--color-overlay-panel-fade-start90)] backdrop-blur-[50px]`,children:[h(o,{className:`flex items-center gap-[2px] px-4 pt-2`,children:[m(`button`,{type:`button`,className:`flex h-12 w-[178px] items-center justify-center rounded-[100px] text-[16px] leading-6 text-[var(--color-text-primary)]`,onClick:st,children:C(Ye?`collectTab.cancelSelectAll`:`collectTab.selectAll`)}),m(`button`,{type:`button`,className:`flex h-12 w-[178px] items-center justify-center rounded-[100px] bg-[var(--color-surface-white10)] text-[16px] leading-6 text-[var(--color-border-required)] disabled:opacity-40`,disabled:V.size===0||$,onClick:ft,children:C($?`collectTab.processing`:`collectTab.delete`)})]}),m(o,{className:`pointer-events-none absolute bottom-2 left-1/2 h-[5px] w-[134px] -translate-x-1/2 rounded-[100px] bg-[var(--color-neutral-black)]`})]}),m(ce,{open:Ae,onOpenChange:L,onCancel:lt,onConfirm:dt,title:``,description:C(`collectTab.deleteConfirmDescription`),confirmText:C(`collectTab.delete`),cancelText:C(`collectTab.cancel`),isConfirming:Q}),m(ce,{open:je,onOpenChange:R,onCancel:ut,onConfirm:pt,title:S(`detail.deleteCollection`),isConfirming:$}),m(se,{visible:Me,onClose:()=>Ne(!1),onCreated:()=>{K.refetch()}})]})}export{S as CollectTab};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{formatCompactCount as e}from"../../../../../../../utils/common.mjs";import{Image as t}from"../../../../../../ui/image.mjs";import{Box as n}from"../../../../../../ui/box.mjs";import{EmptyState as r}from"../../../../../../ui/empty.mjs";import{InfiniteScroll as i}from"../../../../../../ui/infinite-scroll.mjs";import{Text as a}from"../../../../../../ui/text.mjs";import{Skeleton as o}from"../../../../../../ui/skeleton.mjs";import s from"../../../../../../ui/link.mjs";import{CollectionSelectIcon as c,CollectionSelectedIcon as l}from"../../../../../../common/list/collection-list/collection-select-icon.mjs";import{VideoIcon as u}from"../../../../../../common/icons/video.mjs";import{Fragment as d,jsx as f,jsxs as p}from"react/jsx-runtime";import{useTranslations as m}from"next-intl";const h=`h-[128px] w-[173px]`,g={backgroundImage:`linear-gradient(179.56deg, rgba(8, 2, 17, 0.5) 1.27%, rgba(8, 2, 17, 0) 33.97%, rgba(8, 2, 17, 0) 63.33%, rgba(8, 2, 17, 0.5) 98.57%)`};function _(t){return e(Number.isFinite(t)?Math.max(0,t):0)}function v(e){let t=Number.isFinite(e)?Math.max(0,Math.floor(e)):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 y(){return f(n,{className:`flex w-full flex-col gap-4`,children:Array.from({length:4},(e,t)=>p(n,{className:`flex min-w-0 gap-3`,children:[f(o,{className:`shrink-0 rounded-[8px] ${h}`}),p(n,{className:`flex min-w-0 flex-1 flex-col gap-4 pt-[20px]`,children:[p(n,{className:`flex flex-col gap-2`,children:[f(o,{className:`h-4 w-[88%] rounded`}),f(o,{className:`h-4 w-[62%] rounded`})]}),p(n,{className:`flex flex-col gap-2`,children:[f(o,{className:`h-3 w-full rounded`}),f(o,{className:`h-3 w-[72%] rounded`})]})]})]},`collect-video-skeleton-${t}`))})}function b({item:e,isEditMode:r,isSelected:i,onToggleSelection:o}){let y=m(`components.ui.list.videoList`),b=e.id||``,x=_(e.viewCount),S=v(e.duration),C=e.is_more_link!==void 0&&e.is_more_link!==null,w=e.is_more_link?y(`videoListItem.series`):y(`videoListItem.movie`),T=e.description?.trim()?`简介:${e.description.trim()}`:``;function E(){!r||!b||o?.(b)}let D=p(n,{className:`flex min-w-0 gap-3`,children:[p(n,{className:`relative shrink-0 overflow-hidden rounded-[8px] bg-[#18111f] ${h}`,children:[e.coverImage&&f(t,{src:e.coverImage,alt:e.title||`cover`,fill:!0,objectFit:`cover`,className:`object-cover`}),f(n,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:g,"aria-hidden":!0}),!r&&p(d,{children:[C&&f(n,{className:`absolute left-2 top-3 z-10 flex max-h-[18px] items-center rounded bg-white/20 px-1 py-0.5`,children:f(a,{className:`text-center text-[12px] leading-[14px] text-white`,children:w})}),p(n,{className:`absolute bottom-3 left-2 right-2 z-10 flex items-center justify-between`,children:[p(n,{className:`flex min-w-0 items-center gap-1`,children:[f(u,{className:`size-4 shrink-0 text-white opacity-80`,"aria-hidden":!0}),x?f(a,{className:`truncate text-[14px] leading-5 text-white`,children:x}):null]}),S?f(a,{className:`shrink-0 text-[14px] leading-5 text-white`,children:S}):null]})]}),r&&f(n,{className:`pointer-events-none absolute left-2 top-2 z-20`,children:f(i?l:c,{})})]}),p(n,{className:`flex min-w-0 flex-1 flex-col gap-4 pt-[20px]`,children:[f(a,{as:`h3`,className:`line-clamp-2 text-[14px] font-normal leading-5 text-[rgba(255,255,255,0.8)]`,children:e.title}),T?f(a,{className:`line-clamp-2 text-[12px] leading-4 text-[rgba(255,255,255,0.5)]`,children:T}):null]})]});return r?f(`button`,{type:`button`,className:`w-full cursor-pointer border-0 bg-transparent p-0 text-left`,onClick:E,"aria-pressed":i,disabled:!b,children:D}):f(s,{href:e.id?`/video/${e.id}/${e.title}`:`#`,className:`block w-full`,children:D})}function x({list:e,loading:t=!1,hasMore:a=!1,loadMore:o,emptyText:s=``,isEditMode:c=!1,selectedIds:l,onToggleSelection:u}){return t&&e.length===0?f(y,{}):e.length===0?f(r,{type:`no-content`,text:s,className:`!pt-[72px]`}):f(i,{loadMore:async()=>{await o?.()},hasMore:!!o&&a,noMoreText:`没有更多了`,className:`w-full`,children:f(n,{className:`flex w-full flex-col gap-4`,children:e.map((e,t)=>{let n=e.id?`collect-video-row-${e.id}-${t}`:`collect-video-row-${t}`;return f(b,{item:e,isEditMode:c,isSelected:!!(e.id&&l?.has(e.id)),onToggleSelection:u},n)})})})}export{x as CollectVideoWaterfall};
2
+ "use client";import{formatCompactCount as e}from"../../../../../../../utils/common.mjs";import{Image as t}from"../../../../../../ui/image.mjs";import{Box as n}from"../../../../../../ui/box.mjs";import{EmptyState as r}from"../../../../../../ui/empty.mjs";import{InfiniteScroll as i}from"../../../../../../ui/infinite-scroll.mjs";import{Text as a}from"../../../../../../ui/text.mjs";import{Skeleton as o}from"../../../../../../ui/skeleton.mjs";import s from"../../../../../../ui/link.mjs";import{CollectionSelectIcon as c,CollectionSelectedIcon as l}from"../../../../../../common/list/collection-list/collection-select-icon.mjs";import{VideoIcon as u}from"../../../../../../common/icons/video.mjs";import{Fragment as d,jsx as f,jsxs as p}from"react/jsx-runtime";import{useTranslations as m}from"next-intl";const h=`h-[128px] w-[173px]`,g={backgroundImage:`linear-gradient(179.56deg, rgba(8, 2, 17, 0.5) 1.27%, rgba(8, 2, 17, 0) 33.97%, rgba(8, 2, 17, 0) 63.33%, rgba(8, 2, 17, 0.5) 98.57%)`};function _(t){return e(Number.isFinite(t)?Math.max(0,t):0)}function v(e){let t=Number.isFinite(e)?Math.max(0,Math.floor(e)):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 y(){return f(n,{className:`flex w-full flex-col gap-4`,children:Array.from({length:4},(e,t)=>p(n,{className:`flex gap-3`,children:[f(o,{className:`shrink-0 rounded-[8px] bg-white/8 ${h}`}),p(n,{className:`flex min-w-0 flex-1 flex-col gap-4 pt-1`,children:[f(o,{className:`h-5 w-full rounded bg-white/8`}),f(o,{className:`h-4 w-full rounded bg-white/8`})]})]},`collect-video-skeleton-${t}`))})}function b({item:e,isEditMode:r,isSelected:i,onToggleSelection:o}){let y=m(`components.ui.list.videoList`),b=e.id||``,x=_(e.viewCount),S=v(e.duration),C=e.is_more_link!==void 0&&e.is_more_link!==null,w=e.is_more_link?y(`videoListItem.series`):y(`videoListItem.movie`),T=e.description?.trim()?`简介:${e.description.trim()}`:``;function E(){!r||!b||o?.(b)}let D=p(n,{className:`flex min-w-0 gap-3`,children:[p(n,{className:`relative shrink-0 overflow-hidden rounded-[8px] bg-[#18111f] ${h}`,children:[e.coverImage&&f(t,{src:e.coverImage,alt:e.title||`cover`,fill:!0,objectFit:`cover`,className:`object-cover`}),f(n,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:g,"aria-hidden":!0}),!r&&p(d,{children:[C&&f(n,{className:`absolute left-2 top-3 z-10 flex max-h-[18px] items-center rounded bg-white/20 px-1 py-0.5`,children:f(a,{className:`text-center text-[12px] leading-[14px] text-white`,children:w})}),p(n,{className:`absolute bottom-3 left-2 right-2 z-10 flex items-center justify-between`,children:[p(n,{className:`flex min-w-0 items-center gap-1`,children:[f(u,{className:`size-4 shrink-0 text-white opacity-80`,"aria-hidden":!0}),x?f(a,{className:`truncate text-[14px] leading-5 text-white`,children:x}):null]}),S?f(a,{className:`shrink-0 text-[14px] leading-5 text-white`,children:S}):null]})]}),r&&f(n,{className:`pointer-events-none absolute left-2 top-2 z-20`,children:f(i?l:c,{})})]}),p(n,{className:`flex min-w-0 flex-1 flex-col gap-4 pt-[20px]`,children:[f(a,{as:`h3`,className:`line-clamp-2 text-[14px] font-normal leading-5 text-[rgba(255,255,255,0.8)]`,children:e.title}),T?f(a,{className:`line-clamp-2 text-[12px] leading-4 text-[rgba(255,255,255,0.5)]`,children:T}):null]})]});return r?f(`button`,{type:`button`,className:`w-full cursor-pointer border-0 bg-transparent p-0 text-left`,onClick:E,"aria-pressed":i,disabled:!b,children:D}):f(s,{href:e.id?`/video/${e.id}/${e.title}`:`#`,className:`block w-full`,children:D})}function x({list:e,loading:t=!1,hasMore:a=!1,loadMore:o,emptyText:s=``,isEditMode:c=!1,selectedIds:l,onToggleSelection:u}){return t&&e.length===0?f(y,{}):e.length===0?f(r,{type:`no-content`,text:s,className:`!pt-[72px]`}):f(i,{loadMore:async()=>{await o?.()},hasMore:!!o&&a,noMoreText:`没有更多了`,className:`w-full`,children:f(n,{className:`flex w-full flex-col gap-4`,children:e.map((e,t)=>{let n=e.id?`collect-video-row-${e.id}-${t}`:`collect-video-row-${t}`;return f(b,{item:e,isEditMode:c,isSelected:!!(e.id&&l?.has(e.id)),onToggleSelection:u},n)})})})}export{x as CollectVideoWaterfall};
@@ -0,0 +1,2 @@
1
+
2
+ "use client";import{WaterfallRecommend as e}from"../../../../../common/list/waterfall-recommend/waterfall-recommend.mjs";import{jsx as t}from"react/jsx-runtime";const n=[`/truss/20260227/69a136457d10f.jpgxxx`,`/md-204/uploads/default/other/2024-08-26/14664d2c31e61c201a29cd4abba267c5.jpg`,`/md-204/resource/8c/8cb28f46831558fbeb2f34b2076c3b4e.jpg`,`/md-204/resource/24/24ef267eef2c35b5e4cf12dac8b55c14.jpg`,`/md-204/resource/b4/b410ccdcd86936455b9460a9152aaa47.jpg`,`/md-204/resource/2b/2b43375f2248c1a012847d4507fd21a3.jpg`];function r(e){let t={video:`视频`,novel:`小说`,comic:`漫画`,post:`帖子`};return n.map((n,r)=>({key:`editor-preview-${e}-${r}`,sourceIndex:r,href:`#`,cardKind:r%3==1?`short`:`tall`,coverUrl:n,title:`${t[e]}内容标题 ${r+1}`,heatText:`${(r+1)*8.6}k`,episodeText:e===`video`?`${r+8}集`:void 0,score:8+r%3*.3}))}function i(e){let t=[],n=[],r=0,i=0;return e.forEach(e=>{let a=(e.cardKind===`short`?142:216)+16;if(r<=i){t.push(e),r+=a;return}n.push(e),i+=a}),{left:t,right:n}}function a({contentType:n}){return t(e,{title:``,columns:i(r(n)),sectionClassName:`w-full`,headerClassName:`hidden`,containerClassName:`relative flex w-full gap-4`})}export{a as EditorPreviewWaterfall};