@funhub/platform 0.2.27 → 0.2.29

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 (123) hide show
  1. package/dist/biz.d.mts +4 -6
  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 +7 -0
  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 +3 -0
  15. package/dist/components/biz/business/advertisement/popup-ad/schema.d.mts +6 -0
  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 +3 -5
  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 +3 -5
  35. package/dist/components/biz/business/profile/profile-header/client.d.mts +2 -3
  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 +2 -4
  38. package/dist/components/biz/business/profile/profile-header/material.d.mts +1 -44
  39. package/dist/components/biz/business/profile/profile-header/material.mjs +1 -1
  40. package/dist/components/biz/business/profile/profile-header/schema.d.mts +5 -13
  41. package/dist/components/biz/business/profile/profile-header/schema.mjs +1 -1
  42. package/dist/components/biz/business/profile/profile-header/user-profile-avatar.mjs +1 -1
  43. package/dist/components/biz/business/profile/profile-header/user-profile-cover-background.mjs +1 -1
  44. package/dist/components/biz/business/profile/profile-main/client.d.mts +0 -1
  45. package/dist/components/biz/business/profile/profile-main/client.mjs +1 -1
  46. package/dist/components/biz/business/profile/profile-main/index.d.mts +2 -2
  47. package/dist/components/biz/business/profile/profile-main/material.d.mts +0 -3
  48. package/dist/components/biz/business/profile/profile-main/schema.d.mts +3 -7
  49. package/dist/components/biz/business/profile/profile-main/schema.mjs +1 -1
  50. package/dist/components/biz/business/profile/profile-main/shell.d.mts +0 -7
  51. package/dist/components/biz/business/profile/profile-main/shell.mjs +1 -1
  52. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.mjs +1 -1
  53. package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/video-waterfall.mjs +1 -1
  54. package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.mjs +1 -1
  55. package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.mjs +1 -1
  56. package/dist/components/biz/business/profile/profile-main/tabs/publish-tab/client.mjs +1 -1
  57. package/dist/components/biz/business/profile/profile-main/variants.d.mts +3 -22
  58. package/dist/components/biz/business/profile/profile-main/variants.mjs +1 -1
  59. package/dist/components/biz/business/search-history/client.mjs +1 -1
  60. package/dist/components/biz/business/search-input/client.mjs +1 -1
  61. package/dist/components/biz/business/shortcut-grid/client.mjs +1 -1
  62. package/dist/components/biz/business/tab-bar/client.mjs +1 -1
  63. package/dist/components/biz/business/text-recommend/client.mjs +1 -1
  64. package/dist/components/common/analytics-init/page-lifecycle-tracker.mjs +1 -1
  65. package/dist/components/common/background-preview-modal/background-preview-modal.mjs +1 -1
  66. package/dist/components/common/list/waterfall-recommend/waterfall-recommend.mjs +1 -1
  67. package/dist/components/common/popup-video/index.mjs +1 -1
  68. package/dist/components/common/series-episodes/index.mjs +1 -1
  69. package/dist/components/common/tab-bar/index.mjs +1 -1
  70. package/dist/components/common/top-nav-bar/client.mjs +1 -1
  71. package/dist/components/common/video-player/style.module.mjs +4 -0
  72. package/dist/components/common/video-player/video-blind-ad-overlay.mjs +1 -1
  73. package/dist/components/common/video-player/video-preroll-ad-overlay.mjs +1 -1
  74. package/dist/components/pages/collection-add/page.mjs +1 -1
  75. package/dist/components/pages/edit/page.mjs +1 -1
  76. package/dist/components/pages/fullscreen-feed/page.mjs +1 -1
  77. package/dist/components/pages/post-detail/post-detail-client.mjs +1 -1
  78. package/dist/components/pages/search/hot-recommend.mjs +1 -1
  79. package/dist/components/pages/search/hot-search.mjs +1 -1
  80. package/dist/components/pages/search/page-client.mjs +1 -1
  81. package/dist/components/pages/search/search-result/search-all.mjs +1 -1
  82. package/dist/components/pages/search/search-result/search-video-info.mjs +1 -1
  83. package/dist/components/pages/search/top-header.mjs +1 -1
  84. package/dist/components/pages/search-result/page-client.mjs +1 -1
  85. package/dist/components/pages/search-result/search-all.mjs +1 -1
  86. package/dist/components/pages/search-result/search-tab.mjs +1 -1
  87. package/dist/components/pages/search-result/search-user.mjs +1 -1
  88. package/dist/components/pages/search-result/top-header.mjs +1 -1
  89. package/dist/components/pages/settings/_components/settings.mjs +1 -1
  90. package/dist/components/pages/video-detail/video-detail-client.mjs +1 -1
  91. package/dist/components/pages/video-list/video-list-client.mjs +1 -1
  92. package/dist/components/pages/video-list/video-list-recommend-item.mjs +1 -1
  93. package/dist/components/pages/video-list/video-list-skeleton.mjs +1 -1
  94. package/dist/components/ui/badge.d.mts +1 -1
  95. package/dist/components/ui/button.d.mts +2 -2
  96. package/dist/components/ui/empty.d.mts +1 -1
  97. package/dist/components/ui/item.d.mts +1 -1
  98. package/dist/hooks/use-content-operate.mjs +1 -1
  99. package/dist/i18n/locales/en.mjs +1 -1
  100. package/dist/i18n/locales/zh-CN.mjs +1 -1
  101. package/dist/materials.d.mts +2 -2
  102. package/dist/materials.mjs +1 -1
  103. package/dist/service/advertisement.d.mts +4 -0
  104. package/dist/service/advertisement.mjs +1 -1
  105. package/dist/utils/common.mjs +1 -1
  106. package/dist/utils/http.mjs +1 -1
  107. package/dist/utils/schema/inspector.d.mts +2 -2
  108. package/dist/utils/tracking.d.mts +3 -11
  109. package/dist/utils/tracking.mjs +1 -1
  110. package/dist/utils/use-compatible-router.mjs +1 -1
  111. package/dist/utils.d.mts +2 -2
  112. package/dist/utils.mjs +1 -1
  113. package/package.json +1 -1
  114. package/theme.css +47 -0
  115. package/dist/components/biz/business/profile/profile-header/my-client.d.mts +0 -12
  116. package/dist/components/biz/business/profile/profile-header/my-client.mjs +0 -2
  117. package/dist/components/biz/business/profile/profile-header/my-profile-actions.mjs +0 -2
  118. package/dist/components/biz/business/profile/profile-header/my-profile-header.mjs +0 -2
  119. package/dist/components/biz/business/profile/profile-header/shared.mjs +0 -2
  120. package/dist/components/biz/business/profile/profile-header/visitor-client.d.mts +0 -12
  121. package/dist/components/biz/business/profile/profile-header/visitor-client.mjs +0 -2
  122. package/dist/components/biz/business/profile/profile-header/visitor-profile-actions.mjs +0 -2
  123. package/dist/components/biz/business/profile/profile-header/visitor-profile-header.mjs +0 -2
@@ -1,4 +1,4 @@
1
1
 
