@funhub/platform 0.2.30 → 0.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/biz.d.mts +4 -6
- package/dist/biz.mjs +1 -1
- package/dist/cli/init/create-client.mjs +1 -1
- package/dist/cli/init/shared/constants.mjs +1 -1
- package/dist/cli/init/shared/create-project.mjs +1 -1
- package/dist/cli/init/shared/prompts.mjs +1 -1
- package/dist/cli/init/shared/template.mjs +1 -1
- package/dist/cli.mjs +2 -2
- package/dist/components/biz/basics/fullscreen-feed/runtime/client.mjs +1 -1
- package/dist/components/biz/basics/fullscreen-feed/runtime/video-slide.mjs +1 -1
- package/dist/components/biz/basics/logo/variants/basic-logo/runtime/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/ad-match.d.mts +7 -0
- package/dist/components/biz/business/advertisement/ad-match.mjs +1 -1
- package/dist/components/biz/business/advertisement/popup-ad/client.mjs +2 -2
- package/dist/components/biz/business/advertisement/popup-ad/material.d.mts +3 -0
- package/dist/components/biz/business/advertisement/popup-ad/schema.d.mts +6 -0
- package/dist/components/biz/business/advertisement/popup-ad/schema.mjs +1 -1
- package/dist/components/biz/business/channel-list/client.mjs +1 -1
- package/dist/components/biz/business/detail/shared/detail-operate.mjs +1 -1
- package/dist/components/biz/business/detail/shared/registry.d.mts +7 -2
- package/dist/components/biz/business/detail/shared/runtime-context-provider.mjs +1 -1
- package/dist/components/biz/business/detail/shared/use-video-detail-webview-bridge.mjs +1 -1
- package/dist/components/biz/business/detail/shared/video-hero.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-actions/client.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-info/client.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/client.d.mts +10 -2
- package/dist/components/biz/business/detail/video-detail-recommend/client.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/index.d.mts +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/material.d.mts +7 -2
- package/dist/components/biz/business/detail/video-detail-recommend/schema.d.mts +7 -2
- package/dist/components/biz/business/detail/video-detail-recommend/schema.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/server.d.mts +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/server.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/shared.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/utils.mjs +1 -1
- package/dist/components/biz/business/header-search/header-avatar-logo-search/client.mjs +1 -1
- package/dist/components/biz/business/home-recommend/home-recommend-grid/client.d.mts +1 -1
- package/dist/components/biz/business/home-recommend/home-recommend-waterfall/client.d.mts +3 -1
- package/dist/components/biz/business/home-recommend/home-recommend-waterfall/client.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-preview.mjs +1 -1
- package/dist/components/biz/business/image-text-recommend/client.mjs +1 -1
- package/dist/components/biz/business/index.d.mts +3 -5
- package/dist/components/biz/business/large-feature-grid/card-item.mjs +1 -1
- package/dist/components/biz/business/large-feature-grid/client.mjs +1 -1
- package/dist/components/biz/business/large-feature-grid/schema.mjs +1 -1
- package/dist/components/biz/business/marquee/client.mjs +1 -1
- package/dist/components/biz/business/profile/index.d.mts +3 -5
- package/dist/components/biz/business/profile/profile-header/client.d.mts +2 -4
- package/dist/components/biz/business/profile/profile-header/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/index.d.mts +2 -4
- package/dist/components/biz/business/profile/profile-header/material.d.mts +6 -48
- package/dist/components/biz/business/profile/profile-header/material.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/schema.d.mts +5 -15
- package/dist/components/biz/business/profile/profile-header/schema.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/user-profile-avatar.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/user-profile-cover-background.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/client.d.mts +0 -2
- package/dist/components/biz/business/profile/profile-main/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/index.d.mts +2 -2
- package/dist/components/biz/business/profile/profile-main/material.d.mts +0 -3
- package/dist/components/biz/business/profile/profile-main/schema.d.mts +3 -9
- package/dist/components/biz/business/profile/profile-main/schema.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/shell.d.mts +0 -7
- package/dist/components/biz/business/profile/profile-main/shell.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.d.mts +1 -5
- package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/video-waterfall.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.d.mts +1 -5
- package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.d.mts +1 -5
- package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/publish-tab/client.d.mts +0 -3
- package/dist/components/biz/business/profile/profile-main/tabs/publish-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/variants.d.mts +3 -28
- package/dist/components/biz/business/profile/profile-main/variants.mjs +1 -1
- package/dist/components/biz/business/search-history/client.mjs +1 -1
- package/dist/components/biz/business/search-input/client.mjs +1 -1
- package/dist/components/biz/business/shortcut-grid/client.mjs +1 -1
- package/dist/components/biz/business/tab-bar/client.mjs +1 -1
- package/dist/components/biz/business/text-recommend/client.mjs +1 -1
- package/dist/components/common/analytics-init/page-lifecycle-tracker.mjs +1 -1
- package/dist/components/common/background-preview-modal/background-preview-modal.mjs +1 -1
- package/dist/components/common/list/waterfall-recommend/waterfall-recommend.mjs +1 -1
- package/dist/components/common/popup-video/index.mjs +1 -1
- package/dist/components/common/series-episodes/index.mjs +1 -1
- package/dist/components/common/tab-bar/index.mjs +1 -1
- package/dist/components/common/top-nav-bar/client.mjs +1 -1
- package/dist/components/common/video-player/style.module.mjs +4 -0
- package/dist/components/common/video-player/video-blind-ad-overlay.mjs +1 -1
- package/dist/components/common/video-player/video-preroll-ad-overlay.mjs +1 -1
- package/dist/components/pages/collection-add/page.mjs +1 -1
- package/dist/components/pages/edit/page.mjs +1 -1
- package/dist/components/pages/fullscreen-feed/page.mjs +1 -1
- package/dist/components/pages/post-detail/post-detail-client.mjs +1 -1
- package/dist/components/pages/profile/layout.d.mts +0 -2
- package/dist/components/pages/profile/page.mjs +1 -1
- package/dist/components/pages/search/hot-recommend.mjs +1 -1
- package/dist/components/pages/search/hot-search.mjs +1 -1
- package/dist/components/pages/search/page-client.mjs +1 -1
- package/dist/components/pages/search/search-result/search-all.mjs +1 -1
- package/dist/components/pages/search/search-result/search-video-info.mjs +1 -1
- package/dist/components/pages/search/top-header.mjs +1 -1
- package/dist/components/pages/search-result/page-client.mjs +1 -1
- package/dist/components/pages/search-result/search-all.mjs +1 -1
- package/dist/components/pages/search-result/search-tab.mjs +1 -1
- package/dist/components/pages/search-result/search-user.mjs +1 -1
- package/dist/components/pages/search-result/top-header.mjs +1 -1
- package/dist/components/pages/settings/_components/settings.mjs +1 -1
- package/dist/components/pages/video-detail/video-detail-client.mjs +1 -1
- package/dist/components/pages/video-list/video-list-client.mjs +1 -1
- package/dist/components/pages/video-list/video-list-recommend-item.mjs +1 -1
- package/dist/components/pages/video-list/video-list-skeleton.mjs +1 -1
- package/dist/components/ui/badge.d.mts +1 -1
- package/dist/components/ui/button.d.mts +2 -2
- package/dist/components/ui/empty.d.mts +1 -1
- package/dist/components/ui/item.d.mts +1 -1
- package/dist/hooks/use-content-operate.mjs +1 -1
- package/dist/i18n/locales/en.mjs +1 -1
- package/dist/i18n/locales/zh-CN.mjs +1 -1
- package/dist/materials.d.mts +2 -2
- package/dist/materials.mjs +1 -1
- package/dist/service/advertisement.d.mts +4 -0
- package/dist/service/advertisement.mjs +1 -1
- package/dist/utils/common.mjs +1 -1
- package/dist/utils/http.mjs +1 -1
- package/dist/utils/tracking.d.mts +3 -11
- package/dist/utils/tracking.mjs +1 -1
- package/dist/utils/use-compatible-router.mjs +1 -1
- package/dist/utils.d.mts +2 -2
- package/dist/utils.mjs +1 -1
- package/package.json +1 -1
- package/theme.css +48 -1
- package/dist/components/biz/business/profile/profile-header/my-client.d.mts +0 -12
- package/dist/components/biz/business/profile/profile-header/my-client.mjs +0 -2
- package/dist/components/biz/business/profile/profile-header/my-profile-actions.mjs +0 -2
- package/dist/components/biz/business/profile/profile-header/my-profile-header.mjs +0 -2
- package/dist/components/biz/business/profile/profile-header/shared.mjs +0 -2
- package/dist/components/biz/business/profile/profile-header/visitor-client.d.mts +0 -12
- package/dist/components/biz/business/profile/profile-header/visitor-client.mjs +0 -2
- package/dist/components/biz/business/profile/profile-header/visitor-profile-actions.mjs +0 -2
- package/dist/components/biz/business/profile/profile-header/visitor-profile-header.mjs +0 -2
- package/dist/components/biz/business/profile/profile-main/tabs/editor-preview-waterfall.mjs +0 -2
|
@@ -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};
|
package/dist/utils/common.mjs
CHANGED
|
@@ -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)}
|
|
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};
|
package/dist/utils/http.mjs
CHANGED
|
@@ -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()
|
|
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};
|
|
@@ -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
|
|
223
|
+
export { AdClickPayload, AdImpressionPayload, AdvertisingPayload, AppPageViewPayload, ClickPosition, KeywordClickPayload, NavigationPayload, PageLifecyclePayload, RecommendListClickPayload, VideoEventPayload, trackAdClick, trackAdImpression, trackAdvertising, trackAppPageView, trackKeywordClick, trackNavigation, trackPageClick, trackPageLifecycle, trackRecommendListClick, trackVideoEvent };
|
package/dist/utils/tracking.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";
|
|
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{
|
|
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
|
|
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,
|
|
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
|
|
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
package/theme.css
CHANGED
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
--gradient-action-button: linear-gradient(90deg, #9756e3 0%, #6c43ee 100%);
|
|
53
53
|
--gradient-card-mask-strong: linear-gradient(180deg, rgba(8, 2, 17, 0) 28.624%, rgba(8, 2, 17, 0.8) 77.695%);
|
|
54
54
|
--gradient-card-mask-medium: linear-gradient(180deg, rgba(8, 2, 17, 0) 46.087%, rgba(8, 2, 17, 0.7) 83.152%);
|
|
55
|
-
--gradient-card-mask-light: linear-gradient(180deg, rgba(8, 2, 17, 0)
|
|
55
|
+
--gradient-card-mask-light: linear-gradient(180deg, rgba(8, 2, 17, 0.00) 51.02%, rgba(8, 2, 17, 0.20) 100%);
|
|
56
56
|
--gradient-detail-hero-blur: linear-gradient(180deg, rgba(8, 2, 17, 0) 41.303%, rgba(8, 2, 17, 0.7) 61.091%);
|
|
57
57
|
--gradient-search-panel-fade: linear-gradient(180deg, rgba(6, 3, 21, 0.9) 19.905%, rgba(6, 3, 21, 0) 100%);
|
|
58
58
|
--gradient-search-hot-card: linear-gradient(180deg, rgba(151, 86, 227, 0.4) 21.144%, rgba(151, 86, 227, 0) 87.065%);
|
|
@@ -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};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
"use client";import{WaterfallRecommend as e}from"../../../../../common/list/waterfall-recommend/waterfall-recommend.mjs";import{jsx as t}from"react/jsx-runtime";const n=[`/truss/20260227/69a136457d10f.jpgxxx`,`/md-204/uploads/default/other/2024-08-26/14664d2c31e61c201a29cd4abba267c5.jpg`,`/md-204/resource/8c/8cb28f46831558fbeb2f34b2076c3b4e.jpg`,`/md-204/resource/24/24ef267eef2c35b5e4cf12dac8b55c14.jpg`,`/md-204/resource/b4/b410ccdcd86936455b9460a9152aaa47.jpg`,`/md-204/resource/2b/2b43375f2248c1a012847d4507fd21a3.jpg`];function r(e){let t={video:`视频`,novel:`小说`,comic:`漫画`,post:`帖子`};return n.map((n,r)=>({key:`editor-preview-${e}-${r}`,sourceIndex:r,href:`#`,cardKind:r%3==1?`short`:`tall`,coverUrl:n,title:`${t[e]}内容标题 ${r+1}`,heatText:`${(r+1)*8.6}k`,episodeText:e===`video`?`${r+8}集`:void 0,score:8+r%3*.3}))}function i(e){let t=[],n=[],r=0,i=0;return e.forEach(e=>{let a=(e.cardKind===`short`?142:216)+16;if(r<=i){t.push(e),r+=a;return}n.push(e),i+=a}),{left:t,right:n}}function a({contentType:n}){return t(e,{title:``,columns:i(r(n)),sectionClassName:`w-full`,headerClassName:`hidden`,containerClassName:`relative flex w-full gap-4`})}export{a as EditorPreviewWaterfall};
|