2
2
  var e={components:{biz:{basics:{fullscreenFeed:{runtime:{bottomInfo:{collapse:`收起`,expand:`展开`,nextItem:`下一条`,seriesAction:`选集·{title}`,seriesActionWithEpisode:`选集·{title} {episodeName}`},commentModal:{comment:`评论`},userAction:{collectAction:`收藏`,commentAction:`评论`,followFailed:`关注失败`,like:`赞`,likeAction:`喜欢`,loginRequired:`请先登录`,shareAction:`分享`},videoSlide:{watchFullscreen:`全屏观看`}}}},business:{comment:{commentInput:{cannotSelectVideoWhenImageSelected:`已选择图片时不能再选择视频`,dragFileNotSupported:`不支持拖拽图片/文件,请使用下方按钮上传`,image:`图片`,imageUploadFailed:`上传图片失败`,partialImageUploadFailed:`部分图片上传失败`,pasteFileNotSupported:`不支持粘贴图片/文件,请使用下方按钮上传`,placeholder:`说点什么...`,publishCommentFailed:`发布评论失败`,publishDefault:`发布`,publishSuccess:`发布成功`,publishing:`发布中...`,video:`视频`,videoUploadFailed:`视频上传失败`},commentItem:{contentInReview:`内容审核中`,dislike:`踩`,like:`赞`,reply:`回复`,replyCount:`{count}条回复`},commentList:{dislikeHint:`你已经点踩过了`,emptyPrompt:`还没人评论,快来成为第一人吧`,fetchCommentsFailed:`获取评论失败`,invalidReplyTarget:`回复目标无效`,loading:`加载中...`,loginRequired:`请先登录`,noMore:`没有更多了`,publishCommentFailed:`发布评论失败`,publishReplyFailed:`发布回复失败`,viewMore:`查看更多`},replyDetail:{commentDetail:`评论详情`,dislike:`踩`,dislikeHint:`你已经点踩过了`,fetchRepliesFailed:`获取回复列表失败`,follow:`关注`,followFailed:`关注失败`,followed:`已关注`,invalidReplyTarget:`无效回复对象`,like:`赞`,loginRequired:`请先登录`,publishReplyFailed:`发布回复失败`,reply:`回复`,underReview:`内容审核中`,unfollowFailed:`取消关注失败`}},contact:{contactList:{myFollowing:`我的关注`,noFollowingUsers:`你还没有关注任何用户`,noMore:`没有更多了`,noSearchResult:`没有搜索到结果`},contactSearch:{cancel:`取消`,close:`关闭`,placeholder:`请搜索你想@的人`}},detail:{detailFollowAction:{follow:`关注`,following:`已关注`},detailGuessLike:{title:`猜你喜欢`},detailIntroduction:{collapse:`收起`,expand:`展开`,score:`评分`},detailOperate:{collectAdded:`已加入`,collectFailed:`收藏失败`,collection:`收藏`,defaultCollection:`默认收藏夹`,like:`赞`,likeFailed:`点赞失败`,likeSuccess:`已点赞`,modifyCollection:`修改收藏夹`,modifyCollectionSuccess:`修改收藏夹成功`,operateFailed:`操作失败,请重试`,share:`分享`,uncollectSuccess:`已取消收藏`,unlikeSuccess:`已取消点赞`},detailPopularComments:{emptyPrompt:`期待你发布第一条评论`,like:`赞`,mediaPlaceholder:`[图片/视频]`,popularComments:`热门评论`},detailTabs:{discussion:`讨论`,video:`视频`},postRecommendList:{title:`相关推荐`},videoHero:{coverAlt:`视频播放器封面`,noVideos:`暂无可播放的视频`}},fullscreenFeed:{variants:{fullscreenVideoFeed:{runtime:{client:{contentLoading:`内容加载中...`}}}}},imageTextRecommend:{allEpisodes:`全{count}集`,defaultTitle:`推荐视频`,noCover:`无封面`,updatedTo:`更至{count}集`},marquee:{noticeAlt:`公告`},navBar:{variants:{basicNavBar:{runtime:{channelFilterDialog:{add:`添加`,allAddedTo:`已经全部添加到`,allChannels:`全部频道`,delete:`删除`,moreChannels:`更多频道`,myChannels:`我的频道`,resetDefault:`恢复默认`},moreChannelEntry:`其他`}}}},searchHistory:{clear:`清理`,clearAllHistory:`删除全部历史`,confirmClearDescription:`确认删除全部搜索历史吗?`,defaultTitle:`搜索历史`,mockHistory1:`示例历史1`,mockHistory2:`示例历史2`,mockHistory3:`示例历史3`},textRecommend:{defaultTitle:`推荐搜索`,refreshBatch:`换一批`}}},common:{blockedDialog:{contactSupport:`联系客服`,description:`由于:{remark},您的账号被限制登录
3
3
  解封时间:{unblockTime}
4
- 如非本人操作,可联系客服或提出申诉`,gotIt:`我知道了`,remarkDefault:`检测到异常行为`,title:`账号已被限制`,unblockTimePermanent:`永久封禁`},collectionPopup:{collectSuccess:`收藏成功`,coverAlt:`封面图`,createCollection:`创建合集`,createCollectionHint:`可以去创建你的合集`,createModalAction:`确定`,createModalTitle:`新建收藏夹`,favoriteToCollectionTitle:`收藏到合集`,newCollection:`新建`,noCollections:`暂无合集`,postsCountSuffix:`篇贴子`,selectTitle:`选择收藏夹`,updateSuccess:`修改收藏夹成功`},debugLocaleSwitcher:{current:`当前`,languageDebugging:`语言调试`},deleteConfirmDialog:{cancel:`取消`,confirm:`确认删除`,description:`删除后无法恢复`},followButton:{follow:`关注`,followFailed:`关注失败`,following:`已关注`,loginFailed:`登录失败`,loginRequired:`请先登录`,unfollowConfirmDialog:{cancel:`取消`,confirm:`确定`,confirmUnfollow:`确认要取消关注吗`},unfollowFailed:`取消关注失败`},imageCropModal:{cancel:`取消`,confirm:`确认`,processing:`处理中...`},infoCard:{cardBottom:{comment:`评论`,dislike:`踩`,like:`赞`,share:`分享`}},list:{collectionList:{collectionListItem:{contentCountSuffix:`个内容`,movieLabel:`电影`}}},photoGrid:{episodeLoading:`剧集加载中`,missingEpisode:`缺少有效的剧集`,noEpisodes:`暂无可播放的剧集`},picker:{genderPicker:{cancel:`取消`,confirm:`确认`,options:{female:`女`,male:`男`,secret:`保密`},title:`选择性别`},pickerDrawer:{cancel:`取消`,confirm:`确认`,title:`请选择`}},seriesEpisodes:{compactTotal:`共{total}集`,completedSeriesTotal:`完结剧集:共{total}集`,episodeLabel:`第{episode}集`,episodeNotFound:`剧集不存在`,episodeSwitchFailed:`剧集切换失败`,episodeSwitching:`切换中...`,episodeTitle:`分集标题`,ongoingSeriesTotal:`连载剧集:共{total}集`,ongoingSeriesUpdatedTo:`连载剧集:更新至{total}集`,selectorTitle:`选集`,singleContent:`单集内容`},sharePopup:{shareContent:{copyFailed:`复制失败`,copyShareLink:`复制链接`,copySuccess:`复制成功`,shareHint:`可以粘贴链接分享给好友`,shareLinksTitle:`分享链接`},shareDrawer:{cancel:`取消`,collectionLabel:`收藏`,label:`取消收藏`,moments:`朋友圈`,wechat:`微信`,wechatFriend:`微信好友`}},skeleton:{loading:`加载中`},title:`确认删除该内容吗?`},pages:{collectionAdd:{page:{collectionNotFound:`未找到合集信息`,done:`完成`,emptyPublish:`暂无可添加的帖子`,selectPostFirst:`请先选择帖子`,submitFailed:`添加失败,请稍后再试`,submitSuccess:`添加成功`,submitting:`添加中...`,title:`添加帖子到合集`,userNotFound:`未找到用户信息`}},collectionCreate:{form:{addCover:`添加封面`,clear:`清除`,collectionNotFound:`未找到收藏夹信息`,coverAlt:`收藏夹封面`,coverLabel:`封面`,coverUploadFailed:`上传封面失败`,create:`创建`,createFailed:`创建失败`,createSuccess:`创建成功`,createTitle:`创建收藏夹`,creating:`创建中...`,descriptionLabel:`说明`,descriptionPlaceholder:`请输入收藏夹说明`,descriptionRequired:`请输入收藏夹说明`,editTitle:`编辑收藏夹`,label:`名称`,save:`保存`,saveFailed:`保存失败`,saveSuccess:`保存成功`,saving:`保存中...`,signatureLabel:`个人签名`,titlePlaceholder:`请输入收藏夹名称`,titleRequired:`请输入收藏夹名称`,uploading:`上传中...`}},collectionDetail:{components:{collectionDetailCard:{collectedInLabel:`收藏于`}},detail:{add:`添加内容`,batchRemoveVideosConfirmTitle:`确认将所选内容从收藏夹移除?`,cancel:`取消`,collectionManageTitle:`收藏夹管理`,contentCountSuffix:`款内容`,coverAlt:`收藏夹封面`,defaultCollectionDeleteNotSupported:`默认收藏夹不支持删除`,defaultTitle:`收藏夹`,delete:`删除`,deleteCollection:`删除收藏夹`,deleteFailed:`删除失败`,deleteSuccess:`收藏夹已删除`,deleting:`删除中...`,done:`完成`,editCollection:`编辑收藏夹`,emptyContent:`暂无内容`,manageCollection:`管理收藏夹`,operationFailed:`操作失败,请稍后再试`,ownerAvatarAlt:`收藏夹拥有者`,pleaseLogin:`请先登录`,selectAll:`全选`,subscribe:`订阅`,subscribeOperateFailed:`订阅操作失败`,subscribeProcessing:`处理中...`,subscribeSuccess:`订阅成功`,subscribed:`已订阅`,uncollectFailed:`取消收藏失败`,uncollectSuccess:`已取消收藏`,unsubscribeSuccess:`已取消订阅`,updatedSuffix:`更新`}},edit:{page:{avatarUpdateSuccess:`更换完成`,avatarUploadFailed:`头像上传失败,请稍后再试`,avatarUploading:`上传中...`,clickToChangeAvatar:`点击更换头像`,displayIdLabel:`展示ID`,editBlockedWhileSaving:`资料保存中,请稍后再编辑其他内容`,genderFemale:`女`,genderLabel:`性别`,genderMale:`男`,genderSecret:`保密`,genderSelect:`请选择`,genderUpdateSuccess:`性别修改成功`,imageTypeInvalid:`仅支持 JPG/JPEG/PNG 格式`,label:`昵称`,loading:`加载中`,nicknameInvalidChars:`昵称只支持特殊符号”_ 下划线“、- 连字符和. 点`,nicknamePlaceholder:`请输入昵称`,nicknameRequired:`请输入昵称`,nicknameTooShort:`昵称至少 2 个字符`,nicknameUpdateSuccess:`昵称修改成功`,save:`保存`,saveFailed:`保存失败,请稍后再试`,saveSuccess:`保存成功`,savingInProgress:`保存中,请稍候`,signatureLabel:`个人签名`,signaturePlaceholder:`请输入个人签名`,signatureTooShort:`个人签名至少 2 个字符`,signatureUpdateSuccess:`个人签名修改成功`,submit:`提交`,title:`编辑资料`,updateFailed:`修改失败,请稍后重试`,userNotFound:`未找到用户信息`}},feedSeries:{feedSeriesClient:{episodeLoading:`剧集加载中`,episodeSelectorTitle:`选集`,missingEpisode:`缺少有效的剧集`,noEpisodes:`暂无可播放的剧集`},page:{videoLoading:`视频加载中...`}},feedback:{components:{feedbackForm:{addScreenshot:`添加截图`,alt:`反馈截图`,contactLabel:`联系方式`,contentMinLength:`问题描述至少 4 个字符`,delete:`删除`,imageTypeInvalid:`仅支持 JPG/JPEG/PNG 格式`,label:`反馈内容`,loading:`提交中...`,message:`修改失败,请稍后重试`,missingContact:`请输入联系方式`,missingFeedback:`请输入反馈内容`,missingScreenshot:`请上传截图`,optional:`选填`,placeholder:`请输入内容`,placeholder1_6d0242:`请输入您的邮箱或手机号,以方便解决您的问题`,screenshotHint:`可上传最多 3 张截图,帮助我们更快定位问题`,screenshotLabel:`上传截图`,screenshotUploadFailed:`截图上传失败,请稍后再试`,submit:`提交`,submitsuccess:`反馈成功,我们将尽快为您解决`,title:`意见反馈`,uploading:`上传中...`}}},follow:{components:{followButton:{follow:`关注`,following:`已关注`},interactionTabs:{fans:`粉丝`,follow:`关注`},userList:{follow:`关注`,followBack:`回关`,followNow:`去关注`,noFans:`没有任何粉丝`,noFollowedUsers:`没有关注任何用户`}},pages:{fans:{privateListUnavailable:`该粉丝列表暂未对外开放`},followed:{privateListUnavailable:`该关注列表暂未对外开放`}}},fullscreenFeed:{page:{episodeSelectorTitle:`选集`,missingParams:`缺少推荐位或剧集参数`}},login:{forgot:{back:`返回`,emailPlaceholder:`请输入邮箱号`,getCode:`获取验证码`,loginLink:`登录已有账号`,or:`或`,sendFailed:`发送失败,请稍后重试`,sending:`发送中…`,title:`忘记密码`},index:{loginFailed:`登录失败,请稍后重试`,loginSuccess:`登录成功`},loginClient:{agreeToTerms:`我已阅读并同意用户协议与隐私政策`,agreeToTermsPrefix:`我已经阅读并同意`,and:`和`,close:`关闭`,emailPlaceholder:`请输入邮箱`,forgotPassword:`忘记密码`,hidePassword:`隐藏密码`,loggingIn:`登录中…`,login:`登录`,noAccount:`没有账号?去`,passwordPlaceholder:`请输入密码`,privacyPolicy:`隐私政策`,registerLink:`注册`,showPassword:`显示密码`,subtitle:`注册登录账号即可查看更多精彩视频`,title:`欢迎👋`,userAgreement:`用户协议`},password:{back:`返回`,confirmModify:`确认修改`,confirmPasswordPlaceholder:`请再次输入登录密码`,confirmReset:`确认重置`,passwordInvalidCharacters:`仅支持字母、数字和指定特殊字符`,passwordNeedTwoTypes:`至少包含2种字符类型(大写/小写/数字/特殊字符)`,passwordPlaceholder:`请输入8-32位密码`,passwordSetSuccess:`密码设置成功`,passwordTooLong:`密码长度不能超过32位`,passwordTooShort:`密码长度不能少于8位`,passwordsNotMatch:`两次密码输入不一致`,register:`注册`,setLoginPassword:`设置登录密码`,setNewPassword:`设置新密码`,submitFailed:`提交失败,请稍后重试`,submitting:`提交中…`},register:{back:`返回`,emailPlaceholder:`请输入邮箱`,getCode:`注册`,hasAccount:`已有账号?去`,invalidEmail:`请输入正确的邮箱地址`,loginLink:`登录`,sendFailed:`发送失败,请稍后重试`,sending:`发送中…`,title:`免费注册`},resetPassword:{back:`返回`,codePlaceholder:`请输入验证码`,passwordRuleHint:`新密码需8-32位,且至少包含2种字符类型(大写/小写/数字/特殊字符)`,resend:`重新发送`,sendCode:`发送验证码`,sendFailed:`发送失败,请稍后重试`,title:`修改密码`,verifyEmail:`验证邮箱`,verifyFailed:`验证失败,请稍后重试`,verifyHint:`进行验证`,verifyViaEmail:`通过已绑定邮箱`,verifying:`验证中…`},verify:{back:`返回`,invalidCode:`验证码无效`,nextStep:`提交`,resend:`重新发送`,resendCountdown:`重新发送({seconds}秒)`,sentTo:`已经发送至`,title:`请输入验证码`,verifying:`提交中…`}},postDetail:{postDetailClient:{comment:`评论`,postDeleted:`该帖子已被删除`,postOffline:`该帖子已下架`,reactions:`人表态`}},profile:{client:{collect:`收藏`,collectionNotPublic:`该收藏暂未公开`,editProfile:`编辑资料`,exploreAdventures:`探索奇幻的冒险吧。`,follow:`关注`,followFailed:`关注失败`,followSuccess:`关注成功`,followed:`已关注`,history:`历史`,imageTooLarge:`图片过大,请选择小于5MB的图片`,imageTypeInvalid:`仅支持 JPG/JPEG/PNG 格式`,like:`点赞`,likeNotPublic:`点赞列表暂未公开`,loginNow:`立即登录`,loginRequiredForUpload:`请先登录后再试`,loginToSeeMoreVideos:`登录后查看更多精彩视频`,loginToView:`登录后可查看`,mediaUpdateSuccess:`更换完成`,message:`私信`,operationFailed:`操作失败,请稍后再试`,processing:`处理中...`,publish:`发布`,unfollowFailed:`取消关注失败`,unfollowSuccess:`已取消关注`,uploadFailed:`上传失败,请稍后重试`,welcomeToPlanet:`欢迎来到星球`},components:{tabs:{collectTab:{cancel:`取消`,cancelSelectAll:`取消全选`,collections:`收藏夹`,comic:`动漫`,created:`创建的`,delete:`删除`,deleteConfirmDescription:`确认将所选内容从收藏中移除?`,edit:`编辑`,emptyContent:`您还没有收藏任何内容`,noCreatedCollections:`暂无创建的合集`,noSubscribedCollections:`暂无订阅的合集`,novel:`小说`,operationFailed:`操作失败,请稍后再试`,pleaseLogin:`请先登录`,posts:`帖子`,processing:`处理中...`,selectAll:`全选`,subscribed:`订阅的`,uncollectFailed:`取消收藏失败`,uncollectedSuccess:`已取消收藏`,video:`视频`},historyTab:{cancel:`取消`,collections:`收藏夹`,comic:`动漫`,delete:`删除`,deleteFailed:`删除失败`,edit:`编辑`,emptyContent:`您还没有观看记录`,historyDeletedSuccess:`已删除浏览记录`,novel:`小说`,operationFailed:`操作失败,请稍后再试`,pleaseLogin:`请先登录`,posts:`帖子`,processing:`处理中...`,selectAll:`全选`,video:`视频`},likeTab:{cancel:`取消`,collections:`收藏夹`,comic:`动漫`,delete:`删除`,edit:`编辑`,emptyContent:`您还没有点赞任何内容`,novel:`小说`,operationFailed:`操作失败,请稍后再试`,pleaseLogin:`请先登录`,posts:`帖子`,processing:`处理中...`,selectAll:`全选`,unlikeFailed:`取消点赞失败`,unlikedSuccess:`已取消点赞`,video:`视频`},publishTab:{comic:`动漫`,deleteFailed:`删除失败`,deleteSuccess:`删除成功`,emptyText:`暂无发布内容`,novel:`小说`,posts:`帖子`,video:`视频`}},userProfileHeader:{fans:`粉丝`,follow:`关注`,likesReceived:`获赞`}}},publish:{components:{collection:{createCollection:`创建合集`,moreCollections:`更多合集`,syncToCollection:`同步到合集`},collectionCard:{contentCountSuffix:`条内容`},collectionPopup:{noCollections:`暂无合集`,syncToCollection:`同步到合集`},coverItem:{coverAlt:`封面`,editCover:`编辑封面`,uploadImage:`上传封面`},editor:{headlineHint:`有标题、画面清晰无水印的作品曝光会更多哦`},header:{publish:`发布`},materialItem:{deleteMaterial:`删除素材`,uploadImage:`上传图片`,videoCover:`视频封面`},mediaPreview:{previewAlt:`预览`},uploadProgress:{uploading:`上传中`}},pageClient:{cancel:`取消`,editContentFirst:`请先编辑内容`,maxMaterialCount:`最多上传 9 个素材`,publishFailed:`发布失败,请稍后再试`,publishSuccess:`发布成功`,resume:`继续`,switchToPostConfirm:`切换到帖子会清空主视频,是否继续?`,switchToVideoConfirm:`切换到视频会清空已有素材,是否继续?`,title:`确认切换`,uploadFailedCount:`{count} 个文件上传失败`}},search:{hotRecommend:{hotPostsTitle:`热门帖子`,hotVideosTitle:`热门视频`},hotSearch:{recommendedSearches:`推荐搜索`},pageClient:{searchHistory:`搜索历史`,tabs:{all:`全部`,post:`帖子`,user:`用户`,video:`视频`}},searchResult:{searchAll:{emptyResult:`未检索到内容`,more:`更多`,relatedSuffix:`相关`},searchUser:{emptyResult:`未检索到内容`,followersSuffix:`人关注`},searchVideoInfo:{noRelevantContent:`未检索到内容`}},topHeader:{placeholder:`请输入搜索关键词`,search:`搜索`}},settings:{components:{resetPasswordDrawer:{boundEmailNotice:`目前已绑定邮箱号`,codeSentSuccess:`验证码已发送`,confirmPasswordPlaceholder:`请再次确认您的密码`,passwordPlaceholder:`请输入您的密码`,passwordResetSuccess:`密码修改成功`,resendAfter:`后可重发`,resendCountdown:`重新发送({seconds}秒)`,resetFailed:`修改失败,请稍后重试`,resetPassword:`提交`,sendCode:`获取验证码`,sendFailed:`发送失败,请稍后重试`,sending:`发送中...`,setNewPasswordHint:`设置密码`,submitting:`提交中...`,title:`重置密码`,verifyEmailButton:`验证邮箱`,verifyFailed:`验证失败,请检查验证码`,verifyHint:`进行验证`,verifySuccess:`验证成功`,verifyTitle:`请输入验证码`,verifying:`验证中...`},settings:{button:`退出登录`,cancel:`取消`,collectionsTitle:`合集`,confirm:`确认`,feedbackTitle:`反馈`,follow:`关注`,followersTitle:`粉丝`,languageTitle:`语言`,like:`点赞`,listPrivateHint:`该列表会设为私密`,logoutConfirmMessage:`确定要退出登录吗?`,privacySettingsTitle:`隐私设置`,resetPasswordTitle:`重置密码`,switchTo:`切换为`,title:`设置中心`,whenOff:`关闭后`}}},userFollow:{components:{comprehensiveTab:{empty:`暂无内容,去别处看看吧。`,postsFeed:`帖子`},contentItem:{filmAndTv:`影视相关`},followNoLogin:{login:`登录`,notLoggedIn:`您还未登录`},followNoUser:{empty:`你还没有关注任何人哦`},followedList:{newUpdate:`有更新`,seeAll:`查看全部`},postTab:{empty:`暂未关注任何帖子`}},page:{tabs:{posts:`帖子`}}},videoDetail:{videoDetailClient:{videoDeleted:`该视频已被删除`,videoUnavailable:`该视频已下架`}}},ui:{infiniteScroll:{failed:`加载失败,点击重试`,loading:`加载中`,noMore:`没有更多了`},list:{empty:`暂无内容`,loading:`加载中`,postList:{earlier:`更早`,empty:`暂无浏览记录`,postListItem:{coverAlt:`帖子封面`},today:`今天`,yesterday:`昨天`},userActivityList:{earlier:`更早`,empty:`暂无浏览记录`,today:`今天`,userActivityListActions:{comment:`评论`,dislike:`踩`,like:`赞`,likeFailed:`点赞失败`,share:`分享`},userActivityListItem:{collapse:`收起`,collectFailed:`收藏失败`,expand:`展开`,mediaAlt:`动态图片`},yesterday:`昨天`},videoList:{earlier:`更早`,empty:`暂无观看记录`,today:`今天`,videoListItem:{coverAlt:`视频封面`,movie:`电影`,series:`剧集`,watchUntil:`已观看 `},yesterday:`昨天`}},loading:{label:`加载中...`}}},tabBar:{follow:`关注`,home:`首页`,message:`消息`,mine:`我的`}};export{e as default};
4
+ 如非本人操作,可联系客服或提出申诉`,gotIt:`我知道了`,remarkDefault:`检测到异常行为`,title:`账号已被限制`,unblockTimePermanent:`永久封禁`},collectionPopup:{collectSuccess:`收藏成功`,coverAlt:`封面图`,createCollection:`创建合集`,createCollectionHint:`可以去创建你的合集`,createModalAction:`确定`,createModalTitle:`新建收藏夹`,favoriteToCollectionTitle:`收藏到合集`,newCollection:`新建`,noCollections:`暂无合集`,postsCountSuffix:`篇贴子`,selectTitle:`选择收藏夹`,updateSuccess:`修改收藏夹成功`},debugLocaleSwitcher:{current:`当前`,languageDebugging:`语言调试`},deleteConfirmDialog:{cancel:`取消`,confirm:`确认删除`,description:`删除后无法恢复`},followButton:{follow:`关注`,followFailed:`关注失败`,following:`已关注`,loginFailed:`登录失败`,loginRequired:`请先登录`,unfollowConfirmDialog:{cancel:`取消`,confirm:`确定`,confirmUnfollow:`确认要取消关注吗`},unfollowFailed:`取消关注失败`},imageCropModal:{cancel:`取消`,confirm:`确认`,processing:`处理中...`},infoCard:{cardBottom:{comment:`评论`,dislike:`踩`,like:`赞`,share:`分享`}},list:{collectionList:{collectionListItem:{contentCountSuffix:`个内容`,movieLabel:`电影`}}},photoGrid:{episodeLoading:`剧集加载中`,missingEpisode:`缺少有效的剧集`,noEpisodes:`暂无可播放的剧集`},picker:{genderPicker:{cancel:`取消`,confirm:`确认`,options:{female:`女`,male:`男`,secret:`保密`},title:`选择性别`},pickerDrawer:{cancel:`取消`,confirm:`确认`,title:`请选择`}},seriesEpisodes:{compactTotal:`共{total}集`,completedSeriesTotal:`完结剧集:共{total}集`,episodeLabel:`第{episode}集`,episodeNotFound:`剧集不存在`,episodeSwitchFailed:`剧集切换失败`,episodeSwitching:`切换中...`,episodeTitle:`分集标题`,ongoingSeriesTotal:`连载剧集:共{total}集`,ongoingSeriesUpdatedTo:`连载剧集:更新至{total}集`,selectorTitle:`选集`,singleContent:`单集内容`},sharePopup:{shareContent:{copyFailed:`复制失败`,copyShareLink:`复制链接`,copySuccess:`复制成功`,shareHint:`可以粘贴链接分享给好友`,shareLinksTitle:`分享链接`},shareDrawer:{cancel:`取消`,collectionLabel:`收藏`,label:`取消收藏`,moments:`朋友圈`,wechat:`微信`,wechatFriend:`微信好友`}},skeleton:{loading:`加载中`},title:`确认删除该内容吗?`},pages:{collectionAdd:{page:{collectionNotFound:`未找到合集信息`,done:`完成`,emptyPublish:`暂无可添加的帖子`,selectPostFirst:`请先选择帖子`,submitFailed:`添加失败,请稍后再试`,submitSuccess:`添加成功`,submitting:`添加中...`,title:`添加帖子到合集`,userNotFound:`未找到用户信息`}},collectionCreate:{form:{addCover:`添加封面`,clear:`清除`,collectionNotFound:`未找到收藏夹信息`,coverAlt:`收藏夹封面`,coverLabel:`封面`,coverUploadFailed:`上传封面失败`,create:`创建`,createFailed:`创建失败`,createSuccess:`创建成功`,createTitle:`创建收藏夹`,creating:`创建中...`,descriptionLabel:`说明`,descriptionPlaceholder:`请输入收藏夹说明`,descriptionRequired:`请输入收藏夹说明`,editTitle:`编辑收藏夹`,label:`名称`,save:`保存`,saveFailed:`保存失败`,saveSuccess:`保存成功`,saving:`保存中...`,signatureLabel:`个人签名`,titlePlaceholder:`请输入收藏夹名称`,titleRequired:`请输入收藏夹名称`,uploading:`上传中...`}},collectionDetail:{components:{collectionDetailCard:{collectedInLabel:`收藏于`}},detail:{add:`添加内容`,batchRemoveVideosConfirmTitle:`确认将所选内容从收藏夹移除?`,cancel:`取消`,collectionManageTitle:`收藏夹管理`,contentCountSuffix:`款内容`,coverAlt:`收藏夹封面`,defaultCollectionDeleteNotSupported:`默认收藏夹不支持删除`,defaultTitle:`收藏夹`,delete:`删除`,deleteCollection:`删除收藏夹`,deleteFailed:`删除失败`,deleteSuccess:`收藏夹已删除`,deleting:`删除中...`,done:`完成`,editCollection:`编辑收藏夹`,emptyContent:`暂无内容`,manageCollection:`管理收藏夹`,operationFailed:`操作失败,请稍后再试`,ownerAvatarAlt:`收藏夹拥有者`,pleaseLogin:`请先登录`,selectAll:`全选`,subscribe:`订阅`,subscribeOperateFailed:`订阅操作失败`,subscribeProcessing:`处理中...`,subscribeSuccess:`订阅成功`,subscribed:`已订阅`,uncollectFailed:`取消收藏失败`,uncollectSuccess:`已取消收藏`,unsubscribeSuccess:`已取消订阅`,updatedSuffix:`更新`}},edit:{page:{avatarUpdateSuccess:`更换完成`,avatarUploadFailed:`头像上传失败,请稍后再试`,avatarUploading:`上传中...`,clickToChangeAvatar:`点击更换头像`,displayIdLabel:`展示ID`,editBlockedWhileSaving:`资料保存中,请稍后再编辑其他内容`,genderFemale:`女`,genderLabel:`性别`,genderMale:`男`,genderSecret:`保密`,genderSelect:`请选择`,genderUpdateSuccess:`性别修改成功`,imageTypeInvalid:`仅支持 JPG/JPEG/PNG 格式`,label:`昵称`,loading:`加载中`,nicknameInvalidChars:`昵称只支持特殊符号”_ 下划线“、- 连字符和. 点`,nicknamePlaceholder:`请输入昵称`,nicknameRequired:`请输入昵称`,nicknameTooShort:`昵称至少 2 个字符`,nicknameUpdateSuccess:`昵称修改成功`,save:`保存`,saveFailed:`保存失败,请稍后再试`,saveSuccess:`保存成功`,savingInProgress:`保存中,请稍候`,signatureLabel:`个人签名`,signaturePlaceholder:`请输入个人签名`,signatureTooShort:`个人签名至少 2 个字符`,signatureUpdateSuccess:`个人签名修改成功`,submit:`提交`,title:`编辑资料`,updateFailed:`修改失败,请稍后重试`,userNotFound:`未找到用户信息`}},feedSeries:{feedSeriesClient:{episodeLoading:`剧集加载中`,episodeSelectorTitle:`选集`,missingEpisode:`缺少有效的剧集`,noEpisodes:`暂无可播放的剧集`},page:{videoLoading:`视频加载中...`}},feedback:{components:{feedbackForm:{addScreenshot:`添加截图`,alt:`反馈截图`,contactLabel:`联系方式`,contentMinLength:`问题描述至少 4 个字符`,delete:`删除`,imageTypeInvalid:`仅支持 JPG/JPEG/PNG 格式`,label:`反馈内容`,loading:`提交中...`,message:`修改失败,请稍后重试`,missingContact:`请输入联系方式`,missingFeedback:`请输入反馈内容`,missingScreenshot:`请上传截图`,optional:`选填`,placeholder:`请输入内容`,placeholder1_6d0242:`请输入您的邮箱或手机号,以方便解决您的问题`,screenshotHint:`可上传最多 3 张截图,帮助我们更快定位问题`,screenshotLabel:`上传截图`,screenshotUploadFailed:`截图上传失败,请稍后再试`,submit:`提交`,submitsuccess:`反馈成功,我们将尽快为您解决`,title:`意见反馈`,uploading:`上传中...`}}},follow:{components:{followButton:{follow:`关注`,following:`已关注`},interactionTabs:{fans:`粉丝`,follow:`关注`},userList:{follow:`关注`,followBack:`回关`,followNow:`去关注`,noFans:`没有任何粉丝`,noFollowedUsers:`没有关注任何用户`}},pages:{fans:{privateListUnavailable:`该粉丝列表暂未对外开放`},followed:{privateListUnavailable:`该关注列表暂未对外开放`}}},fullscreenFeed:{page:{episodeSelectorTitle:`选集`,missingParams:`缺少推荐位或剧集参数`}},login:{forgot:{back:`返回`,emailPlaceholder:`请输入邮箱号`,getCode:`获取验证码`,loginLink:`登录已有账号`,or:`或`,sendFailed:`发送失败,请稍后重试`,sending:`发送中…`,title:`忘记密码`},index:{loginFailed:`登录失败,请稍后重试`,loginSuccess:`登录成功`},loginClient:{agreeToTerms:`我已阅读并同意用户协议与隐私政策`,agreeToTermsPrefix:`我已经阅读并同意`,and:`和`,close:`关闭`,emailPlaceholder:`请输入邮箱`,forgotPassword:`忘记密码`,hidePassword:`隐藏密码`,loggingIn:`登录中…`,login:`登录`,noAccount:`没有账号?去`,passwordPlaceholder:`请输入密码`,privacyPolicy:`隐私政策`,registerLink:`注册`,showPassword:`显示密码`,subtitle:`注册登录账号即可查看更多精彩视频`,title:`欢迎👋`,userAgreement:`用户协议`},password:{back:`返回`,confirmModify:`确认修改`,confirmPasswordPlaceholder:`请再次输入登录密码`,confirmReset:`确认重置`,passwordInvalidCharacters:`仅支持字母、数字和指定特殊字符`,passwordNeedTwoTypes:`至少包含2种字符类型(大写/小写/数字/特殊字符)`,passwordPlaceholder:`请输入8-32位密码`,passwordSetSuccess:`密码设置成功`,passwordTooLong:`密码长度不能超过32位`,passwordTooShort:`密码长度不能少于8位`,passwordsNotMatch:`两次密码输入不一致`,register:`注册`,setLoginPassword:`设置登录密码`,setNewPassword:`设置新密码`,submitFailed:`提交失败,请稍后重试`,submitting:`提交中…`},register:{back:`返回`,emailPlaceholder:`请输入邮箱`,getCode:`注册`,hasAccount:`已有账号?去`,invalidEmail:`请输入正确的邮箱地址`,loginLink:`登录`,sendFailed:`发送失败,请稍后重试`,sending:`发送中…`,title:`免费注册`},resetPassword:{back:`返回`,codePlaceholder:`请输入验证码`,passwordRuleHint:`新密码需8-32位,且至少包含2种字符类型(大写/小写/数字/特殊字符)`,resend:`重新发送`,sendCode:`发送验证码`,sendFailed:`发送失败,请稍后重试`,title:`修改密码`,verifyEmail:`验证邮箱`,verifyFailed:`验证失败,请稍后重试`,verifyHint:`进行验证`,verifyViaEmail:`通过已绑定邮箱`,verifying:`验证中…`},verify:{back:`返回`,invalidCode:`验证码无效`,nextStep:`提交`,resend:`重新发送`,resendCountdown:`重新发送({seconds}秒)`,sentTo:`已经发送至`,title:`请输入验证码`,verifying:`提交中…`}},postDetail:{postDetailClient:{comment:`评论`,postDeleted:`该帖子已被删除`,postOffline:`该帖子已下架`,reactions:`人表态`}},profile:{client:{collect:`收藏`,collectionNotPublic:`该收藏暂未公开`,editProfile:`编辑资料`,exploreAdventures:`探索奇幻的冒险吧。`,follow:`关注`,followFailed:`关注失败`,followSuccess:`关注成功`,followed:`已关注`,history:`历史`,imageTooLarge:`图片过大,请选择小于5MB的图片`,imageTypeInvalid:`仅支持 JPG/JPEG/PNG 格式`,like:`点赞`,likeNotPublic:`点赞列表暂未公开`,loginNow:`立即登录`,loginRequiredForUpload:`请先登录后再试`,loginToSeeMoreVideos:`登录后查看更多精彩视频`,loginToView:`登录后可查看`,mediaUpdateSuccess:`更换完成`,operationFailed:`操作失败,请稍后再试`,processing:`处理中...`,publish:`发布`,unfollowFailed:`取消关注失败`,unfollowSuccess:`已取消关注`,uploadFailed:`上传失败,请稍后重试`,welcomeToPlanet:`欢迎来到星球`},components:{tabs:{collectTab:{cancel:`取消`,cancelSelectAll:`取消全选`,collections:`收藏夹`,created:`创建的`,delete:`删除`,deleteConfirmDescription:`确认将所选内容从收藏中移除?`,edit:`编辑`,emptyContent:`您还没有收藏任何内容`,noCreatedCollections:`暂无创建的合集`,noSubscribedCollections:`暂无订阅的合集`,operationFailed:`操作失败,请稍后再试`,pleaseLogin:`请先登录`,posts:`帖子`,processing:`处理中...`,selectAll:`全选`,subscribed:`订阅的`,uncollectFailed:`取消收藏失败`,uncollectedSuccess:`已取消收藏`,video:`视频`},historyTab:{cancel:`取消`,delete:`删除`,deleteFailed:`删除失败`,edit:`编辑`,emptyContent:`您还没有观看记录`,historyDeletedSuccess:`已删除浏览记录`,operationFailed:`操作失败,请稍后再试`,pleaseLogin:`请先登录`,posts:`帖子`,processing:`处理中...`,selectAll:`全选`,video:`视频`},likeTab:{cancel:`取消`,delete:`删除`,edit:`编辑`,emptyContent:`您还没有点赞任何内容`,operationFailed:`操作失败,请稍后再试`,pleaseLogin:`请先登录`,posts:`帖子`,processing:`处理中...`,selectAll:`全选`,unlikeFailed:`取消点赞失败`,unlikedSuccess:`已取消点赞`,video:`视频`},publishTab:{deleteFailed:`删除失败`,deleteSuccess:`删除成功`,emptyText:`暂无发布内容`}},userProfileHeader:{fans:`粉丝`,follow:`关注`,likesReceived:`获赞`}}},publish:{components:{collection:{createCollection:`创建合集`,moreCollections:`更多合集`,syncToCollection:`同步到合集`},collectionCard:{contentCountSuffix:`条内容`},collectionPopup:{noCollections:`暂无合集`,syncToCollection:`同步到合集`},coverItem:{coverAlt:`封面`,editCover:`编辑封面`,uploadImage:`上传封面`},editor:{headlineHint:`有标题、画面清晰无水印的作品曝光会更多哦`},header:{publish:`发布`},materialItem:{deleteMaterial:`删除素材`,uploadImage:`上传图片`,videoCover:`视频封面`},mediaPreview:{previewAlt:`预览`},uploadProgress:{uploading:`上传中`}},pageClient:{cancel:`取消`,editContentFirst:`请先编辑内容`,maxMaterialCount:`最多上传 9 个素材`,publishFailed:`发布失败,请稍后再试`,publishSuccess:`发布成功`,resume:`继续`,switchToPostConfirm:`切换到帖子会清空主视频,是否继续?`,switchToVideoConfirm:`切换到视频会清空已有素材,是否继续?`,title:`确认切换`,uploadFailedCount:`{count} 个文件上传失败`}},search:{hotRecommend:{hotPostsTitle:`热门帖子`,hotVideosTitle:`热门视频`},hotSearch:{recommendedSearches:`推荐搜索`},pageClient:{searchHistory:`搜索历史`,tabs:{all:`全部`,post:`帖子`,user:`用户`,video:`视频`}},searchResult:{searchAll:{emptyResult:`未检索到内容`,more:`更多`,relatedSuffix:`相关`},searchUser:{emptyResult:`未检索到内容`,followersSuffix:`人关注`},searchVideoInfo:{noRelevantContent:`未检索到内容`}},topHeader:{placeholder:`请输入搜索关键词`,search:`搜索`}},settings:{components:{resetPasswordDrawer:{boundEmailNotice:`目前已绑定邮箱号`,codeSentSuccess:`验证码已发送`,confirmPasswordPlaceholder:`请再次确认您的密码`,passwordPlaceholder:`请输入您的密码`,passwordResetSuccess:`密码修改成功`,resendAfter:`后可重发`,resendCountdown:`重新发送({seconds}秒)`,resetFailed:`修改失败,请稍后重试`,resetPassword:`提交`,sendCode:`获取验证码`,sendFailed:`发送失败,请稍后重试`,sending:`发送中...`,setNewPasswordHint:`设置密码`,submitting:`提交中...`,title:`重置密码`,verifyEmailButton:`验证邮箱`,verifyFailed:`验证失败,请检查验证码`,verifyHint:`进行验证`,verifySuccess:`验证成功`,verifyTitle:`请输入验证码`,verifying:`验证中...`},settings:{button:`退出登录`,cancel:`取消`,collectionsTitle:`合集`,confirm:`确认`,feedbackTitle:`反馈`,follow:`关注`,followersTitle:`粉丝`,languageTitle:`语言`,like:`点赞`,listPrivateHint:`该列表会设为私密`,logoutConfirmMessage:`确定要退出登录吗?`,privacySettingsTitle:`隐私设置`,resetPasswordTitle:`重置密码`,switchTo:`切换为`,title:`设置中心`,whenOff:`关闭后`}}},userFollow:{components:{comprehensiveTab:{empty:`暂无内容,去别处看看吧。`,postsFeed:`帖子`},contentItem:{filmAndTv:`影视相关`},followNoLogin:{login:`登录`,notLoggedIn:`您还未登录`},followNoUser:{empty:`你还没有关注任何人哦`},followedList:{newUpdate:`有更新`,seeAll:`查看全部`},postTab:{empty:`暂未关注任何帖子`}},page:{tabs:{posts:`帖子`}}},videoDetail:{videoDetailClient:{videoDeleted:`该视频已被删除`,videoUnavailable:`该视频已下架`}}},ui:{infiniteScroll:{failed:`加载失败,点击重试`,loading:`加载中`,noMore:`没有更多了`},list:{empty:`暂无内容`,loading:`加载中`,postList:{earlier:`更早`,empty:`暂无浏览记录`,postListItem:{coverAlt:`帖子封面`},today:`今天`,yesterday:`昨天`},userActivityList:{earlier:`更早`,empty:`暂无浏览记录`,today:`今天`,userActivityListActions:{comment:`评论`,dislike:`踩`,like:`赞`,likeFailed:`点赞失败`,share:`分享`},userActivityListItem:{collapse:`收起`,collectFailed:`收藏失败`,expand:`展开`,mediaAlt:`动态图片`},yesterday:`昨天`},videoList:{earlier:`更早`,empty:`暂无观看记录`,today:`今天`,videoListItem:{coverAlt:`视频封面`,movie:`电影`,series:`剧集`,watchUntil:`已观看 `},yesterday:`昨天`}},loading:{label:`加载中...`}}},tabBar:{follow:`关注`,home:`首页`,message:`消息`,mine:`我的`}};export{e as default};
@@ -22,7 +22,7 @@ import { homeRecommendGridMaterial } from "./components/biz/business/home-recomm
22
22
  import { homeRecommendWaterfallMaterial } from "./components/biz/business/home-recommend/home-recommend-waterfall/material.mjs";
23
23
  import { imageTextRecommendMaterial } from "./components/biz/business/image-text-recommend/material.mjs";
24
24
  import { marqueeMaterial } from "./components/biz/business/marquee/material.mjs";
25
- import { myProfileHeaderMaterial, profileHeaderMaterial, profileHeaderMaterialWithDisabledBackground, visitorProfileHeaderMaterial } from "./components/biz/business/profile/profile-header/material.mjs";
25
+ import { profileHeaderMaterial, profileHeaderMaterialWithDisabledBackground } from "./components/biz/business/profile/profile-header/material.mjs";
26
26
  import { profileMainMaterial } from "./components/biz/business/profile/profile-main/material.mjs";
27
27
  import { searchHistoryMaterial } from "./components/biz/business/search-history/material.mjs";
28
28
  import { searchInputMaterial } from "./components/biz/business/search-input/material.mjs";
@@ -39,4 +39,4 @@ import { headerSearchMaterial } from "./components/biz/business/header-search/he
39
39
  import "./components/biz/business/header-search/index.mjs";
40
40
  import { largeFeatureGridMaterial } from "./components/biz/business/large-feature-grid/material.mjs";
41
41
  import { shortcutGridMaterial } from "./components/biz/business/shortcut-grid/material.mjs";
42
- export { BannerCarouselMaterial, bannerAdMaterial, channelListMaterial, exampleButtonMaterial, floatingAdMaterial, floatingBallMaterial, headerAvatarIconMaterial, headerAvatarLogoSearchIconMaterial, headerAvatarLogoSearchMaterial, headerLogoSearchMaterial, headerSearchMaterial, homeRecommendGridMaterial, homeRecommendWaterfallMaterial, iconAdMaterial, imageTextRecommendMaterial, largeFeatureGridMaterial, marqueeMaterial, myProfileHeaderMaterial, popupAdMaterial, profileHeaderMaterial, profileHeaderMaterialWithDisabledBackground, profileMainMaterial, searchHistoryMaterial, searchInputMaterial, shortcutGridMaterial, tabBarMaterial, textAdMaterial, textRecommendMaterial, videoDetailActionsMaterial, videoDetailInfoMaterial, videoDetailInfoTitleTagsEpisodesMaterial, videoDetailPlayerBridgeOnlyMaterial, videoDetailPlayerMaterial, videoDetailRecommendMaterial, visitorProfileHeaderMaterial };
42
+ export { BannerCarouselMaterial, bannerAdMaterial, channelListMaterial, exampleButtonMaterial, floatingAdMaterial, floatingBallMaterial, headerAvatarIconMaterial, headerAvatarLogoSearchIconMaterial, headerAvatarLogoSearchMaterial, headerLogoSearchMaterial, headerSearchMaterial, homeRecommendGridMaterial, homeRecommendWaterfallMaterial, iconAdMaterial, imageTextRecommendMaterial, largeFeatureGridMaterial, marqueeMaterial, popupAdMaterial, profileHeaderMaterial, profileHeaderMaterialWithDisabledBackground, profileMainMaterial, searchHistoryMaterial, searchInputMaterial, shortcutGridMaterial, tabBarMaterial, textAdMaterial, textRecommendMaterial, videoDetailActionsMaterial, videoDetailInfoMaterial, videoDetailInfoTitleTagsEpisodesMaterial, videoDetailPlayerBridgeOnlyMaterial, videoDetailPlayerMaterial, videoDetailRecommendMaterial };
@@ -1,2 +1,2 @@
1
1
 
2
- import{__exportAll as e}from"./_virtual/_rolldown/runtime.mjs";import{bannerAdMaterial as t}from"./components/biz/business/advertisement/banner-ad/material.mjs";import{floatingAdMaterial as n}from"./components/biz/business/advertisement/floating-ad/material.mjs";import{iconAdMaterial as r}from"./components/biz/business/advertisement/icon-ad/material.mjs";import{popupAdMaterial as i}from"./components/biz/business/advertisement/popup-ad/material.mjs";import{textAdMaterial as a}from"./components/biz/business/advertisement/text-ad/material.mjs";import{floatingBallMaterial as o}from"./components/biz/business/floating-ball/material.mjs";import{homeRecommendGridMaterial as s}from"./components/biz/business/home-recommend/home-recommend-grid/material.mjs";import{homeRecommendWaterfallMaterial as c}from"./components/biz/business/home-recommend/home-recommend-waterfall/material.mjs";import{imageTextRecommendMaterial as l}from"./components/biz/business/image-text-recommend/material.mjs";import{marqueeMaterial as u}from"./components/biz/business/marquee/material.mjs";import{myProfileHeaderMaterial as d,profileHeaderMaterial as f,profileHeaderMaterialWithDisabledBackground as p,visitorProfileHeaderMaterial as m}from"./components/biz/business/profile/profile-header/material.mjs";import{profileMainMaterial as h}from"./components/biz/business/profile/profile-main/material.mjs";import{searchHistoryMaterial as g}from"./components/biz/business/search-history/material.mjs";import{searchInputMaterial as _}from"./components/biz/business/search-input/material.mjs";import{tabBarMaterial as v}from"./components/biz/business/tab-bar/material.mjs";import{textRecommendMaterial as y}from"./components/biz/business/text-recommend/material.mjs";import{exampleButtonMaterial as b}from"./components/biz/example/button/material.mjs";import{BannerCarouselMaterial as x}from"./components/biz/business/banner-carousel/material.mjs";import{channelListMaterial as S}from"./components/biz/business/channel-list/material.mjs";import{videoDetailInfoMaterial as C}from"./components/biz/business/detail/video-detail-info/material.mjs";import{videoDetailInfoTitleTagsEpisodesMaterial as w}from"./components/biz/business/detail/video-detail-info-title-tags-episodes/material.mjs";import{videoDetailPlayerMaterial as T}from"./components/biz/business/detail/video-detail-player/material.mjs";import{videoDetailPlayerBridgeOnlyMaterial as E}from"./components/biz/business/detail/video-detail-player-bridge-only/material.mjs";import{videoDetailRecommendMaterial as D}from"./components/biz/business/detail/video-detail-recommend/material.mjs";import{videoDetailActionsMaterial as O}from"./components/biz/business/detail/video-detail-actions/material.mjs";import{headerAvatarIconMaterial as k}from"./components/biz/business/header-search/header-avatar-icon/material.mjs";import{headerAvatarLogoSearchMaterial as A}from"./components/biz/business/header-search/header-avatar-logo-search/material.mjs";import{headerAvatarLogoSearchIconMaterial as j}from"./components/biz/business/header-search/header-avatar-logo-search-icon/material.mjs";import{headerLogoSearchMaterial as M}from"./components/biz/business/header-search/header-logo-search/material.mjs";import{headerSearchMaterial as N}from"./components/biz/business/header-search/header-search/material.mjs";import{largeFeatureGridMaterial as P}from"./components/biz/business/large-feature-grid/material.mjs";import{shortcutGridMaterial as F}from"./components/biz/business/shortcut-grid/material.mjs";var I=e({BannerCarouselMaterial:()=>x,bannerAdMaterial:()=>t,channelListMaterial:()=>S,exampleButtonMaterial:()=>b,floatingAdMaterial:()=>n,floatingBallMaterial:()=>o,headerAvatarIconMaterial:()=>k,headerAvatarLogoSearchIconMaterial:()=>j,headerAvatarLogoSearchMaterial:()=>A,headerLogoSearchMaterial:()=>M,headerSearchMaterial:()=>N,homeRecommendGridMaterial:()=>s,homeRecommendWaterfallMaterial:()=>c,iconAdMaterial:()=>r,imageTextRecommendMaterial:()=>l,largeFeatureGridMaterial:()=>P,marqueeMaterial:()=>u,myProfileHeaderMaterial:()=>d,popupAdMaterial:()=>i,profileHeaderMaterial:()=>f,profileHeaderMaterialWithDisabledBackground:()=>p,profileMainMaterial:()=>h,searchHistoryMaterial:()=>g,searchInputMaterial:()=>_,shortcutGridMaterial:()=>F,tabBarMaterial:()=>v,textAdMaterial:()=>a,textRecommendMaterial:()=>y,videoDetailActionsMaterial:()=>O,videoDetailInfoMaterial:()=>C,videoDetailInfoTitleTagsEpisodesMaterial:()=>w,videoDetailPlayerBridgeOnlyMaterial:()=>E,videoDetailPlayerMaterial:()=>T,videoDetailRecommendMaterial:()=>D,visitorProfileHeaderMaterial:()=>m});export{x as BannerCarouselMaterial,t as bannerAdMaterial,S as channelListMaterial,b as exampleButtonMaterial,n as floatingAdMaterial,o as floatingBallMaterial,k as headerAvatarIconMaterial,j as headerAvatarLogoSearchIconMaterial,A as headerAvatarLogoSearchMaterial,M as headerLogoSearchMaterial,N as headerSearchMaterial,s as homeRecommendGridMaterial,c as homeRecommendWaterfallMaterial,r as iconAdMaterial,l as imageTextRecommendMaterial,P as largeFeatureGridMaterial,u as marqueeMaterial,I as materials_exports,d as myProfileHeaderMaterial,i as popupAdMaterial,f as profileHeaderMaterial,p as profileHeaderMaterialWithDisabledBackground,h as profileMainMaterial,g as searchHistoryMaterial,_ as searchInputMaterial,F as shortcutGridMaterial,v as tabBarMaterial,a as textAdMaterial,y as textRecommendMaterial,O as videoDetailActionsMaterial,C as videoDetailInfoMaterial,w as videoDetailInfoTitleTagsEpisodesMaterial,E as videoDetailPlayerBridgeOnlyMaterial,T as videoDetailPlayerMaterial,D as videoDetailRecommendMaterial,m as visitorProfileHeaderMaterial};
2
+ import{__exportAll as e}from"./_virtual/_rolldown/runtime.mjs";import{bannerAdMaterial as t}from"./components/biz/business/advertisement/banner-ad/material.mjs";import{floatingAdMaterial as n}from"./components/biz/business/advertisement/floating-ad/material.mjs";import{iconAdMaterial as r}from"./components/biz/business/advertisement/icon-ad/material.mjs";import{popupAdMaterial as i}from"./components/biz/business/advertisement/popup-ad/material.mjs";import{textAdMaterial as a}from"./components/biz/business/advertisement/text-ad/material.mjs";import{floatingBallMaterial as o}from"./components/biz/business/floating-ball/material.mjs";import{homeRecommendGridMaterial as s}from"./components/biz/business/home-recommend/home-recommend-grid/material.mjs";import{homeRecommendWaterfallMaterial as c}from"./components/biz/business/home-recommend/home-recommend-waterfall/material.mjs";import{imageTextRecommendMaterial as l}from"./components/biz/business/image-text-recommend/material.mjs";import{marqueeMaterial as u}from"./components/biz/business/marquee/material.mjs";import{profileHeaderMaterial as d,profileHeaderMaterialWithDisabledBackground as f}from"./components/biz/business/profile/profile-header/material.mjs";import{profileMainMaterial as p}from"./components/biz/business/profile/profile-main/material.mjs";import{searchHistoryMaterial as m}from"./components/biz/business/search-history/material.mjs";import{searchInputMaterial as h}from"./components/biz/business/search-input/material.mjs";import{tabBarMaterial as g}from"./components/biz/business/tab-bar/material.mjs";import{textRecommendMaterial as _}from"./components/biz/business/text-recommend/material.mjs";import{exampleButtonMaterial as v}from"./components/biz/example/button/material.mjs";import{BannerCarouselMaterial as y}from"./components/biz/business/banner-carousel/material.mjs";import{channelListMaterial as b}from"./components/biz/business/channel-list/material.mjs";import{videoDetailInfoMaterial as x}from"./components/biz/business/detail/video-detail-info/material.mjs";import{videoDetailInfoTitleTagsEpisodesMaterial as S}from"./components/biz/business/detail/video-detail-info-title-tags-episodes/material.mjs";import{videoDetailPlayerMaterial as C}from"./components/biz/business/detail/video-detail-player/material.mjs";import{videoDetailPlayerBridgeOnlyMaterial as w}from"./components/biz/business/detail/video-detail-player-bridge-only/material.mjs";import{videoDetailRecommendMaterial as T}from"./components/biz/business/detail/video-detail-recommend/material.mjs";import{videoDetailActionsMaterial as E}from"./components/biz/business/detail/video-detail-actions/material.mjs";import{headerAvatarIconMaterial as D}from"./components/biz/business/header-search/header-avatar-icon/material.mjs";import{headerAvatarLogoSearchMaterial as O}from"./components/biz/business/header-search/header-avatar-logo-search/material.mjs";import{headerAvatarLogoSearchIconMaterial as k}from"./components/biz/business/header-search/header-avatar-logo-search-icon/material.mjs";import{headerLogoSearchMaterial as A}from"./components/biz/business/header-search/header-logo-search/material.mjs";import{headerSearchMaterial as j}from"./components/biz/business/header-search/header-search/material.mjs";import{largeFeatureGridMaterial as M}from"./components/biz/business/large-feature-grid/material.mjs";import{shortcutGridMaterial as N}from"./components/biz/business/shortcut-grid/material.mjs";var P=e({BannerCarouselMaterial:()=>y,bannerAdMaterial:()=>t,channelListMaterial:()=>b,exampleButtonMaterial:()=>v,floatingAdMaterial:()=>n,floatingBallMaterial:()=>o,headerAvatarIconMaterial:()=>D,headerAvatarLogoSearchIconMaterial:()=>k,headerAvatarLogoSearchMaterial:()=>O,headerLogoSearchMaterial:()=>A,headerSearchMaterial:()=>j,homeRecommendGridMaterial:()=>s,homeRecommendWaterfallMaterial:()=>c,iconAdMaterial:()=>r,imageTextRecommendMaterial:()=>l,largeFeatureGridMaterial:()=>M,marqueeMaterial:()=>u,popupAdMaterial:()=>i,profileHeaderMaterial:()=>d,profileHeaderMaterialWithDisabledBackground:()=>f,profileMainMaterial:()=>p,searchHistoryMaterial:()=>m,searchInputMaterial:()=>h,shortcutGridMaterial:()=>N,tabBarMaterial:()=>g,textAdMaterial:()=>a,textRecommendMaterial:()=>_,videoDetailActionsMaterial:()=>E,videoDetailInfoMaterial:()=>x,videoDetailInfoTitleTagsEpisodesMaterial:()=>S,videoDetailPlayerBridgeOnlyMaterial:()=>w,videoDetailPlayerMaterial:()=>C,videoDetailRecommendMaterial:()=>T});export{y as BannerCarouselMaterial,t as bannerAdMaterial,b as channelListMaterial,v as exampleButtonMaterial,n as floatingAdMaterial,o as floatingBallMaterial,D as headerAvatarIconMaterial,k as headerAvatarLogoSearchIconMaterial,O as headerAvatarLogoSearchMaterial,A as headerLogoSearchMaterial,j as headerSearchMaterial,s as homeRecommendGridMaterial,c as homeRecommendWaterfallMaterial,r as iconAdMaterial,l as imageTextRecommendMaterial,M as largeFeatureGridMaterial,u as marqueeMaterial,P as materials_exports,i as popupAdMaterial,d as profileHeaderMaterial,f as profileHeaderMaterialWithDisabledBackground,p as profileMainMaterial,m as searchHistoryMaterial,h as searchInputMaterial,N as shortcutGridMaterial,g as tabBarMaterial,a as textAdMaterial,_ as textRecommendMaterial,E as videoDetailActionsMaterial,x as videoDetailInfoMaterial,S as videoDetailInfoTitleTagsEpisodesMaterial,w as videoDetailPlayerBridgeOnlyMaterial,C as videoDetailPlayerMaterial,T as videoDetailRecommendMaterial};
@@ -106,6 +106,10 @@ interface AdsMatchMaterial {
106
106
  * 第三方广告类型枚举。
107
107
  */
108
108
  advertiseType?: number;
109
+ /**
110
+ * 视频素材地址。
111
+ */
112
+ advertiseVideo?: string;
109
113
  /**
110
114
  * 广告文案描述。
111
115
  */
@@ -1,2 +1,2 @@
1
1
 
2
- import e from"../utils/http.mjs";async function t(t,n){let a=await e.request({...n??{},url:`/api/content/matchAds`,method:`POST`,data:i(t)});return{...a,data:r(a.data)??{}}}function n(e){return[`content-ads-match`,e.adType,e.componentId??``,e.sceneContext??{}]}function r(e){if(e)return{hit:e.hit,adType:e.adType??e.ad_type,advertiseLocationCode:e.advertiseLocationCode??e.advertise_location_code,config:o(e.config),materials:e.materials?.map(s)??[]}}function i(e){let t=a(e.sceneContext);return{ad_type:e.adType,component_id:e.componentId??`111111`,...t?{scene_context:t}:{}}}function a(e){if(e)return{startup_type:e.startupType,is_startup_hot:e.isStartupHot,background_durationMin:e.backgroundDurationMin,video_played_seconds:e.videoPlayedSeconds}}function o(e){if(e)return{skipSeconds:e.skipSeconds??e.skip_seconds,popupCount:e.popupCount??e.popup_count,dailyMaxShow:e.dailyMaxShow??e.daily_max_show,triggerVideoProgressMin:e.triggerVideoProgressMin??e.trigger_video_progress_min,switchInterval:e.switchInterval??e.switch_interval,displayCount:e.displayCount??e.display_count,styleSize:e.styleSize??e.style_size}}function s(e){return{advertiseCode:e.advertiseCode??e.advertise_code,advertiseName:e.advertiseName??e.advertise_name,advertiseUrl:e.advertiseUrl??e.advertise_url,advertiseIcon:e.advertiseIcon??e.advertise_icon,adPcAdvertiseIcon:e.adPcAdvertiseIcon??e.pc_advertise_icon,advertiseType:e.advertiseType??e.advertise_type,advertiseDesc:e.advertiseDesc??e.advertise_desc,sort:e.sort,startTimeStamp:e.startTimeStamp??e.start_timestamp,endTimeStamp:e.endTimeStamp??e.end_timestamp,adExtData:e.adExtData??e.ad_ext_data}}export{t as pContentAdsMatch,n as pContentAdsMatchKey};
2
+ import e from"../utils/http.mjs";async function t(t,n){let a=await e.request({...n??{},url:`/api/content/matchAds`,method:`POST`,data:i(t)});return{...a,data:r(a.data)??{}}}function n(e){return[`content-ads-match`,e.adType,e.componentId??``,e.sceneContext??{}]}function r(e){if(e)return{hit:e.hit,adType:e.adType??e.ad_type,advertiseLocationCode:e.advertiseLocationCode??e.advertise_location_code,config:o(e.config),materials:e.materials?.map(s)??[]}}function i(e){let t=a(e.sceneContext);return{ad_type:e.adType,component_id:e.componentId??`111111`,...t?{scene_context:t}:{}}}function a(e){if(e)return{startup_type:e.startupType,is_startup_hot:e.isStartupHot,background_durationMin:e.backgroundDurationMin,video_played_seconds:e.videoPlayedSeconds}}function o(e){if(e)return{skipSeconds:e.skipSeconds??e.skip_seconds,popupCount:e.popupCount??e.popup_count,dailyMaxShow:e.dailyMaxShow??e.daily_max_show,triggerVideoProgressMin:e.triggerVideoProgressMin??e.trigger_video_progress_min,switchInterval:e.switchInterval??e.switch_interval,displayCount:e.displayCount??e.display_count,styleSize:e.styleSize??e.style_size}}function s(e){return{advertiseCode:e.advertiseCode??e.advertise_code,advertiseName:e.advertiseName??e.advertise_name,advertiseUrl:e.advertiseUrl??e.advertise_url,advertiseIcon:e.advertiseIcon??e.advertise_icon,adPcAdvertiseIcon:e.adPcAdvertiseIcon??e.pc_advertise_icon,advertiseType:e.advertiseType??e.advertise_type,advertiseVideo:e.advertiseVideo??e.advertise_video,advertiseDesc:e.advertiseDesc??e.advertise_desc,sort:e.sort,startTimeStamp:e.startTimeStamp??e.start_timestamp,endTimeStamp:e.endTimeStamp??e.end_timestamp,adExtData:e.adExtData??e.ad_ext_data}}export{t as pContentAdsMatch,n as pContentAdsMatchKey};
@@ -1,2 +1,2 @@
1
1
 
2
- import e from"crypto-js";function t(e=8){return Array.from({length:e},()=>Math.random().toString(36)[2]).join(``)}function n(){return typeof window<`u`}function r(){return typeof navigator>`u`?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function i(e){return e==null?`0`:String(e)}function a(e){if(e==null)return 0;if(typeof e==`number`)return e;let t=Number(e);return Number.isNaN(t)?0:t}function o(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);return n<1e3?String(n):n<1e6?`${(n/1e3).toFixed(1)}k`:`${(n/1e6).toFixed(1)}m`}function s(){return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}function c(e){return`${Math.floor(e/60)}:${Math.floor(e%60).toString().padStart(2,`0`)}`}function l(e){let t=0,n=0;try{if(e){let[r,i]=e.split(`x`);t=Number.parseInt(r||`0`,10)||0,n=Number.parseInt(i||`0`,10)||0}}catch(e){console.warn(`parseResolution failed`,e)}return{width:t,height:n}}function u(e,t=`yyyy-MM-dd hh:mm`){if(typeof e!=`number`||Number.isNaN(e)||e<0)return``;let n=new Date(e*1e3);if(Number.isNaN(n.getTime()))return``;let r=n.getFullYear().toString(),i=String(n.getMonth()+1).padStart(2,`0`),a=String(n.getDate()).padStart(2,`0`),o=String(n.getHours()).padStart(2,`0`),s=String(n.getMinutes()).padStart(2,`0`);return t.replace(`yyyy`,r).replace(`yy`,r.slice(-2)).replace(`MM`,i).replace(`dd`,a).replace(`hh`,o).replace(`mm`,s)}function d(){return Math.floor(Date.now()/1e3)}const f=/<span class="mention" contenteditable="false" data-id="(\w+)">(.*?)<\/span>/g,p=/<@_user>(\w+)<\/@_user>/g;function m(e){let t=[];if(!e)return t;let n;for(;(n=f.exec(e))!==null;)t.push(n[1]);return t}function h(e){return e?e.replace(f,`<@_user>$1</@_user>`):``}function g(e){let{text:t=``,atUsers:n=[]}=e;return t?t.replace(p,(e,t)=>`<span class="mention" data-id="${t}">@${n.find(e=>e.user_id===t||e.userId===t)?.name||``}</span>`):``}function _(e){return`<span class="mention" contenteditable="false" data-id="${e.user_id}">@${e.name}</span>`}function v(e){return e?e.replace(/<[^>]+>/g,``):``}function y(e,t){let n=null;return((...r)=>{n&&clearTimeout(n),n=setTimeout(()=>e(...r),t)})}async function b(e){try{if(n()){let t=document.cookie.split(`; `).find(t=>t.startsWith(`${e}=`))?.split(`=`)[1];return t?decodeURIComponent(t):``}else{let{cookies:t}=await import(`next/headers`);return(await t()).get(e)?.value??``}}catch(t){return console.error(`获取 Cookie "${e}" 失败:`,t),``}}function x(e,t,n){let r=[`${e}=${encodeURIComponent(t)}`];if(n.expires)r.push(`expires=${n.expires.toUTCString()}`);else if(n.maxAge){let e=new Date(Date.now()+n.maxAge*1e3);r.push(`expires=${e.toUTCString()}`)}return n.path&&r.push(`path=${n.path}`),n.domain&&r.push(`domain=${n.domain}`),n.secure&&r.push(`secure`),n.sameSite&&r.push(`samesite=${n.sameSite}`),r.join(`; `)}function S(e,t,r={}){if(!n())throw Error(`setCookie 只能在客户端环境中使用`);let i={maxAge:360*24*60*60,httpOnly:!1,secure:process.env.NODE_ENV===`production`,sameSite:process.env.NODE_ENV===`production`?`none`:`lax`,path:`/`,...r};try{let n=x(e,t,i);document.cookie=n}catch(t){throw console.error(`设置 Cookie "${e}" 失败:`,t),Error(`无法设置 Cookie: ${t}`)}}function C(e){if(!n())throw Error(`removeCookie 只能在客户端环境中使用`);document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`}function w(t){if(!t||t.length<10)return``;let n=t.length,r=n%5+2,i=t.substring(0,r),a=t.substring(n-r);return e.MD5(`${i}gst#2026!idy_1-16${a}`).toString()}function T(t){return e.SHA256(t).toString(e.enc.Hex)}function E(){let e=window.localStorage.getItem(`user-store`);return e?JSON.parse(e)?.state?.userId:``}function D(e){let t=new URL(window.location.href);Object.entries(e).forEach(([e,n])=>{t.searchParams.set(e,n)}),window.history.replaceState({},``,t.toString())}export{y as debounceFun,o as formatCompactCount,c as formatVideoDuration,w as generateDynamicSign,s as generateUUID,_ as getAtUserElement,b as getCookie,d as getCurrentSecondTime,E as getUserId,T as hashPassword,n as isClient,r as isMobileDevice,i as numToString,l as parseResolution,m as parseTextAtUserIds,t as randomString,C as removeCookie,h as replaceAtUserElement,g as replaceAtUserElementHtmlStr,u as secondToTime,S as setCookie,a as stringToNumber,v as stripHtmlTags,D as updateUrlParams};
2
+ import e from"crypto-js";function t(e=8){return Array.from({length:e},()=>Math.random().toString(36)[2]).join(``)}function n(){return typeof window<`u`}function r(){return typeof navigator>`u`?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function i(e){return e==null?`0`:String(e)}function a(e){if(e==null)return 0;if(typeof e==`number`)return e;let t=Number(e);return Number.isNaN(t)?0:t}function o(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);return n<1e3?String(n):n<1e6?`${(n/1e3).toFixed(1)}K`:`${(n/1e6).toFixed(1)}M`}function s(){return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}function c(e){return`${Math.floor(e/60)}:${Math.floor(e%60).toString().padStart(2,`0`)}`}function l(e){let t=0,n=0;try{if(e){let[r,i]=e.split(`x`);t=Number.parseInt(r||`0`,10)||0,n=Number.parseInt(i||`0`,10)||0}}catch(e){console.warn(`parseResolution failed`,e)}return{width:t,height:n}}function u(e,t=`yyyy-MM-dd hh:mm`){if(typeof e!=`number`||Number.isNaN(e)||e<0)return``;let n=new Date(e*1e3);if(Number.isNaN(n.getTime()))return``;let r=n.getFullYear().toString(),i=String(n.getMonth()+1).padStart(2,`0`),a=String(n.getDate()).padStart(2,`0`),o=String(n.getHours()).padStart(2,`0`),s=String(n.getMinutes()).padStart(2,`0`);return t.replace(`yyyy`,r).replace(`yy`,r.slice(-2)).replace(`MM`,i).replace(`dd`,a).replace(`hh`,o).replace(`mm`,s)}function d(){return Math.floor(Date.now()/1e3)}const f=/<span class="mention" contenteditable="false" data-id="(\w+)">(.*?)<\/span>/g,p=/<@_user>(\w+)<\/@_user>/g;function m(e){let t=[];if(!e)return t;let n;for(;(n=f.exec(e))!==null;)t.push(n[1]);return t}function h(e){return e?e.replace(f,`<@_user>$1</@_user>`):``}function g(e){let{text:t=``,atUsers:n=[]}=e;return t?t.replace(p,(e,t)=>`<span class="mention" data-id="${t}">@${n.find(e=>e.user_id===t||e.userId===t)?.name||``}</span>`):``}function _(e){return`<span class="mention" contenteditable="false" data-id="${e.user_id}">@${e.name}</span>`}function v(e){return e?e.replace(/<[^>]+>/g,``):``}function y(e,t){let n=null;return((...r)=>{n&&clearTimeout(n),n=setTimeout(()=>e(...r),t)})}async function b(e){try{if(n()){let t=document.cookie.split(`; `).find(t=>t.startsWith(`${e}=`))?.split(`=`)[1];return t?decodeURIComponent(t):``}else{let{cookies:t}=await import(`next/headers`);return(await t()).get(e)?.value??``}}catch(t){return console.error(`获取 Cookie "${e}" 失败:`,t),``}}function x(e,t,n){let r=[`${e}=${encodeURIComponent(t)}`];if(n.expires)r.push(`expires=${n.expires.toUTCString()}`);else if(n.maxAge){let e=new Date(Date.now()+n.maxAge*1e3);r.push(`expires=${e.toUTCString()}`)}return n.path&&r.push(`path=${n.path}`),n.domain&&r.push(`domain=${n.domain}`),n.secure&&r.push(`secure`),n.sameSite&&r.push(`samesite=${n.sameSite}`),r.join(`; `)}function S(e,t,r={}){if(!n())throw Error(`setCookie 只能在客户端环境中使用`);let i={maxAge:360*24*60*60,httpOnly:!1,secure:process.env.NODE_ENV===`production`,sameSite:process.env.NODE_ENV===`production`?`none`:`lax`,path:`/`,...r};try{let n=x(e,t,i);document.cookie=n}catch(t){throw console.error(`设置 Cookie "${e}" 失败:`,t),Error(`无法设置 Cookie: ${t}`)}}function C(e){if(!n())throw Error(`removeCookie 只能在客户端环境中使用`);document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`}function w(t){if(!t||t.length<10)return``;let n=t.length,r=n%5+2,i=t.substring(0,r),a=t.substring(n-r);return e.MD5(`${i}gst#2026!idy_1-16${a}`).toString()}function T(t){return e.SHA256(t).toString(e.enc.Hex)}function E(){let e=window.localStorage.getItem(`user-store`);return e?JSON.parse(e)?.state?.userId:``}function D(e){let t=new URL(window.location.href);Object.entries(e).forEach(([e,n])=>{t.searchParams.set(e,n)}),window.history.replaceState({},``,t.toString())}export{y as debounceFun,o as formatCompactCount,c as formatVideoDuration,w as generateDynamicSign,s as generateUUID,_ as getAtUserElement,b as getCookie,d as getCurrentSecondTime,E as getUserId,T as hashPassword,n as isClient,r as isMobileDevice,i as numToString,l as parseResolution,m as parseTextAtUserIds,t as randomString,C as removeCookie,h as replaceAtUserElement,g as replaceAtUserElementHtmlStr,u as secondToTime,S as setCookie,a as stringToNumber,v as stripHtmlTags,D as updateUrlParams};
@@ -1,2 +1,2 @@
1
1
 
2
- import{getCookie as e,isClient as t}from"./common.mjs";import{getOrCreateDeviceId as n}from"./device-id.mjs";import{useBlockedModalStore as r}from"../store/modules/blocked-modal-store.mjs";import{useUserStore as i}from"../store/modules/user-store.mjs";import{resolveRequestUserId as a}from"./request-user-id.mjs";import{toast as o}from"sonner";const s=process.env.NEXT_PUBLIC_API_BASE||``;let c=!1,l=!1,u=null;var d=class extends Error{constructor(e,t,n){super(t),this.status=e,this.response=n}};function f(e){if(!e)return``;let t=new URLSearchParams;Object.entries(e).forEach(([e,n])=>{n!=null&&t.append(e,String(n))});let n=t.toString();return n?`?${n}`:``}function p(e=1e4,t){let n=new AbortController,r=setTimeout(()=>n.abort(),e);return t&&t.addEventListener(`abort`,()=>n.abort()),{signal:n.signal,clear:()=>clearTimeout(r)}}function m(){t()&&(l||(l=!0,i.getState().logout(),setTimeout(()=>{l=!1},1e3)))}var h=class{constructor(){this.baseURL=s,this.defaultConfig={method:`GET`,timeout:1e4,cache:`default`}}async buildHeaders(e){return{"Content-Type":`application/json`,...e}}buildURL(e,t){return`${e.startsWith(`http`)?e:`${this.baseURL}${e.startsWith(`/`)?``:`/`}${e}`}${f(t)}`}async executeOnce(s){let{url:l,method:f=`GET`,data:h,params:g,timeout:_,cache:v,revalidate:y,tags:b,signal:x}=s,S=await this.buildHeaders(s.headers),C=``,w=f===`GET`||f===`HEAD`;if(t()&&!S[`x-device-id`]){let e=await n();e&&(S[`x-device-id`]=e)}C=await e(`token`);let T=await e(`userId`),E=await e(`guestUserId`);C&&(S.Authorization=`Bearer ${C}`);let D=a(T,E);if(D&&(S[`x-user-id`]=D),t()&&(u?.token&&u.token!==C&&(u=null),C&&u?.token===C))throw m(),new d(403,`账号已被封禁`,{code:403,message:`账号已被封禁`,data:{blocked_remark:u.blockedRemark,blocked_end_time:u.blockedEndTime}});let O;!w&&h!==void 0&&(h instanceof FormData?(delete S[`Content-Type`],O=h):O=JSON.stringify(h));let{signal:k,clear:A}=p(_,x),j=this.buildURL(l,g);try{let e=await fetch(j,{method:f,headers:S,body:O,cache:v,signal:k,next:{revalidate:y??0,tags:b}}),n=e.status===401||e.status===403;if(!e.ok&&!n)throw new d(e.status,e.statusText,await e.text());let a=await e.json(),s=n&&e.status===401||a?.code===401,l=n&&e.status===403||a?.code===403;if(s)if(t())c||(c=!0,o.error(`登录已过期,请重新登录`),i.getState().logout(),setTimeout(()=>{c=!1},3e3));else throw new d(a.code,a.message,a);if(l){let e=typeof a?.data?.blocked_remark==`string`?a.data.blocked_remark:``,n=Number(a?.data?.blocked_end_time),i={blockedRemark:e,blockedEndTime:Number.isFinite(n)&&n>0?Math.floor(n):0};if(t()){let e=C,t=u?.token===e;e&&(u={token:e,...i}),t||r.getState().open(i),m()}throw new d(a.code,a.message,a)}if(a.code!==0)throw new d(a.code,a.message,a);return a}finally{A()}}async request(e){let t={...this.defaultConfig,...e};return await this.executeOnce(t)}get(e,t){return this.request({...t,method:`GET`,url:e})}post(e,t){return this.request({...t,method:`POST`,url:e})}put(e,t){return this.request({...t,method:`PUT`,url:e})}delete(e,t){return this.request({...t,method:`DELETE`,url:e})}patch(e,t){return this.request({...t,method:`PATCH`,url:e})}};const g=new h;export{h as HttpClient,d as HttpError,g as default};
2
+ import{getCookie as e,isClient as t}from"./common.mjs";import{getOrCreateDeviceId as n}from"./device-id.mjs";import{useBlockedModalStore as r}from"../store/modules/blocked-modal-store.mjs";import{useUserStore as i}from"../store/modules/user-store.mjs";import{resolveRequestUserId as a}from"./request-user-id.mjs";import{toast as o}from"sonner";const s=process.env.NEXT_PUBLIC_API_BASE||``;let c=!1,l=!1,u=null;var d=class extends Error{constructor(e,t,n){super(t),this.status=e,this.response=n}};function f(e){if(!e)return``;let t=new URLSearchParams;Object.entries(e).forEach(([e,n])=>{n!=null&&t.append(e,String(n))});let n=t.toString();return n?`?${n}`:``}function p(e=1e4,t){let n=new AbortController,r=setTimeout(()=>n.abort(),e);return t&&t.addEventListener(`abort`,()=>n.abort()),{signal:n.signal,clear:()=>clearTimeout(r)}}function m(){t()&&(l||(l=!0,i.getState().logout(),setTimeout(()=>{l=!1},1e3)))}var h=class{constructor(){this.baseURL=s,this.defaultConfig={method:`GET`,timeout:1e4,cache:`default`}}async buildHeaders(e){return{"Content-Type":`application/json`,...e}}buildURL(e,t){return`${e.startsWith(`http`)?e:`${this.baseURL}${e.startsWith(`/`)?``:`/`}${e}`}${f(t)}`}async executeOnce(s){let{url:l,method:f=`GET`,data:h,params:g,timeout:_,cache:v,revalidate:y,tags:b,signal:x}=s,S=await this.buildHeaders(s.headers),C=``,w=f===`GET`||f===`HEAD`;if(t()){if(!S[`x-device-id`]){let e=await n();e&&(S[`x-device-id`]=e)}C=await e(`token`);let t=await e(`userId`),r=await e(`guestUserId`);C&&(S.Authorization=`Bearer ${C}`);let i=a(t,r);if(i&&(S[`x-user-id`]=i),u?.token&&u.token!==C&&(u=null),C&&u?.token===C)throw m(),new d(403,`账号已被封禁`,{code:403,message:`账号已被封禁`,data:{blocked_remark:u.blockedRemark,blocked_end_time:u.blockedEndTime}})}let T;!w&&h!==void 0&&(h instanceof FormData?(delete S[`Content-Type`],T=h):T=JSON.stringify(h));let{signal:E,clear:D}=p(_,x),O=this.buildURL(l,g);try{let e=await fetch(O,{method:f,headers:S,body:T,cache:v,signal:E,next:{revalidate:y??0,tags:b}}),n=e.status===401||e.status===403;if(!e.ok&&!n)throw new d(e.status,e.statusText,await e.text());let a=await e.json(),s=n&&e.status===401||a?.code===401,l=n&&e.status===403||a?.code===403;if(s)if(t())c||(c=!0,o.error(`登录已过期,请重新登录`),i.getState().logout(),setTimeout(()=>{c=!1},3e3));else throw new d(a.code,a.message,a);if(l){let e=typeof a?.data?.blocked_remark==`string`?a.data.blocked_remark:``,n=Number(a?.data?.blocked_end_time),i={blockedRemark:e,blockedEndTime:Number.isFinite(n)&&n>0?Math.floor(n):0};if(t()){let e=C,t=u?.token===e;e&&(u={token:e,...i}),t||r.getState().open(i),m()}throw new d(a.code,a.message,a)}if(a.code!==0)throw new d(a.code,a.message,a);return a}finally{D()}}async request(e){let t={...this.defaultConfig,...e};return await this.executeOnce(t)}get(e,t){return this.request({...t,method:`GET`,url:e})}post(e,t){return this.request({...t,method:`POST`,url:e})}put(e,t){return this.request({...t,method:`PUT`,url:e})}delete(e,t){return this.request({...t,method:`DELETE`,url:e})}patch(e,t){return this.request({...t,method:`PATCH`,url:e})}};const g=new h;export{h as HttpClient,d as HttpError,g as default};
@@ -6,10 +6,10 @@ type InspectorFieldOption<T> = Omit<T, 'type'>;
6
6
  declare const stringInspectorFieldSchema: z.ZodObject<{
7
7
  type: z.ZodLiteral<"string">;
8
8
  fieldType: z.ZodOptional<z.ZodEnum<{
9
+ select: "select";
9
10
  input: "input";
10
11
  textarea: "textarea";
11
12
  color: "color";
12
- select: "select";
13
13
  }>>;
14
14
  defaultValue: z.ZodOptional<z.ZodString>;
15
15
  label: z.ZodOptional<z.ZodString>;
@@ -68,10 +68,10 @@ type ObjectInspectorFieldOption = InspectorFieldOption<z.infer<typeof objectInsp
68
68
  declare const componentInspectorFieldMetaSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
69
69
  type: z.ZodLiteral<"string">;
70
70
  fieldType: z.ZodOptional<z.ZodEnum<{
71
+ select: "select";
71
72
  input: "input";
72
73
  textarea: "textarea";
73
74
  color: "color";
74
- select: "select";
75
75
  }>>;
76
76
  defaultValue: z.ZodOptional<z.ZodString>;
77
77
  label: z.ZodOptional<z.ZodString>;
@@ -209,6 +209,8 @@ interface PageLifecyclePayload {
209
209
  page_key: string;
210
210
  /** 页面名称,如 首页、我的。 */
211
211
  page_name: string;
212
+ /** 页面路径(可选),如 /category/drama。 */
213
+ page_path?: string;
212
214
  /** 页面停留时长(秒);show 事件固定为 0。 */
213
215
  duration: number;
214
216
  }
@@ -217,15 +219,5 @@ interface PageLifecyclePayload {
217
219
  * @param payload 页面生命周期 payload。
218
220
  */
219
221
  declare function trackPageLifecycle(payload: PageLifecyclePayload): void;
220
- /**
221
- * 页面生命周期追踪 Hook。
222
- * - 挂载时上报 show(duration: 0)
223
- * - 页面可见期间每隔 1 分钟上报一次 show(附带当前累计停留秒数)
224
- * - visibilitychange 隐藏时上报 hide;重新可见时重置计时并上报 show
225
- * - 卸载时(页面仍可见)补报 hide
226
- * @param pageKey 页面标识键。
227
- * @param pageName 页面名称。
228
- */
229
- declare function usePageLifecycle(pageKey: string, pageName: string): void;
230
222
  //#endregion
231
- export { AdClickPayload, AdImpressionPayload, AdvertisingPayload, AppPageViewPayload, ClickPosition, KeywordClickPayload, NavigationPayload, PageLifecyclePayload, RecommendListClickPayload, VideoEventPayload, trackAdClick, trackAdImpression, trackAdvertising, trackAppPageView, trackKeywordClick, trackNavigation, trackPageClick, trackPageLifecycle, trackRecommendListClick, trackVideoEvent, usePageLifecycle };
223
+ export { AdClickPayload, AdImpressionPayload, AdvertisingPayload, AppPageViewPayload, ClickPosition, KeywordClickPayload, NavigationPayload, PageLifecyclePayload, RecommendListClickPayload, VideoEventPayload, trackAdClick, trackAdImpression, trackAdvertising, trackAppPageView, trackKeywordClick, trackNavigation, trackPageClick, trackPageLifecycle, trackRecommendListClick, trackVideoEvent };
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useEffect as e}from"react";function t(e,t,n,r,i){if(typeof window>`u`)return;console.log(`trackPageClick${r}`);let a=n?.pageX??0,o=n?.pageY??0,s=window.innerWidth||1,c=window.innerHeight||1,l={page_key:e,page_name:t,element_name:r,click_page_x:Math.round(a),click_page_y:Math.round(o),click_x_percent:Math.round(a/s*100),click_y_percent:Math.round(o/c*100),screen_width:window.screen.width,screen_height:window.screen.height,recommend_trace_id:``,...i};window.WebSDK?.track?.({event:`page_click`,payload:l}),window.sensors?.track?.(`page_click`,l)}function n(e){if(console.log(`trackrecommend_list_click`,e.page_name),typeof window>`u`)return;let t={recommend_trace_id:``,recommend_id:``,recommend_trace_info:``,...e};window.WebSDK?.track?.({event:`recommend_list_click`,payload:t}),window.sensors?.track?.(`recommend_list_click`,t)}const r=new Set;function i(e){if(typeof window>`u`)return;let t=e.ad_id.split(`,`).map(e=>e.trim()).filter(Boolean),n=(e.creative_id??``).split(`,`).map(e=>e.trim()),i=t.reduce((t,n,i)=>(r.has(`${e.ad_slot_key}::${n}`)||t.push(i),t),[]);if(i.length===0)return;for(let n of i)r.add(`${e.ad_slot_key}::${t[n]}`);let a={...e,ad_id:i.map(e=>t[e]).join(`,`),creative_id:i.map(e=>n[e]??``).join(`,`)};console.log(`[trackAdImpression]`,a.ad_slot_key,a.ad_id),window.WebSDK?.track?.({event:`ad_impression`,payload:a}),window.sensors?.track?.(`ad_impression`,a)}function a(e){typeof window>`u`||(console.log(`[trackAdvertising]`,e.advertising_key,e.event_type),window.WebSDK?.track?.({event:`advertising`,payload:e}),window.sensors?.track?.(`advertising`,e))}function o(e){typeof window>`u`||(console.log(`navigaition`,e.navigation_name),window.WebSDK?.track?.({event:`navigation`,payload:e}),window.sensors?.track?.(`navigation`,e))}function s(e){typeof window>`u`||(console.log(`[trackVideoEvent]`,e.video_behavior_key,e.video_id),window.WebSDK?.track?.({event:`video_event`,payload:e}),window.sensors?.track?.(`video_event`,e))}function c(e){typeof window>`u`||(console.log(`keywordclick`,e.keyword),window.WebSDK?.track?.({event:`keyword_click`,payload:e}),window.sensors?.track?.(`keyword_click`,e))}function l(e){if(typeof window>`u`)return;let t={creative_id:``,...e};console.log(`[trackAdClick]`,t.ad_slot_key,t.ad_id),window.WebSDK?.track?.({event:`ad_click`,payload:t}),window.sensors?.track?.(`ad_click`,t)}function u(e){if(console.log(`trackPageView`,e.page_name),typeof window>`u`)return;let t={user_type:`normal`,referrer_page_key:``,referrer_page_name:``,page_load_time:0,recommend_trace_id:``,...e};window.WebSDK?.track?.({event:`app_page_view`,payload:t}),window.sensors?.track?.(`app_page_view`,t)}function d(e){typeof window>`u`||(console.log(`[trackPageLifecycle]`,e.page_name,e.duration,e.lifecycle_status),window.WebSDK?.track?.({event:`page_lifecycle`,payload:e}),window.sensors?.track?.(`page_lifecycle`,e))}function f(t,n){e(()=>{let e=Date.now();d({lifecycle_status:`show`,page_key:t,page_name:n,duration:0});let r=setInterval(()=>{document.visibilityState!==`hidden`&&d({lifecycle_status:`show`,page_key:t,page_name:n,duration:Math.floor((Date.now()-e)/1e3)})},600*1e3);return()=>{clearInterval(r)}},[])}export{l as trackAdClick,i as trackAdImpression,a as trackAdvertising,u as trackAppPageView,c as trackKeywordClick,o as trackNavigation,t as trackPageClick,d as trackPageLifecycle,n as trackRecommendListClick,s as trackVideoEvent,f as usePageLifecycle};
2
+ "use client";function e(e,t,n,r,i){if(typeof window>`u`)return;let a=n?.pageX??0,o=n?.pageY??0,s=window.innerWidth||1,c=window.innerHeight||1,l={page_key:e,page_name:t,element_name:r,click_page_x:Math.round(a),click_page_y:Math.round(o),click_x_percent:Math.round(a/s*100),click_y_percent:Math.round(o/c*100),screen_width:window.screen.width,screen_height:window.screen.height,recommend_trace_id:``,...i};window.WebSDK?.track?.({event:`page_click`,payload:l}),window.sensors?.track?.(`page_click`,l)}function t(e){if(typeof window>`u`)return;let t={recommend_trace_id:``,recommend_id:``,recommend_trace_info:``,...e};window.WebSDK?.track?.({event:`recommend_list_click`,payload:t}),window.sensors?.track?.(`recommend_list_click`,t)}const n=new Set;function r(e){if(typeof window>`u`)return;let t=e.ad_id.split(`,`).map(e=>e.trim()).filter(Boolean),r=(e.creative_id??``).split(`,`).map(e=>e.trim()),i=t.reduce((t,r,i)=>(n.has(`${e.ad_slot_key}::${r}`)||t.push(i),t),[]);if(i.length===0)return;for(let r of i)n.add(`${e.ad_slot_key}::${t[r]}`);let a={...e,ad_id:i.map(e=>t[e]).join(`,`),creative_id:i.map(e=>r[e]??``).join(`,`)};window.WebSDK?.track?.({event:`ad_impression`,payload:a}),window.sensors?.track?.(`ad_impression`,a)}function i(e){typeof window>`u`||(window.WebSDK?.track?.({event:`advertising`,payload:e}),window.sensors?.track?.(`advertising`,e))}function a(e){typeof window>`u`||(window.WebSDK?.track?.({event:`navigation`,payload:e}),window.sensors?.track?.(`navigation`,e))}function o(e){typeof window>`u`||(window.WebSDK?.track?.({event:`video_event`,payload:e}),window.sensors?.track?.(`video_event`,e))}function s(e){typeof window>`u`||(window.WebSDK?.track?.({event:`keyword_click`,payload:e}),window.sensors?.track?.(`keyword_click`,e))}function c(e){if(typeof window>`u`)return;let t={creative_id:``,...e};window.WebSDK?.track?.({event:`ad_click`,payload:t}),window.sensors?.track?.(`ad_click`,t)}function l(e){if(typeof window>`u`)return;let t={user_type:`normal`,referrer_page_key:``,referrer_page_name:``,page_load_time:0,recommend_trace_id:``,...e};window.WebSDK?.track?.({event:`app_page_view`,payload:t}),window.sensors?.track?.(`app_page_view`,t)}function u(e){typeof window>`u`||(window.WebSDK?.track?.({event:`page_lifecycle`,payload:e}),window.sensors?.track?.(`page_lifecycle`,e))}export{c as trackAdClick,r as trackAdImpression,i as trackAdvertising,l as trackAppPageView,s as trackKeywordClick,a as trackNavigation,e as trackPageClick,u as trackPageLifecycle,t as trackRecommendListClick,o as trackVideoEvent};
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{useCallback as e,useMemo as t}from"react";import{useRouter as n}from"next/navigation";function r(){let r=n(),i=typeof window<`u`&&window.isWebView===!0,a=e(e=>{if(!i||typeof window>`u`)return e;try{let t=new URL(e,window.location.origin),n=t.pathname.split(`/`).filter(Boolean),r=n.findIndex(e=>e===`video`);return r<0?e:(n[r]=`webview`,t.pathname=`/${n.join(`/`)}`,`${t.pathname}${t.search}${t.hash}`)}catch{return e}},[i]),o=e(e=>{if(typeof window>`u`)return{isSameOrigin:!0,path:e};try{let t=new URL(e,window.location.href);return t.origin===window.location.origin?{isSameOrigin:!0,path:a(`${t.pathname}${t.search}${t.hash}`)}:{isSameOrigin:!1,path:e}}catch{return{isSameOrigin:!0,path:a(e)}}},[a]),s=e((e,t)=>{let n=o(e);if(!n.isSameOrigin&&typeof window<`u`){window.location.href=n.path;return}r.push(n.path,t)},[o,r]),c=e((e,t)=>{let n=o(e);if(!n.isSameOrigin&&typeof window<`u`){window.location.replace(n.path);return}r.replace(n.path,t)},[o,r]);return t(()=>({...r,push:s,replace:c}),[s,c,r])}export{r as useRouter};
2
+ "use client";import{useRouter as e}from"next/navigation";import{useCallback as t,useMemo as n}from"react";function r(){let r=e(),i=typeof window<`u`&&window.isWebView===!0,a=t(e=>{if(!i||typeof window>`u`)return e;try{let t=new URL(e,window.location.origin),n=t.pathname.split(`/`).filter(Boolean),r=n.findIndex(e=>e===`video`);return r<0?e:(n[r]=`webview`,t.pathname=`/${n.join(`/`)}`,`${t.pathname}${t.search}${t.hash}`)}catch{return e}},[i]),o=t(e=>{if(typeof window>`u`)return{isSameOrigin:!0,path:e};try{let t=new URL(e,window.location.href);return t.origin===window.location.origin?{isSameOrigin:!0,path:a(`${t.pathname}${t.search}${t.hash}`)}:{isSameOrigin:!1,path:e}}catch{return{isSameOrigin:!0,path:a(e)}}},[a]),s=t((e,t)=>{let n=o(e);if(!n.isSameOrigin&&typeof window<`u`){window.location.href=n.path;return}r.push(n.path,t)},[o,r]),c=t((e,t)=>{let n=o(e);if(!n.isSameOrigin&&typeof window<`u`){window.location.replace(n.path);return}r.replace(n.path,t)},[o,r]);return n(()=>({...r,push:s,replace:c}),[s,c,r])}export{r as useRouter};
package/dist/utils.d.mts CHANGED
@@ -21,8 +21,8 @@ import { createInputAndSelectFile, getCoverImage, getImageResolutionFromFile } f
21
21
  import { PASSWORD_ALLOWED_SPECIAL_CHARS, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasswordValidationResult, PasswordValidationType, getFirstInvalidPasswordChar, getPasswordCharacterTypeCount, getPasswordValidationErrorText, validatePasswordPair } from "./utils/password-validator.mjs";
22
22
  import { resolveRequestUserId } from "./utils/request-user-id.mjs";
23
23
  import { PresignedUploadInfo, UploadToS3Options, UploadToS3Result, uploadToS3WithPresignedUrl } from "./utils/s3-uploader.mjs";
24
- import { AdClickPayload, AdImpressionPayload, AdvertisingPayload, AppPageViewPayload, ClickPosition, KeywordClickPayload, NavigationPayload, PageLifecyclePayload, RecommendListClickPayload, VideoEventPayload, trackAdClick, trackAdImpression, trackAdvertising, trackAppPageView, trackKeywordClick, trackNavigation, trackPageClick, trackPageLifecycle, trackRecommendListClick, trackVideoEvent, usePageLifecycle } from "./utils/tracking.mjs";
24
+ import { AdClickPayload, AdImpressionPayload, AdvertisingPayload, AppPageViewPayload, ClickPosition, KeywordClickPayload, NavigationPayload, PageLifecyclePayload, RecommendListClickPayload, VideoEventPayload, trackAdClick, trackAdImpression, trackAdvertising, trackAppPageView, trackKeywordClick, trackNavigation, trackPageClick, trackPageLifecycle, trackRecommendListClick, trackVideoEvent } from "./utils/tracking.mjs";
25
25
  import { base64ToUint8Array, uint8ArrayToBase64, uint8ArrayToNumberArray } from "./utils/uint8.mjs";
26
26
  import { UploadFileResult, encryptBncBuffer, uploadFile } from "./utils/upload-file.mjs";
27
27
  import { CompatibleRouter, useRouter } from "./utils/use-compatible-router.mjs";
28
- export { AdClickPayload, AdImpressionPayload, AdvertisingPayload, AppPageViewPayload, ClickPosition, CompatibleRouter, ComponentPropsSchemaBuilderHelpers, DefineMaterialOption, eventBus as EventBus, HttpClient, HttpError, INSPECTOR_META_KEY, ImageCompressionQualityRule, InferSchemaProps, KeywordClickPayload, MaterialCategory, MaterialComponentMode, MaterialComponentProps, MaterialMap, NavigationPayload, OverwriteMaterialOption, PASSWORD_ALLOWED_SPECIAL_CHARS, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PageLifecyclePayload, PasswordValidationResult, PasswordValidationType, PresignedUploadInfo, RecommendListClickPayload, RequestConfig, RequestMethod, ResponseData, SchemaHasDefaultValue, UploadFileResult, UploadToS3Options, UploadToS3Result, VideoEventPayload, array, base64ToUint8Array, boolean, checkFollowStatus, clearMyChannelsFromStorage, cn, components, compressImage, createInputAndSelectFile, datetime, debounceFun, decryptImageToArrayBuffer, decryptImageToUint8Array, decryptImageUrl, defaultImageCompressionMaxSizeMB, defaultImageCompressionQuality, defineComponentPropsSchema, defineMaterial, disablePageScroll, enablePageScroll, encryptBncBuffer, enumSchema as enum, enumSchema, followUser, formatCompactCount, formatVideoDuration, generateDynamicSign, generateMaterialMap, generateMaterialMapGroupByCategory, generateUUID, getAppId, getAtUserElement, getCookie, getCoverImage, getCurrentSecondTime, getCurrentUserId, getFirstInvalidPasswordChar, getImageCompressionQuality, getImageResolutionFromFile, getOrCreateBrowserFingerprint, getOrCreateDeviceId, getPasswordCharacterTypeCount, getPasswordValidationErrorText, getResUrl, getSchemaDefaultProps, getUserId, guessImageContentTypeFromUrl, hashPassword, httpClient, imageCompressionQualityRules, isClient, isEncryptedImageUrl, isMobileDevice, isValidEmail, loadComponent, loadHiddenChannelIdsFromStorage, loadMyChannelsFromStorage, normalizeClassName, numToString, number, object, overwriteMaterial, parseResolution, parseTextAtUserIds, pxToVw, randomString, removeCookie, replaceAtUserElement, replaceAtUserElementHtmlStr, resolveImageUrl, resolveRequestUserId, rewriteComponent, saveHiddenChannelIdsToStorage, secondToTime, setCookie, shouldProbeImageUrl, shouldUseApiResDirectly, string, stringToNumber, stripHtmlTags, timeRange, trackAdClick, trackAdImpression, trackAdvertising, trackAppPageView, trackKeywordClick, trackNavigation, trackPageClick, trackPageLifecycle, trackRecommendListClick, trackVideoEvent, uint8ArrayToBase64, uint8ArrayToNumberArray, unfollowUser, updateUrlParams, uploadFile, uploadToS3WithPresignedUrl, usePageLifecycle, useRouter, validatePasswordPair, withInspectorMeta };
28
+ export { AdClickPayload, AdImpressionPayload, AdvertisingPayload, AppPageViewPayload, ClickPosition, CompatibleRouter, ComponentPropsSchemaBuilderHelpers, DefineMaterialOption, eventBus as EventBus, HttpClient, HttpError, INSPECTOR_META_KEY, ImageCompressionQualityRule, InferSchemaProps, KeywordClickPayload, MaterialCategory, MaterialComponentMode, MaterialComponentProps, MaterialMap, NavigationPayload, OverwriteMaterialOption, PASSWORD_ALLOWED_SPECIAL_CHARS, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PageLifecyclePayload, PasswordValidationResult, PasswordValidationType, PresignedUploadInfo, RecommendListClickPayload, RequestConfig, RequestMethod, ResponseData, SchemaHasDefaultValue, UploadFileResult, UploadToS3Options, UploadToS3Result, VideoEventPayload, array, base64ToUint8Array, boolean, checkFollowStatus, clearMyChannelsFromStorage, cn, components, compressImage, createInputAndSelectFile, datetime, debounceFun, decryptImageToArrayBuffer, decryptImageToUint8Array, decryptImageUrl, defaultImageCompressionMaxSizeMB, defaultImageCompressionQuality, defineComponentPropsSchema, defineMaterial, disablePageScroll, enablePageScroll, encryptBncBuffer, enumSchema as enum, enumSchema, followUser, formatCompactCount, formatVideoDuration, generateDynamicSign, generateMaterialMap, generateMaterialMapGroupByCategory, generateUUID, getAppId, getAtUserElement, getCookie, getCoverImage, getCurrentSecondTime, getCurrentUserId, getFirstInvalidPasswordChar, getImageCompressionQuality, getImageResolutionFromFile, getOrCreateBrowserFingerprint, getOrCreateDeviceId, getPasswordCharacterTypeCount, getPasswordValidationErrorText, getResUrl, getSchemaDefaultProps, getUserId, guessImageContentTypeFromUrl, hashPassword, httpClient, imageCompressionQualityRules, isClient, isEncryptedImageUrl, isMobileDevice, isValidEmail, loadComponent, loadHiddenChannelIdsFromStorage, loadMyChannelsFromStorage, normalizeClassName, numToString, number, object, overwriteMaterial, parseResolution, parseTextAtUserIds, pxToVw, randomString, removeCookie, replaceAtUserElement, replaceAtUserElementHtmlStr, resolveImageUrl, resolveRequestUserId, rewriteComponent, saveHiddenChannelIdsToStorage, secondToTime, setCookie, shouldProbeImageUrl, shouldUseApiResDirectly, string, stringToNumber, stripHtmlTags, timeRange, trackAdClick, trackAdImpression, trackAdvertising, trackAppPageView, trackKeywordClick, trackNavigation, trackPageClick, trackPageLifecycle, trackRecommendListClick, trackVideoEvent, uint8ArrayToBase64, uint8ArrayToNumberArray, unfollowUser, updateUrlParams, uploadFile, uploadToS3WithPresignedUrl, useRouter, validatePasswordPair, withInspectorMeta };
package/dist/utils.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
 
2
- import{debounceFun as ee,formatCompactCount as te,formatVideoDuration as ne,generateDynamicSign as e,generateUUID as t,getAtUserElement as n,getCookie as r,getCurrentSecondTime as i,getUserId as a,hashPassword as o,isClient as s,isMobileDevice as c,numToString as l,parseResolution as u,parseTextAtUserIds as d,randomString as f,removeCookie as p,replaceAtUserElement as m,replaceAtUserElementHtmlStr as h,secondToTime as g,setCookie as _,stringToNumber as v,stripHtmlTags as y,updateUrlParams as b}from"./utils/common.mjs";import{getOrCreateBrowserFingerprint as x}from"./utils/browser-fingerprint.mjs";import{clearMyChannelsFromStorage as S,loadHiddenChannelIdsFromStorage as C,loadMyChannelsFromStorage as w,saveHiddenChannelIdsToStorage as T}from"./utils/channel-storage.mjs";import{cn as E}from"./utils/cn.mjs";import D from"./utils/get-res-url.mjs";import{decryptImageToArrayBuffer as O,decryptImageToUint8Array as k,decryptImageUrl as A,guessImageContentTypeFromUrl as j,isEncryptedImageUrl as M,resolveImageUrl as N,shouldProbeImageUrl as P,shouldUseApiResDirectly as F}from"./utils/decrypt-image-client.mjs";import{getOrCreateDeviceId as I}from"./utils/device-id.mjs";import{isValidEmail as L}from"./utils/email-validator.mjs";import R from"./utils/event-bus.mjs";import{resolveRequestUserId as z}from"./utils/request-user-id.mjs";import B,{HttpClient as V,HttpError as H}from"./utils/http.mjs";import{checkFollowStatus as U,followUser as W,getAppId as G,getCurrentUserId as K,unfollowUser as q}from"./utils/follow-service.mjs";import{disablePageScroll as J,enablePageScroll as Y,normalizeClassName as X,pxToVw as Z}from"./utils/helper.mjs";import{compressImage as re,defaultImageCompressionMaxSizeMB as Q,defaultImageCompressionQuality as ie,getImageCompressionQuality as ae,imageCompressionQualityRules as oe}from"./utils/image-compression.mjs";import{components as se,loadComponent as ce,rewriteComponent as le}from"./utils/loaders.mjs";import{createInputAndSelectFile as ue,getCoverImage as de,getImageResolutionFromFile as fe}from"./utils/media.mjs";import{PASSWORD_ALLOWED_SPECIAL_CHARS as pe,PASSWORD_MAX_LENGTH as me,PASSWORD_MIN_LENGTH as he,getFirstInvalidPasswordChar as ge,getPasswordCharacterTypeCount as _e,getPasswordValidationErrorText as ve,validatePasswordPair as ye}from"./utils/password-validator.mjs";import{uploadToS3WithPresignedUrl as be}from"./utils/s3-uploader.mjs";import{defineMaterial as xe,overwriteMaterial as Se}from"./utils/schema/material.mjs";import{INSPECTOR_META_KEY as Ce,array as we,boolean as Te,datetime as Ee,defineComponentPropsSchema as De,enumSchema as $,getSchemaDefaultProps as Oe,number as ke,object as Ae,string as je,timeRange as Me,withInspectorMeta as Ne}from"./utils/schema/schema.mjs";import{generateMaterialMap as Pe,generateMaterialMapGroupByCategory as Fe}from"./utils/schema/utils.mjs";import{trackAdClick as Ie,trackAdImpression as Le,trackAdvertising as Re,trackAppPageView as ze,trackKeywordClick as Be,trackNavigation as Ve,trackPageClick as He,trackPageLifecycle as Ue,trackRecommendListClick as We,trackVideoEvent as Ge,usePageLifecycle as Ke}from"./utils/tracking.mjs";import{base64ToUint8Array as qe,uint8ArrayToBase64 as Je,uint8ArrayToNumberArray as Ye}from"./utils/uint8.mjs";import{encryptBncBuffer as Xe,uploadFile as Ze}from"./utils/upload-file.mjs";import{useRouter as Qe}from"./utils/use-compatible-router.mjs";export{R as EventBus,V as HttpClient,H as HttpError,Ce as INSPECTOR_META_KEY,pe as PASSWORD_ALLOWED_SPECIAL_CHARS,me as PASSWORD_MAX_LENGTH,he as PASSWORD_MIN_LENGTH,we as array,qe as base64ToUint8Array,Te as boolean,U as checkFollowStatus,S as clearMyChannelsFromStorage,E as cn,se as components,re as compressImage,ue as createInputAndSelectFile,Ee as datetime,ee as debounceFun,O as decryptImageToArrayBuffer,k as decryptImageToUint8Array,A as decryptImageUrl,Q as defaultImageCompressionMaxSizeMB,ie as defaultImageCompressionQuality,De as defineComponentPropsSchema,xe as defineMaterial,J as disablePageScroll,Y as enablePageScroll,Xe as encryptBncBuffer,$ as enum,$ as enumSchema,W as followUser,te as formatCompactCount,ne as formatVideoDuration,e as generateDynamicSign,Pe as generateMaterialMap,Fe as generateMaterialMapGroupByCategory,t as generateUUID,G as getAppId,n as getAtUserElement,r as getCookie,de as getCoverImage,i as getCurrentSecondTime,K as getCurrentUserId,ge as getFirstInvalidPasswordChar,ae as getImageCompressionQuality,fe as getImageResolutionFromFile,x as getOrCreateBrowserFingerprint,I as getOrCreateDeviceId,_e as getPasswordCharacterTypeCount,ve as getPasswordValidationErrorText,D as getResUrl,Oe as getSchemaDefaultProps,a as getUserId,j as guessImageContentTypeFromUrl,o as hashPassword,B as httpClient,oe as imageCompressionQualityRules,s as isClient,M as isEncryptedImageUrl,c as isMobileDevice,L as isValidEmail,ce as loadComponent,C as loadHiddenChannelIdsFromStorage,w as loadMyChannelsFromStorage,X as normalizeClassName,l as numToString,ke as number,Ae as object,Se as overwriteMaterial,u as parseResolution,d as parseTextAtUserIds,Z as pxToVw,f as randomString,p as removeCookie,m as replaceAtUserElement,h as replaceAtUserElementHtmlStr,N as resolveImageUrl,z as resolveRequestUserId,le as rewriteComponent,T as saveHiddenChannelIdsToStorage,g as secondToTime,_ as setCookie,P as shouldProbeImageUrl,F as shouldUseApiResDirectly,je as string,v as stringToNumber,y as stripHtmlTags,Me as timeRange,Ie as trackAdClick,Le as trackAdImpression,Re as trackAdvertising,ze as trackAppPageView,Be as trackKeywordClick,Ve as trackNavigation,He as trackPageClick,Ue as trackPageLifecycle,We as trackRecommendListClick,Ge as trackVideoEvent,Je as uint8ArrayToBase64,Ye as uint8ArrayToNumberArray,q as unfollowUser,b as updateUrlParams,Ze as uploadFile,be as uploadToS3WithPresignedUrl,Ke as usePageLifecycle,Qe as useRouter,ye as validatePasswordPair,Ne as withInspectorMeta};
2
+ import{debounceFun as ee,formatCompactCount as te,formatVideoDuration as ne,generateDynamicSign as e,generateUUID as t,getAtUserElement as n,getCookie as r,getCurrentSecondTime as i,getUserId as a,hashPassword as o,isClient as s,isMobileDevice as c,numToString as l,parseResolution as u,parseTextAtUserIds as d,randomString as f,removeCookie as p,replaceAtUserElement as m,replaceAtUserElementHtmlStr as h,secondToTime as g,setCookie as _,stringToNumber as v,stripHtmlTags as y,updateUrlParams as b}from"./utils/common.mjs";import{getOrCreateBrowserFingerprint as x}from"./utils/browser-fingerprint.mjs";import{clearMyChannelsFromStorage as S,loadHiddenChannelIdsFromStorage as C,loadMyChannelsFromStorage as w,saveHiddenChannelIdsToStorage as T}from"./utils/channel-storage.mjs";import{cn as E}from"./utils/cn.mjs";import D from"./utils/get-res-url.mjs";import{decryptImageToArrayBuffer as O,decryptImageToUint8Array as k,decryptImageUrl as A,guessImageContentTypeFromUrl as j,isEncryptedImageUrl as M,resolveImageUrl as N,shouldProbeImageUrl as P,shouldUseApiResDirectly as F}from"./utils/decrypt-image-client.mjs";import{getOrCreateDeviceId as I}from"./utils/device-id.mjs";import{isValidEmail as L}from"./utils/email-validator.mjs";import R from"./utils/event-bus.mjs";import{resolveRequestUserId as z}from"./utils/request-user-id.mjs";import B,{HttpClient as V,HttpError as H}from"./utils/http.mjs";import{checkFollowStatus as U,followUser as W,getAppId as G,getCurrentUserId as K,unfollowUser as q}from"./utils/follow-service.mjs";import{disablePageScroll as J,enablePageScroll as Y,normalizeClassName as X,pxToVw as Z}from"./utils/helper.mjs";import{compressImage as re,defaultImageCompressionMaxSizeMB as Q,defaultImageCompressionQuality as ie,getImageCompressionQuality as ae,imageCompressionQualityRules as oe}from"./utils/image-compression.mjs";import{components as se,loadComponent as ce,rewriteComponent as le}from"./utils/loaders.mjs";import{createInputAndSelectFile as ue,getCoverImage as de,getImageResolutionFromFile as fe}from"./utils/media.mjs";import{PASSWORD_ALLOWED_SPECIAL_CHARS as pe,PASSWORD_MAX_LENGTH as me,PASSWORD_MIN_LENGTH as he,getFirstInvalidPasswordChar as ge,getPasswordCharacterTypeCount as _e,getPasswordValidationErrorText as ve,validatePasswordPair as ye}from"./utils/password-validator.mjs";import{uploadToS3WithPresignedUrl as be}from"./utils/s3-uploader.mjs";import{defineMaterial as xe,overwriteMaterial as Se}from"./utils/schema/material.mjs";import{INSPECTOR_META_KEY as Ce,array as we,boolean as Te,datetime as Ee,defineComponentPropsSchema as De,enumSchema as $,getSchemaDefaultProps as Oe,number as ke,object as Ae,string as je,timeRange as Me,withInspectorMeta as Ne}from"./utils/schema/schema.mjs";import{generateMaterialMap as Pe,generateMaterialMapGroupByCategory as Fe}from"./utils/schema/utils.mjs";import{trackAdClick as Ie,trackAdImpression as Le,trackAdvertising as Re,trackAppPageView as ze,trackKeywordClick as Be,trackNavigation as Ve,trackPageClick as He,trackPageLifecycle as Ue,trackRecommendListClick as We,trackVideoEvent as Ge}from"./utils/tracking.mjs";import{base64ToUint8Array as Ke,uint8ArrayToBase64 as qe,uint8ArrayToNumberArray as Je}from"./utils/uint8.mjs";import{encryptBncBuffer as Ye,uploadFile as Xe}from"./utils/upload-file.mjs";import{useRouter as Ze}from"./utils/use-compatible-router.mjs";export{R as EventBus,V as HttpClient,H as HttpError,Ce as INSPECTOR_META_KEY,pe as PASSWORD_ALLOWED_SPECIAL_CHARS,me as PASSWORD_MAX_LENGTH,he as PASSWORD_MIN_LENGTH,we as array,Ke as base64ToUint8Array,Te as boolean,U as checkFollowStatus,S as clearMyChannelsFromStorage,E as cn,se as components,re as compressImage,ue as createInputAndSelectFile,Ee as datetime,ee as debounceFun,O as decryptImageToArrayBuffer,k as decryptImageToUint8Array,A as decryptImageUrl,Q as defaultImageCompressionMaxSizeMB,ie as defaultImageCompressionQuality,De as defineComponentPropsSchema,xe as defineMaterial,J as disablePageScroll,Y as enablePageScroll,Ye as encryptBncBuffer,$ as enum,$ as enumSchema,W as followUser,te as formatCompactCount,ne as formatVideoDuration,e as generateDynamicSign,Pe as generateMaterialMap,Fe as generateMaterialMapGroupByCategory,t as generateUUID,G as getAppId,n as getAtUserElement,r as getCookie,de as getCoverImage,i as getCurrentSecondTime,K as getCurrentUserId,ge as getFirstInvalidPasswordChar,ae as getImageCompressionQuality,fe as getImageResolutionFromFile,x as getOrCreateBrowserFingerprint,I as getOrCreateDeviceId,_e as getPasswordCharacterTypeCount,ve as getPasswordValidationErrorText,D as getResUrl,Oe as getSchemaDefaultProps,a as getUserId,j as guessImageContentTypeFromUrl,o as hashPassword,B as httpClient,oe as imageCompressionQualityRules,s as isClient,M as isEncryptedImageUrl,c as isMobileDevice,L as isValidEmail,ce as loadComponent,C as loadHiddenChannelIdsFromStorage,w as loadMyChannelsFromStorage,X as normalizeClassName,l as numToString,ke as number,Ae as object,Se as overwriteMaterial,u as parseResolution,d as parseTextAtUserIds,Z as pxToVw,f as randomString,p as removeCookie,m as replaceAtUserElement,h as replaceAtUserElementHtmlStr,N as resolveImageUrl,z as resolveRequestUserId,le as rewriteComponent,T as saveHiddenChannelIdsToStorage,g as secondToTime,_ as setCookie,P as shouldProbeImageUrl,F as shouldUseApiResDirectly,je as string,v as stringToNumber,y as stripHtmlTags,Me as timeRange,Ie as trackAdClick,Le as trackAdImpression,Re as trackAdvertising,ze as trackAppPageView,Be as trackKeywordClick,Ve as trackNavigation,He as trackPageClick,Ue as trackPageLifecycle,We as trackRecommendListClick,Ge as trackVideoEvent,qe as uint8ArrayToBase64,Je as uint8ArrayToNumberArray,q as unfollowUser,b as updateUrlParams,Xe as uploadFile,be as uploadToS3WithPresignedUrl,Ze as useRouter,ye as validatePasswordPair,Ne as withInspectorMeta};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@funhub/platform",
3
3
  "type": "module",
4
- "version": "0.2.27",
4
+ "version": "0.2.29",
5
5
  "private": false,
6
6
  "sideEffects": [
7
7
  "**/*.css"
package/theme.css CHANGED
@@ -222,3 +222,50 @@
222
222
  --sidebar-border: oklch(1 0 0 / 10%);
223
223
  --sidebar-ring: var(--color-brand-primary);
224
224
  }
225
+
226
+ .no-vw-x-16 {
227
+ /* px-to-viewport-ignore-next */
228
+ padding-left: 16px;
229
+ /* px-to-viewport-ignore-next */
230
+ padding-right: 16px;
231
+ }
232
+
233
+ .no-vw-pl-16 {
234
+ /* px-to-viewport-ignore-next */
235
+ padding-left: 16px;
236
+ }
237
+
238
+ .no-vw-pr-16 {
239
+ /* px-to-viewport-ignore-next */
240
+ padding-right: 16px;
241
+ }
242
+
243
+ .no-vw-pt-16 {
244
+ /* px-to-viewport-ignore-next */
245
+ padding-top: 16px;
246
+ }
247
+
248
+ .no-vw-pb-16 {
249
+ /* px-to-viewport-ignore-next */
250
+ padding-bottom: 16px;
251
+ }
252
+
253
+ .no-vw-ml-16 {
254
+ /* px-to-viewport-ignore-next */
255
+ margin-left: 16px;
256
+ }
257
+
258
+ .no-vw-mr-16 {
259
+ /* px-to-viewport-ignore-next */
260
+ margin-right: 16px;
261
+ }
262
+
263
+ .no-vw-mt-16 {
264
+ /* px-to-viewport-ignore-next */
265
+ margin-top: 16px;
266
+ }
267
+
268
+ .no-vw-mb-16 {
269
+ /* px-to-viewport-ignore-next */
270
+ margin-bottom: 16px;
271
+ }
@@ -1,12 +0,0 @@
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 };
@@ -1,2 +0,0 @@
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};
@@ -1,2 +0,0 @@
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};
@@ -1,2 +0,0 @@
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,2 +0,0 @@
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,12 +0,0 @@
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 };
@@ -1,2 +0,0 @@
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};
@@ -1,2 +0,0 @@
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};
@@ -1,2 +0,0 @@
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};