{"version":3,"sources":["webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/@svgr+webpack@5.5.0/node_modules/@svgr/webpack/common/temp/split__lemon8_web_seo/node_modules/.pnpm/@lemon8+design@0.0.8-alpha.4_lottie-web@5.12.2_react-dom@18.2.0_react@18.2.0/node_modules/@lemon8/design/lib/icons/icon_assets/arrow_triangle_down_fill.svg","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/@svgr+webpack@5.5.0/node_modules/@svgr/webpack/common/temp/split__lemon8_web_seo/node_modules/.pnpm/@lemon8+design@0.0.8-alpha.4_lottie-web@5.12.2_react-dom@18.2.0_react@18.2.0/node_modules/@lemon8/design/lib/icons/icon_assets/logo_twitter.svg","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/related-post-carousel-show.ts","webpack://@lemon8/web-seo/./client/components/article-card/index.tsx","webpack://@lemon8/web-seo/./client/components/article-recommend-card/index.tsx","webpack://@lemon8/web-seo/./client/components/avatar/index.tsx","webpack://@lemon8/web-seo/./client/components/divider-container/index.tsx","webpack://@lemon8/web-seo/./client/components/drawer/index.tsx","webpack://@lemon8/web-seo/./client/components/masonry/index.tsx","webpack://@lemon8/web-seo/./client/components/see-more-banner/index.tsx","webpack://@lemon8/web-seo/./client/components/user-card/index.tsx","webpack://@lemon8/web-seo/./client/components/view-tracker/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/shared/atoms/current-user.ts","webpack://@lemon8/web-seo/./client/utils/fix-body.ts","webpack://@lemon8/web-seo/./client/utils/format/time-ago-formatter.ts","webpack://@lemon8/web-seo/./client/utils/use-route-loader.ts","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseClamp.js","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseExtremum.js","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGt.js","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseLt.js","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/clamp.js","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/max.js","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/min.js","webpack://@lemon8/web-seo/./client/utils/json-ld/person.tsx","webpack://@lemon8/web-seo/./client/utils/json-ld/profile.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/head/json-ld.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/shared/use-user-desc.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name/head/og.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/head/twitter.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/head/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/shared/atoms/current-user-posts.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name/body/post/privacy/index.tsx","webpack://@lemon8/web-seo/./client/utils/libra/user-post-masonry.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name/body/post/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/body/campaign/index.tsx","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/@svgr+webpack@5.5.0/node_modules/@svgr/webpack/common/temp/split__lemon8_web_seo/node_modules/.pnpm/@lemon8+design@0.0.8-alpha.4_lottie-web@5.12.2_react-dom@18.2.0_react@18.2.0/node_modules/@lemon8/design/lib/icons/icon_assets/link_fill.svg","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/@svgr+webpack@5.5.0/node_modules/@svgr/webpack/common/temp/split__lemon8_web_seo/node_modules/.pnpm/@lemon8+design@0.0.8-alpha.4_lottie-web@5.12.2_react-dom@18.2.0_react@18.2.0/node_modules/@lemon8/design/lib/icons/icon_assets/logo_instagram.svg","webpack://@lemon8/web-seo/../common/temp/split__lemon8_web_seo/node_modules/.pnpm/@svgr+webpack@5.5.0/node_modules/@svgr/webpack/common/temp/split__lemon8_web_seo/node_modules/.pnpm/@lemon8+design@0.0.8-alpha.4_lottie-web@5.12.2_react-dom@18.2.0_react@18.2.0/node_modules/@lemon8/design/lib/icons/icon_assets/logo_youtube.svg","webpack://@lemon8/web-seo/./client/components/user-description/user-link.tsx","webpack://@lemon8/web-seo/./client/components/simple-toast/index.tsx","webpack://@lemon8/web-seo/./client/components/user-description/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/body/description/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/shared/atoms/current-user-related-user.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name/body/related-user/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/body/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name/__remix_browser_route__route.tsx"],"names":["_path","_extends","target","i","source","key","SvgArrowTriangleDownFill","props","SvgLogoTwitter","$RelatedPostCarouselShow","atom","RELATED_ARTICLE_CAROUSEL_HIDE_RANK","ArticleCard","article","imageList","articleClass","title","groupId","shortContent","largeImage","author","canonicalUri","articleLikes","imprId","isLCP","rank","t","useTranslation","region","useAtomValue","$Locale","formatNum","useNumFormatter","active","usePageActive","isMobileUser","$IsMobileUser","currentPageModule","useScopedAtomValue","$CurrentPageModule","prefix","$CurrentPositionPrefix","setRelatedPostCarouselShow","useSetAtom","posterImageList","useMemo","temp","length","slice","articleHref","concat","handleClickArticle","useReflowClick","clickEvent","_","bundle","_objectSpread","current_page_module","current_position","ClickPosition","page_click_id","reflowBehavior","schemaOption","pageType","ArticleClass","authorId","userId","ampExtra","enter_position","authorHref","split","handleClickAuthor","defaultBehavior","e","stopPropagation","articleCardRef","useViewTracking","onView","useCallback","window","Tea","group_id","media_id","article_class","impr_id","isVideo","jsxs","Link","ref","className","cls","multi_images","onClick","to","children","map","image","index","jsx","Image","src","url","fetchpriority","PlayIcon","dangerouslySetInnerHTML","buildInnerHtml","DivisibleStack","wrapper","divider","avatar","alt","nickName","Heart","num","replace","ArticleRecommendCard","cardObservedRef","aspectRatio","_clamp","width","height","coverUrl","video","style","paddingBottom","loading","onContextMenu","preventDefault","PlayFill","Boolean","Avatar","DividerContainer","dividerCls","wrapperCls","content","Children","filter","flatMap","child","Fragment","PREFIX","Drawer","React","constructor","arguments","toggleBodyFixed","isOpen","savedTop","scrollY","FixBodyUtil","onClose","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","direction","maskClosable","showMask","defaultProps","showBack","parseToNumber","val","Number","useContainerRef","setCurrentRef","useState","setRef","instance","Masonry","forwardRef","columnCount","childrenArray","container","setContainer","containerHeight","setContainerHeight","Math","floor","postLayoutQueue","useRef","useImperativeHandle","postLayout","func","current","push","heightList","setHeightList","_range","orderList","setOrderList","o","doLayout","columnHeights","Array","fill","columnItems","childOrderList","item","min","_min","minIndex","findIndex","v","getComputedStyle","max","join","forEach","useEffect","requestAnimationFrame","observer","ResizeObserver","observe","disconnect","maxHeight","_max","maxHeightIndex","indexOf","maxHeightCount","left","top","r","bottom","lastIndexOf","order","marginBottom","SeeMoreBanner","onClickSeeMore","Loading","variant","ChevronDownIcon","UserCard","_ref","user","description","fansCount","publishCount","linkName","userHref","handleUserClick","ViewTracker","Component","wrapperRef","trackEvent","visible","once","onChange","onHide","unobserve","options","DEFAULT_OPTIONS","ViewObserver","CurrentUserId","get","traffic","$PageLevelTraffic","EPageType","includes","Promise","resolve","pendingQueue","$CurrentUserLinkName","userLinkName","$CurrentUser","currentUserLinkName","$UserDetailV2","$CurrentAvailableUserOrNull","UserDetailUtil","$CurrentUserAsAvailable","eventList","BODY_FIXING_CLASS","preventDefaultHandler","event","lastScrollY","fix","document","body","addEventListener","passive","restore","removeEventListener","partialFix","classList","contains","add","partialRestore","remove","scrollTo","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_DAY","ONE_WEEK","EIGHT_DAY","formatTimeAgo","time","now","Date","after","seconds","minutes","hours","days","weeks","timeDayjs","dayjs","year","format","useTimeAgoFormatter","getAtom","res","atomKey","args","decodeArgs","a","decodeURIComponent","atomFamily","atomFamilies","console","error","atoms","useRouteLoader","method","params","store","useStore","fetcher","useFetcher","load","searchParams","URLSearchParams","set","Object","entries","value","String","location","pathname","toString","data","_ref2","startsWith","atomToSet","state","baseClamp","number","lower","upper","module","isSymbol","baseExtremum","array","iteratee","comparator","computed","result","baseGt","other","baseLt","toNumber","clamp","identity","PersonJSONLD","name","uniqueName","desc","likeCount","followCount","postCount","type","__html","JSON","stringify","alternateName","mainEntityOfPage","identifier","propertyID","contentUrl","interactionStatistic","interactionType","userInteractionCount","ProfileJSONLD","favoriteCount","jsonLD","mainEntity","JsonLD","dugCount","favoredCount","followingCount","followerCount","useUserDesc","OG","ogUrl","property","Twitter","UserBaseHead","canonicalUrl","noIndex","privacyStatus","EPrivacyStatus","keywords","fb_appid","rel","href","UserHead","Suspense","$CurrentUserPosts","$UserPost","$UserPostMasonry","parameters","$ABTest","_get","$HitUserPostMasonry","config","UserPostSection","masonryRef","isFirstComputedRef","items","hasMore","maxBeHotTime","hitUserPostMasonry","bannerShow","setBannerShow","loader","user_id","max_behot_time","count","$UserPostLoadmore","_a","observedRef","ModuleType","handleSeeMore","UserPrivacyContent","id","ScopedProvider","atomsWithHydration","ClickPositionPrefix","isComputed","pageModule","clickPosition","SeeMore","UserCampaignSection","sendTrackingEvent","CampaignCarousel","_path2","SvgLinkFill","_path3","SvgLogoInstagram","SvgLogoYoutube","UserLinks","thirdLinks","isMultipleLink","isMobile","$UserAgent","isPC","pressIndex","setPressIndex","showActionsheet","setShowActionsheet","actionSheetItemTouchStart","actionSheetItemTouchEnd","closeLinkModal","handleLinkClick","Icon","platform","InsIcon","TwitterIcon","YoutubeIcon","cs","ArrowTriangleDownFill","open","onTouchStart","onTouchEnd","SimpleToast","show","setShow","hydrated","setHydrated","timer","newTimer","setTimeout","clearTimeout","hide","UserDescription","gender","ageGroup","locationValue","useLocation","isRealUser","formatNumber","toast","setToast","followingHref","followerHref","activeAction","enterPosition","onClickFollowingInner","onClickFollowing","onClickFollowerInner","onClickFollower","genderValue","EUserGender","ageValue","label","showLink","position","UserDescriptionSection","NotFound","$CurrentUserRelatedUser","$UserRelatedUser","UserRelatedSection","users","SectionTitle","StepScroll","UserBody","fallback","UserBodySkeleton","links","shouldRevalidate","defaultShouldRevalidate","UserPage"],"mappings":"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","file":"routes/$user_link_name-3482a93d0c872064fb45.js","sourcesContent":["var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgArrowTriangleDownFill(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.563 16.014a.5.5 0 00.793.002l4.409-5.71a.5.5 0 00-.396-.806H7.6a.5.5 0 00-.398.803l4.362 5.711z\",\n fill: \"currentColor\"\n })));\n}\nexport default SvgArrowTriangleDownFill;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLogoTwitter(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 25\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.5 6.512a8.641 8.641 0 01-2.474.676 4.308 4.308 0 001.894-2.374 8.649 8.649 0 01-2.736 1.041A4.31 4.31 0 0016.039 4.5c-2.38 0-4.308 1.922-4.308 4.292 0 .336.038.664.111.978a12.247 12.247 0 01-8.88-4.484 4.285 4.285 0 001.333 5.73 4.304 4.304 0 01-1.951-.537v.054A4.298 4.298 0 005.8 14.74a4.33 4.33 0 01-1.946.073 4.31 4.31 0 004.024 2.98 8.666 8.666 0 01-5.35 1.838c-.348 0-.69-.02-1.028-.06A12.23 12.23 0 008.104 21.5c7.925 0 12.259-6.54 12.259-12.21 0-.187-.005-.372-.013-.556a8.736 8.736 0 002.15-2.222z\",\n fill: \"currentColor\"\n })));\n}\nexport default SvgLogoTwitter;","import { atom } from 'jotai';\n\nexport const $RelatedPostCarouselShow = atom(false);\n","import { useTranslation } from 'react-i18next';\nimport { Link } from '@remix-run/react';\nimport { useCallback, useMemo } from 'react';\nimport cls from 'classnames';\nimport { Article, ArticleClass } from 'shared/models/legacy';\nimport { Image } from '~/components/image';\nimport Heart from '@lemon8/design/lib/icons/icon_assets/heart.svg';\nimport PlayIcon from '@lemon8/design/lib/icons/icon_assets/play_fill.svg';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { useNumFormatter } from '~/utils/format/num-formatter';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ClickPosition } from '~/utils/click-position';\nimport { usePageActive } from '~/utils/active/use-page-active';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { $RelatedPostCarouselShow } from '@article/shared/atoms/related-post-carousel-show';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { buildInnerHtml } from '@lemon8/web-app-shared/util';\n\nimport './style.scss';\n\ninterface ArticleCardProps {\n article: Article;\n isLCP?: boolean;\n\n /**\n * starts from 0\n */\n rank: number;\n}\n\nconst RELATED_ARTICLE_CAROUSEL_HIDE_RANK = 9;\n\nexport const ArticleCard = (props: ArticleCardProps): JSX.Element => {\n const {\n article: {\n imageList,\n articleClass,\n title,\n groupId,\n shortContent,\n largeImage,\n author,\n canonicalUri,\n articleLikes,\n imprId,\n },\n isLCP = false,\n rank,\n } = props;\n const { t } = useTranslation();\n const { region } = useAtomValue($Locale);\n const formatNum = useNumFormatter();\n const active = usePageActive();\n const isMobileUser = useAtomValue($IsMobileUser);\n const currentPageModule = useScopedAtomValue($CurrentPageModule);\n const prefix = useScopedAtomValue($CurrentPositionPrefix);\n const setRelatedPostCarouselShow = useSetAtom($RelatedPostCarouselShow);\n\n const posterImageList = useMemo(() => {\n const temp = imageList.length ? [...imageList] : [largeImage];\n return temp.slice(0, temp.length < 3 ? 1 : 3);\n }, [largeImage, imageList]);\n\n const articleHref = useMemo(() => `${canonicalUri}?region=${region}`, [region]);\n\n const handleClickArticle = useReflowClick(\n {\n clickEvent: (_, bundle) => ({\n ...bundle,\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n page_click_id: groupId,\n rank,\n }),\n reflowBehavior: () => {\n active({\n schemaOption: {\n pageType: articleClass === ArticleClass.VIDEO ? 'video' : 'article',\n groupId,\n authorId: author.userId,\n },\n ampExtra: {\n enter_position: prefix + ClickPosition.related_post,\n },\n });\n },\n },\n [active, groupId, articleClass, author],\n );\n\n const authorHref = useMemo(() => `/${canonicalUri.split('/')[1]}?region=${region}`, [region]);\n\n const handleClickAuthor = useReflowClick(\n {\n clickEvent: (_, bundle) => ({\n ...bundle,\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n page_click_id: groupId,\n rank,\n }),\n reflowBehavior: () => {\n active({\n schemaOption: {\n pageType: articleClass === ArticleClass.VIDEO ? 'video' : 'article',\n groupId,\n authorId: author.userId,\n },\n ampExtra: {\n enter_position: prefix + ClickPosition.related_post,\n },\n });\n },\n defaultBehavior: (e) => {\n e?.stopPropagation();\n },\n },\n [active, groupId, articleClass, author],\n );\n\n const articleCardRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n rank,\n });\n }\n\n window.Tea('wap_related_post_show', {\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n group_id: groupId,\n media_id: author.userId,\n article_class: articleClass,\n impr_id: imprId,\n rank,\n });\n if (rank >= RELATED_ARTICLE_CAROUSEL_HIDE_RANK) {\n setRelatedPostCarouselShow(false);\n }\n }, [isMobileUser]),\n });\n\n const isVideo = articleClass === 'Video';\n\n return (\n 1,\n })}\n onClick={handleClickArticle}\n to={articleHref}\n >\n
\n
\n {posterImageList.map((image, index) => (\n
\n {isLCP ? : }\n
\n ))}\n {isVideo && (\n
\n \n
\n )}\n
\n
\n
\n
\n
\n
\n \n \n \n {author.nickName}\n

{author.nickName}

\n \n
\n
\n \n

{t('like_count_plural', { num: articleLikes }).replace('%d', formatNum(articleLikes))}

\n
\n
\n \n );\n};\n","import { SyntheticEvent, useCallback, useMemo } from 'react';\nimport cls from 'classnames';\nimport PlayFill from 'icon/play_fill.svg';\nimport Heart from 'icon/heart.svg';\nimport _clamp from 'lodash/clamp';\nimport { Article, ArticleClass } from 'shared/models/legacy';\nimport { useNumFormatter } from '~/utils/format';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { buildInnerHtml } from '@lemon8/web-app-shared/util';\nimport { ClickPosition } from '~/utils/click-position';\nimport { ModuleType } from '~/utils/module-type';\nimport { useAtomValue } from 'jotai';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { usePageActive } from '~/utils/active/use-page-active';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\ninterface ArticleRecommendCardProps {\n pageModule: ModuleType;\n clickPosition: ClickPosition;\n article: Article;\n rank: number;\n}\n\nexport default function ArticleRecommendCard(props: ArticleRecommendCardProps): JSX.Element {\n const formatNum = useNumFormatter();\n\n const { article, rank } = props;\n\n const { imageList, articleClass, title, groupId, largeImage, author, articleLikes, imprId } = article;\n\n const isMobileUser = useAtomValue($IsMobileUser);\n\n const prefix = useScopedAtomValue($CurrentPositionPrefix);\n\n const currentPageModule = useScopedAtomValue($CurrentPageModule);\n\n const active = usePageActive();\n\n const cardObservedRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n rank,\n });\n }\n\n window.Tea('wap_related_post_show', {\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n group_id: groupId,\n media_id: author.userId,\n article_class: articleClass,\n impr_id: imprId,\n rank,\n });\n }, [isMobileUser]),\n });\n\n const handleClickArticle = useReflowClick(\n {\n clickEvent: (_, bundle) => ({\n ...bundle,\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.related_post,\n page_click_id: groupId,\n }),\n reflowBehavior: () => {\n active({\n schemaOption: {\n pageType: articleClass === ArticleClass.VIDEO ? 'video' : 'article',\n groupId,\n authorId: author.userId,\n },\n ampExtra: {\n enter_position: prefix + ClickPosition.related_post,\n },\n });\n },\n },\n [active, groupId, articleClass, author],\n );\n\n const aspectRatio = useMemo(() => {\n switch (articleClass) {\n case ArticleClass.GALLERY:\n return _clamp(imageList[0].width / imageList[0].height, 3 / 4, 4 / 3);\n case ArticleClass.ARTICLE:\n case ArticleClass.VIDEO:\n default:\n return _clamp(largeImage.width / largeImage.height, 3 / 4, 4 / 3);\n }\n }, [article]);\n\n const coverUrl = useMemo(() => {\n switch (article.articleClass) {\n case ArticleClass.GALLERY:\n return article.imageList[0].url;\n case ArticleClass.ARTICLE:\n case ArticleClass.VIDEO:\n default:\n return article.largeImage.url;\n }\n }, [article]);\n\n return (\n
\n \n e.preventDefault()} />\n {article.articleClass === ArticleClass.VIDEO && }\n
\n
\n
\n
\n e.preventDefault()}\n />\n {article.author.nickName}\n
\n \n {Boolean(articleLikes) && {formatNum(articleLikes)}}\n
\n
\n
\n
\n );\n}\n","import React, { FC } from 'react';\nimport { Image } from '~/components/image';\nimport cls from 'classnames';\n\nimport './style.scss';\n\ntype AvatarProps = React.DetailedHTMLProps, HTMLImageElement>;\n\nexport const Avatar: FC = (props) => {\n const { className } = props;\n\n return ;\n};\n","import { ReactNode, Children } from 'react';\n\ninterface DividerContainerProps {\n wrapperCls?: string;\n dividerCls?: string;\n children: ReactNode;\n}\n\n/**\n * 以组合的形式,在列表中插入间隔\n */\nexport default function DividerContainer(props: DividerContainerProps): JSX.Element {\n const { children, dividerCls, wrapperCls } = props;\n\n const content = Children.toArray(children)\n .filter(Boolean)\n .flatMap((child, index) => {\n if (index === 0) {\n return [child];\n }\n return [dividerCls &&
, child];\n });\n\n if (wrapperCls) {\n return
{content}
;\n } else {\n return <>{content};\n }\n}\n","import * as React from 'react';\nimport './style.scss';\nimport { FixBodyUtil } from '~/utils/fix-body';\n\nconst PREFIX = 'ui-mobile-drawer';\n\nexport interface DrawerProps {\n /** 方向,默认是'bottom-top' */\n direction?: string;\n /** 组件是否可见 */\n isOpen: boolean;\n /** 关闭回调 */\n onClose?: () => void;\n /** 面板的标题,若无title则不显示header区域,可以自定义组件 */\n title?: any;\n /** 内容 */\n children: any;\n /** 遮罩层是否可以点击关闭,默认true */\n maskClosable?: boolean;\n /** 容器类名 */\n className?: string;\n /** 是否显示遮罩层 */\n showMask?: boolean;\n}\n\nexport class Drawer extends React.Component {\n static defaultProps = {\n direction: 'bottom-top',\n onClose: () => {},\n showBack: true,\n title: '',\n maskClosable: true,\n className: '',\n showMask: true,\n };\n savedTop!: number;\n componentDidMount() {\n this.savedTop = window.scrollY;\n if (this.props.isOpen) {\n this.toggleBodyFixed(true);\n }\n }\n\n componentDidUpdate(prevProps: DrawerProps) {\n if (prevProps.isOpen !== this.props.isOpen) {\n this.toggleBodyFixed(this.props.isOpen);\n }\n }\n\n componentWillUnmount() {\n // fix: spa在drawer打开时进行路由跳转,不会触发消除body上的class\n if (this.props.isOpen) {\n this.toggleBodyFixed(false);\n }\n }\n\n toggleBodyFixed = (isOpen: boolean) => {\n if (isOpen) {\n this.savedTop = window.scrollY;\n }\n if (isOpen) {\n FixBodyUtil.partialFix();\n } else {\n FixBodyUtil.partialRestore();\n }\n };\n\n onClose = () => {\n const { onClose } = this.props;\n onClose!();\n this.toggleBodyFixed(false);\n };\n render() {\n const { title, children, direction, maskClosable, isOpen, className, showMask } = this.props;\n return (\n
\n {showMask &&
{}} />}\n
\n {title && (\n
\n

{title}

\n
\n )}\n
{children}
\n
\n
\n );\n }\n}\n","import React, {\n Children,\n useImperativeHandle,\n ForwardRefRenderFunction,\n PropsWithChildren,\n useCallback,\n useEffect,\n useState,\n useRef,\n forwardRef,\n ForwardedRef,\n} from 'react';\nimport _range from 'lodash/range';\nimport _min from 'lodash/min';\nimport _max from 'lodash/max';\nimport cls from 'classnames';\n\nimport './style.scss';\n\nexport const parseToNumber = (val: string) => {\n return Number(val.replace('px', ''));\n};\n\ninterface MasonryProps extends PropsWithChildren {\n className?: string;\n columnCount: number;\n}\n\nexport interface MasonryRef {\n postLayout: (func: () => void) => void;\n}\n\nfunction useContainerRef() {\n const [ref, setCurrentRef] = useState();\n\n const setRef = useCallback((instance: T) => {\n if (instance) {\n setCurrentRef(instance);\n }\n }, []);\n\n return [ref, setRef] as [T, React.RefCallback];\n}\n\nexport const Masonry = forwardRef((props: MasonryProps, ref: ForwardedRef) => {\n const { children, columnCount, className } = props;\n const childrenArray = Children.toArray(children);\n const [container, setContainer] = useContainerRef();\n const [containerHeight, setContainerHeight] = useState(\n `calc(${Math.floor(childrenArray.length / columnCount + 1)} * var(--masonry-item-default-height))`,\n );\n const postLayoutQueue = useRef<(() => void)[]>([]);\n\n useImperativeHandle(ref, () => {\n return {\n postLayout: (func) => {\n postLayoutQueue.current.push(func);\n },\n };\n });\n\n const [heightList, setHeightList] = useState(_range(childrenArray.length).map(() => 0));\n\n const [orderList, setOrderList] = useState(_range(childrenArray.length).map((o) => (o % columnCount) + 1));\n\n const doLayout = useCallback(() => {\n if (!container) {\n return;\n }\n\n const columnHeights: number[] = new Array(columnCount).fill(0);\n const columnItems: number[] = new Array(columnCount).fill(0);\n const childOrderList = [];\n for (let i = 0; i < container.children.length; i++) {\n const child = container.children.item(i);\n if (!child) {\n return;\n }\n const min = _min(columnHeights);\n const minIndex = columnHeights.findIndex((v) => v === min);\n childOrderList.push(minIndex + 1);\n const style = window.getComputedStyle(child);\n columnHeights[minIndex] += parseToNumber(style.height);\n columnItems[minIndex] += 1;\n }\n\n setHeightList(columnHeights);\n setOrderList(childOrderList);\n\n setContainerHeight(\n `max(${columnHeights\n .map(\n (_, index) =>\n `${columnHeights[index]}px + ${Math.max(\n columnItems[index] - 1,\n 0,\n )} * var(--masonry-items-horizontal-interval) + 2 * var(--masonry-padding-vertical)`,\n )\n .join(',')})`,\n );\n\n if (postLayoutQueue.current.length) {\n postLayoutQueue.current.forEach((func) => func());\n postLayoutQueue.current = [];\n }\n }, [container, columnCount]);\n\n useEffect(() => {\n if (!container) {\n return;\n }\n\n requestAnimationFrame(() => {\n doLayout();\n });\n\n const observer = new ResizeObserver(doLayout);\n observer.observe(container);\n\n for (let i = 0; i < container.children.length; i++) {\n const child = container.children.item(i);\n if (child) {\n observer.observe(child);\n }\n }\n\n return () => {\n observer.disconnect();\n };\n }, [container, doLayout, children]);\n\n const maxHeight = _max(heightList) || 0;\n const maxHeightIndex = heightList.indexOf(maxHeight) - 1;\n const maxHeightCount = orderList.filter((item) => item === maxHeightIndex + 1).length;\n\n return (\n \n {childrenArray.map((child, index) => (\n r === orderList[index]) === index,\n bottom: orderList.lastIndexOf(orderList[index]) === index,\n })}\n style={{\n order: orderList[index] || columnCount + 1,\n marginBottom:\n orderList.lastIndexOf(orderList[index]) === index\n ? `calc(${\n (maxHeight || 0) - heightList[orderList[index] - 1]\n }px + var(--masonry-padding-horizontal) * (${\n orderList.filter((item) => item === index + 1).length - maxHeightCount\n }))`\n : 0,\n }}\n >\n {child}\n
\n ))}\n
\n );\n});\n","import ChevronDownIcon from '@lemon8/design/lib/icons/icon_assets/chevron_down_fill.svg';\nimport { Loading } from '~/components/loading';\nimport { useTranslation } from 'react-i18next';\nimport cls from 'classnames';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\n\nimport './style.scss';\n\ninterface SeeMoreProps {\n loading?: boolean;\n onClickSeeMore?: () => void;\n}\n\nexport const SeeMoreBanner = (props: SeeMoreProps): JSX.Element => {\n const { onClickSeeMore, loading = false } = props;\n const { t } = useTranslation();\n const currentPageModule = useScopedAtomValue($CurrentPageModule);\n const prefix = useScopedAtomValue($CurrentPositionPrefix);\n\n const onClick = () => {\n window.Tea('wap_click', {\n current_page_module: currentPageModule,\n current_position: prefix + ClickPosition.see_more_button,\n });\n\n onClickSeeMore?.();\n };\n\n return (\n
\n {loading ? (\n
\n \n
\n ) : (\n <>\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
{t('see_more')}
\n
\n \n )}\n
\n );\n};\n","import { Link } from '@remix-run/react';\nimport { FC, useMemo } from 'react';\nimport { Image } from '~/components/image';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { useNumFormatter } from '~/utils/format/num-formatter';\nimport { useTranslation } from 'react-i18next';\nimport { User } from 'shared/models/legacy';\nimport { useAtomValue } from 'jotai';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ClickPosition } from '~/utils/click-position';\nimport { usePageActive } from '~/utils/active/use-page-active';\nimport useReflowClick from '~/utils/use-reflow-click';\n\nimport './style.scss';\n\ninterface UserCardProps {\n user: User;\n}\n\nexport const UserCard: FC = ({ user }) => {\n const formatNum = useNumFormatter();\n const { region } = useAtomValue($Locale);\n const { t } = useTranslation();\n const active = usePageActive();\n\n const { description, fansCount, publishCount, nickName, avatar, linkName, userId } = user;\n\n const userHref = useMemo(() => `/${linkName}?region=${region}`, []);\n\n const handleUserClick = useReflowClick(\n {\n clickEvent: (_, bundle) => ({\n ...bundle,\n current_position: ClickPosition.related_user,\n page_click_id: userId,\n }),\n reflowBehavior: () => {\n active({\n schemaOption: {\n pageType: 'user',\n userId,\n },\n ampExtra: {\n enter_position: ClickPosition.related_user,\n },\n });\n },\n },\n [active, userId],\n );\n\n return (\n \n
\n \n {nickName}\n

{description}

\n
\n \n
\n {formatNum(Number(fansCount) || 0)}\n {t('fans_count_number')}\n
\n
\n {formatNum(publishCount) || 0}\n {t('wap_seo_post_cnt')}\n
\n
\n \n );\n};\n","import React, { Component, PropsWithChildren } from 'react';\nimport ViewObserver, { ObserverOptionsType, DEFAULT_OPTIONS } from './view-observer';\n\ninterface ViewtrackerProps extends PropsWithChildren<{ onView: (visible: boolean) => void }> {\n once?: boolean;\n options?: ObserverOptionsType;\n onView: (visible: boolean) => void;\n onHide?: (visible: boolean) => void;\n onChange?: (visible: boolean) => void;\n}\n\nexport class ViewTracker extends Component {\n observer: ViewObserver | null = null;\n\n wrapperRef: React.RefObject = React.createRef();\n\n /**\n * Create the event listener on mount\n */\n componentDidMount(): void {\n const { options = DEFAULT_OPTIONS } = this.props;\n this.observer = ViewObserver.get(options);\n\n if (this.wrapperRef.current) {\n // Observe the container and track all child nodes\n this.observer.observe(this.wrapperRef.current, this.trackEvent);\n }\n }\n\n unobserve() {\n if (typeof this.wrapperRef.current !== 'undefined' && this.observer) {\n // Remove the observation listener\n if (this.wrapperRef.current) {\n this.observer.unobserve(this.wrapperRef.current);\n }\n }\n\n this.observer = null;\n }\n\n /**\n * Remove the observe listener on unmount\n */\n componentWillUnmount() {\n this.unobserve();\n }\n\n /**\n * Send the tracking event callback\n * @param {Boolean} visible - the visibility state of the element\n */\n trackEvent = (visible: boolean) => {\n const { once = true, onChange = () => {}, onView, onHide = () => {} } = this.props;\n onChange(visible);\n\n if (visible) {\n onView(visible);\n\n // Unobserve the element after firing\n if (once) {\n this.unobserve();\n }\n } else {\n onHide(visible);\n }\n };\n\n render() {\n const { children } = this.props;\n // Use React.Children.only to indicate that there\n // should only be a single child component\n return
{React.Children.only(children)}
;\n }\n}\n","import { atom } from 'jotai';\nimport { $PageLevelTraffic, $UserDetailV2 } from 'shared/atoms';\nimport { EPageType, IUserDetail, IUserPageTraffic, UserDetailUtil } from 'shared/models';\nimport { pendingQueue } from 'shared/utils/pending-queue';\n\nexport const CurrentUserId = atom((get) => {\n const traffic = get($PageLevelTraffic);\n const { pageType } = traffic;\n\n if (![EPageType.user, EPageType.user_follow, EPageType.user_topic].includes(pageType)) {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw new Promise((resolve) => pendingQueue.push(resolve));\n }\n\n const userTraffic = traffic as IUserPageTraffic;\n\n return userTraffic.userId || null;\n});\n\nexport const $CurrentUserLinkName = atom((get) => {\n const traffic = get($PageLevelTraffic);\n const { pageType } = traffic;\n\n if (![EPageType.user, EPageType.user_follow, EPageType.user_topic].includes(pageType)) {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw new Promise((resolve) => pendingQueue.push(resolve));\n }\n\n const userTraffic = traffic as IUserPageTraffic;\n\n return userTraffic.userLinkName;\n});\n\nexport const $CurrentUser = atom((get) => {\n const currentUserLinkName = get($CurrentUserLinkName);\n return get($UserDetailV2(currentUserLinkName));\n});\n\nexport const $CurrentAvailableUserOrNull = atom(async (get) => {\n const user = await get($CurrentUser);\n return UserDetailUtil.isUserAvailable(user) ? user : null;\n});\n\nexport const $CurrentUserAsAvailable = atom(async (get) => {\n const user = await get($CurrentUser);\n return user as IUserDetail;\n});\n","const eventList = ['touchmove', 'wheel'] as const;\n\nconst BODY_FIXING_CLASS = 'lemon8-body-fixing';\n\nconst preventDefaultHandler = (event: Event): void => {\n event.preventDefault();\n};\n\nexport const FixBodyUtil = {\n lastScrollY: 0,\n /** will disable scrolling for all elements of the page */\n fix: () => {\n eventList.forEach((event) => {\n document.body.addEventListener(event, preventDefaultHandler, { passive: false });\n });\n },\n restore: () => {\n eventList.forEach((event) => {\n document.body.removeEventListener(event, preventDefaultHandler);\n });\n },\n /** only fix body */\n partialFix: () => {\n if (document.body.classList.contains(BODY_FIXING_CLASS)) {\n return;\n }\n FixBodyUtil.lastScrollY = window.scrollY;\n document.body.style.top = `-${FixBodyUtil.lastScrollY}px`;\n document.body.classList.add(BODY_FIXING_CLASS);\n },\n partialRestore: () => {\n if (!document.body.classList.contains(BODY_FIXING_CLASS)) {\n return;\n }\n document.body.style.top = '';\n document.body.classList.remove(BODY_FIXING_CLASS);\n window.scrollTo({ top: FixBodyUtil.lastScrollY });\n },\n};\n","import { TFunction } from 'i18next';\nimport dayjs from 'dayjs';\nimport { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nconst ONE_SECOND = 1000;\nconst ONE_MINUTE = 60 * ONE_SECOND;\nconst ONE_HOUR = 60 * ONE_MINUTE;\nconst ONE_DAY = 24 * ONE_HOUR;\nconst ONE_WEEK = 7 * ONE_DAY;\nconst EIGHT_DAY = 8 * ONE_DAY;\n\n/**\n * time: seconds\n */\nconst formatTimeAgo = (time: number, t: TFunction): string => {\n const now = Date.now();\n const after = now - time * 1000;\n\n if (after < ONE_MINUTE) {\n const seconds = Math.floor(after / ONE_SECOND);\n return t('seconds_ago_plural', { num: seconds }).replace('%d', `${seconds}`);\n }\n if (after < ONE_HOUR) {\n const minutes = Math.floor(after / ONE_MINUTE);\n return t('minutes_ago_plural', { num: minutes }).replace('%d', `${minutes}`);\n }\n if (after < ONE_DAY) {\n const hours = Math.floor(after / ONE_HOUR);\n return t('hours_ago_plural', { num: hours }).replace('%d', `${hours}`);\n }\n if (after < ONE_WEEK) {\n const days = Math.floor(after / ONE_DAY);\n return t('days_ago_plural', { num: days }).replace('%d', `${days}`);\n }\n if (after < EIGHT_DAY) {\n const weeks = Math.floor(after / ONE_WEEK);\n return t('weeks_ago_plural', { num: weeks }).replace('%d', `${weeks}`);\n }\n\n const timeDayjs = dayjs(time * 1000);\n if (dayjs(now).year() === timeDayjs.year()) {\n return timeDayjs.format('M/D');\n }\n\n return timeDayjs.format('YYYY/M/D');\n};\n\ntype UseTimeAgoFormatter = () => (seconds: number) => string;\n\nexport const useTimeAgoFormatter: UseTimeAgoFormatter = () => {\n const { t } = useTranslation();\n\n return useCallback((seconds: number) => formatTimeAgo(seconds, t), [t]);\n};\n","import { useFetcher } from '@remix-run/react';\nimport { Atom, useStore, WritableAtom } from 'jotai';\nimport { useCallback, useEffect } from 'react';\n\ninterface AtomConfig {\n atoms?: Record>;\n atomFamilies?: Record WritableAtom>;\n}\n\ninterface IUseRouteLoaderResult {\n state: 'idle' | 'loading' | 'submitting';\n load: () => void;\n}\n\nconst getAtom = (atom: AtomConfig, key: string): Atom => {\n let res: Atom;\n if (key.includes('+')) {\n // for atom family\n const [atomKey, ...args] = key.split('+');\n const decodeArgs = args.map((a) => decodeURIComponent(a));\n const atomFamily = (atom.atomFamilies || {})[atomKey];\n\n if (!atomFamily) {\n console.error('atomFamily not found for key: %s', key);\n }\n\n res = atomFamily(...decodeArgs);\n } else {\n // for plain atom\n res = (atom.atoms || {})[key];\n }\n\n if (process.env.NODE_ENV === 'development' && !res) {\n throw new Error(`no such atom for key: ${key}`);\n }\n\n return res;\n};\n\nexport const useRouteLoader = (\n method: string,\n params: Record,\n atom: AtomConfig,\n): IUseRouteLoaderResult => {\n const store = useStore();\n const fetcher = useFetcher();\n\n const load = useCallback(() => {\n const searchParams = new URLSearchParams();\n searchParams.set('method', method);\n Object.entries(params).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n fetcher.load(`${location.pathname}?${searchParams.toString()}`);\n }, [method, params]);\n\n useEffect(() => {\n const { data } = fetcher;\n\n if (!data) {\n return;\n }\n\n Object.entries(data).forEach(([key, value]) => {\n if (!key.startsWith('$')) {\n return;\n }\n const atomToSet: any = getAtom(atom, key);\n store.set(atomToSet, value);\n });\n }, [fetcher.data]);\n\n return {\n state: fetcher.state,\n load,\n };\n};\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nmodule.exports = baseClamp;\n","var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseExtremum;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nmodule.exports = baseGt;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nmodule.exports = baseLt;\n","var baseClamp = require('./_baseClamp'),\n toNumber = require('./toNumber');\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nmodule.exports = clamp;\n","var baseExtremum = require('./_baseExtremum'),\n baseGt = require('./_baseGt'),\n identity = require('./identity');\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nmodule.exports = max;\n","var baseExtremum = require('./_baseExtremum'),\n baseLt = require('./_baseLt'),\n identity = require('./identity');\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nmodule.exports = min;\n","export const PersonJSONLD: (props: {\n name: string;\n uniqueName: string;\n url: string;\n desc: string;\n likeCount: number;\n followCount: number;\n postCount: number;\n avatar: string;\n}) => JSX.Element = (props) => {\n const { name, uniqueName, url, desc, likeCount, followCount, postCount, avatar } = props;\n return (\n \n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { WithContext, ProfilePage } from 'schema-dts';\n\nexport const ProfileJSONLD: (props: {\n name: string;\n desc: string;\n avatar: string;\n likeCount: number;\n followCount: number;\n favoriteCount: number;\n postCount: number;\n uniqueName: string;\n}) => JSX.Element = (props) => {\n const { name, desc, avatar, likeCount, followCount, favoriteCount, postCount, uniqueName } = props;\n\n const { t } = useTranslation();\n\n const description = t('user_helmet_description_1')\n .replace('%1$s', name || '')\n .replace('%2$s', desc || '');\n\n const jsonLD: WithContext = {\n '@context': 'https://schema.org',\n '@type': 'ProfilePage',\n mainEntity: {\n '@type': 'Person',\n name,\n alternateName: uniqueName,\n identifier: {\n '@type': 'PropertyValue',\n propertyID: 'Username',\n value: uniqueName,\n },\n interactionStatistic: [\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'LikeAction',\n },\n userInteractionCount: likeCount,\n },\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'FollowAction',\n },\n userInteractionCount: followCount,\n },\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'BookmarkAction',\n },\n userInteractionCount: favoriteCount,\n },\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'WriteAction',\n },\n userInteractionCount: postCount,\n },\n ],\n description,\n image: avatar,\n },\n };\n\n return ;\n};\n","import { useAtomValue } from 'jotai';\nimport { PersonJSONLD } from '~/utils/json-ld/person';\nimport { ProfileJSONLD } from '~/utils/json-ld/profile';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { $CurrentAvailableUserOrNull } from '@user/shared/atoms/current-user';\nimport { FC } from 'react';\n\nexport const JsonLD: FC = () => {\n const user = useAtomValue($CurrentAvailableUserOrNull);\n const { region } = useAtomValue($Locale);\n\n if (!user) {\n return null;\n }\n\n return (\n <>\n \n \n \n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentAvailableUserOrNull } from '@user/shared/atoms/current-user';\n\nexport const useUserDesc = (): string => {\n const { t } = useTranslation();\n const user = useAtomValue($CurrentAvailableUserOrNull);\n\n if (!user) {\n return '';\n }\n\n return t('user_helmet_description_1')\n .replace('%1$s', user.nickName || '')\n .replace('%2$s', user.description || '');\n};\n","import { useAtomValue } from 'jotai';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { useUserDesc } from '../shared/use-user-desc';\nimport { $CurrentAvailableUserOrNull } from '@user/shared/atoms/current-user';\nimport { FC } from 'react';\n\nexport const OG: FC = () => {\n const user = useAtomValue($CurrentAvailableUserOrNull);\n const description = useUserDesc();\n\n if (!user) {\n return null;\n }\n\n const { avatar, nickName, linkName } = user;\n const { region } = useAtomValue($Locale);\n const ogUrl = `/${linkName}?region=${region}`;\n\n return (\n <>\n \n \n \n \n \n \n \n );\n};\n","import { useAtomValue } from 'jotai';\nimport { useUserDesc } from '../shared/use-user-desc';\nimport { $CurrentAvailableUserOrNull } from '@user/shared/atoms/current-user';\nimport { FC } from 'react';\n\nexport const Twitter: FC = () => {\n const user = useAtomValue($CurrentAvailableUserOrNull);\n const description = useUserDesc();\n\n if (!user) {\n return null;\n }\n\n return (\n <>\n \n \n \n \n \n \n );\n};\n","import { FC, Suspense } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { useTranslation } from 'react-i18next';\nimport { JsonLD } from './json-ld';\nimport { OG } from './og';\nimport { useUserDesc } from '../shared/use-user-desc';\nimport { Twitter } from './twitter';\nimport { $PageLevelTraffic } from 'shared/atoms';\nimport { $CurrentAvailableUserOrNull } from '@user/shared/atoms/current-user';\nimport { EPrivacyStatus } from 'shared/models';\n\nconst UserBaseHead: FC = () => {\n const user = useAtomValue($CurrentAvailableUserOrNull);\n const { t } = useTranslation();\n const { canonicalUrl } = useAtomValue($PageLevelTraffic);\n const description = useUserDesc();\n\n if (!user) {\n return null;\n }\n\n const noIndex = user.privacyStatus >= EPrivacyStatus.PrivateUser;\n const keywords = t('keyword_default');\n const title = `${t('user_helmet_title')\n .replace('%1$s', user.nickName || '')\n .replace('%2$s', t('contribute'))}|Lemon8`;\n const fb_appid = 426786581540674;\n\n return (\n <>\n {title}\n \n \n {noIndex && }\n \n \n \n );\n};\n\nexport const UserHead: FC = () => {\n return (\n \n \n \n \n \n \n );\n};\n","import { atom } from 'jotai';\nimport { $UserPost } from 'shared/atoms';\nimport { $CurrentUserLinkName } from '@user/shared/atoms/current-user';\n\nexport const $CurrentUserPosts = atom((get) => {\n const currentUserLinkName = get($CurrentUserLinkName);\n return get($UserPost(currentUserLinkName));\n});\n","import { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport cls from 'classnames';\nimport './style.scss';\n\ninterface IPrivacyUserContent {\n className?: string;\n}\n\nconst UserPrivacyContent: FC = (props) => {\n const { className } = props;\n\n const { t } = useTranslation();\n\n return (\n
\n
\n
\n
{t('privateAccount_profile_header')}
\n
{t('privateAccount_profile_body')}
\n
\n
\n );\n};\n\nexport default UserPrivacyContent;\n","import { $ABTest, $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { Atom, atom } from 'jotai';\nimport _get from 'lodash/get';\nimport { $IsMobileUser } from '../is-mobile-user';\n\n/**\n * 0: control group\n * 1: Video article style align with Gallery\n */\nexport const $UserPostMasonry: Atom = atom((get) => {\n const { parameters } = get($ABTest);\n if (__BUILD_TYPE__ === 'local_dev') {\n return 1;\n }\n return _get(parameters, ['seo_web', 'lemon8.user_post_masonry'], 0);\n});\n\nexport const $HitUserPostMasonry: Atom = atom((get) => {\n const config = get($UserPostMasonry);\n const isMobileUser = get($IsMobileUser);\n return isMobileUser && config === 1;\n});\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { Article } from 'shared/models/legacy';\nimport { ArticleCard } from '~/components/article-card';\nimport { SeeMore } from '~/components/see-more';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { ModuleType } from '~/utils/module-type';\nimport { ScopedProvider } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { $CurrentUserPosts } from '@user/shared/atoms/current-user-posts';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { $CurrentAvailableUserOrNull, CurrentUserId } from '@user/shared/atoms/current-user';\nimport { EPrivacyStatus } from 'shared/models';\nimport UserPrivacyContent from '@user/body/post/privacy';\nimport { useRouteLoader } from '~/utils/use-route-loader';\nimport { $UserPostLoadmore } from 'shared/atoms/user/user-posts-loadmore';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { ClickPosition, ClickPositionPrefix } from '~/utils/click-position';\nimport cls from 'classnames';\n\nimport './style.scss';\nimport { Masonry, MasonryRef } from '~/components/masonry';\nimport ArticleRecommendCard from '~/components/article-recommend-card';\nimport { SeeMoreBanner } from '~/components/see-more-banner';\nimport { $HitUserPostMasonry } from '~/utils/libra/user-post-masonry';\n\nexport default function UserPostSection(): JSX.Element | null {\n const userId = useAtomValue(CurrentUserId);\n const user = useAtomValue($CurrentAvailableUserOrNull);\n const masonryRef = useRef(null);\n const isFirstComputedRef = useRef(false);\n const { items, hasMore, maxBeHotTime } = useAtomValue($CurrentUserPosts);\n const hitUserPostMasonry = useAtomValue($HitUserPostMasonry);\n const [bannerShow, setBannerShow] = useState(true);\n\n const loader = useRouteLoader(\n 'user-post-loadmore',\n {\n user_id: userId || '',\n max_behot_time: `${maxBeHotTime}`,\n count: 20,\n },\n {\n atomFamilies: {\n $UserPostLoadmore,\n },\n },\n );\n\n useEffect(() => {\n if (loader.state === 'idle') {\n masonryRef.current?.postLayout(() => {\n // change banner show state after masonry completes layout\n setBannerShow(true);\n if (!isFirstComputedRef.current) {\n isFirstComputedRef.current = true;\n }\n });\n } else {\n setBannerShow(false);\n }\n }, [loader.state]);\n\n const observedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_module_show', {\n current_page_module: ModuleType.related_article,\n });\n }, []),\n });\n\n const handleSeeMore = () => loader.load();\n\n if (user && user.privacyStatus === EPrivacyStatus.PrivateUser) {\n return ;\n }\n\n if (!items.length) {\n return null;\n }\n\n return (\n
\n \n {hitUserPostMasonry ? (\n <>\n
\n \n {items.map((item, index) => (\n \n ))}\n \n
\n {hasMore && (\n \n \n
\n )}\n \n ) : (\n <>\n \n {items.map((article: Article, rank: number) => (\n \n ))}\n \n {hasMore && }\n \n )}\n \n \n );\n}\n","import { useCallback } from 'react';\nimport { CampaignCarousel } from '~/components/campaign-carousel';\nimport { ViewTracker } from '~/components/view-tracker';\nimport { ClickPosition } from '~/utils/click-position';\nimport { ModuleType } from '~/utils/module-type';\n\nimport './style.scss';\n\nexport default function UserCampaignSection(): JSX.Element {\n const sendTrackingEvent = useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.activity_banner,\n current_position: ClickPosition.activity_banner,\n });\n }, []);\n\n return (\n \n
\n \n
\n
\n );\n}\n","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLinkFill(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.873 4.127a5.13 5.13 0 010 7.254l-2.26 2.259.033-.345c.06-.654.02-1.316-.122-1.96l-.015-.067 1.125-1.126a3.378 3.378 0 10-4.776-4.776l-3.539 3.538a3.378 3.378 0 001.793 5.713l.236.042-1.438 1.439-.076-.03a5.113 5.113 0 01-1.753-1.149 5.113 5.113 0 01-1.502-3.575v-.052A5.119 5.119 0 019.08 7.666l3.538-3.539a5.129 5.129 0 017.254 0z\",\n fill: \"currentColor\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.421 12.656a5.12 5.12 0 01-1.502 3.678l-3.538 3.539a5.13 5.13 0 01-7.254-7.254l2.26-2.259-.033.345c-.06.654-.02 1.316.122 1.96l.015.067-1.125 1.126a3.378 3.378 0 004.776 4.776l3.539-3.538a3.378 3.378 0 00-1.793-5.713l-.236-.043 1.438-1.438.076.03c.639.25 1.237.633 1.753 1.149a5.113 5.113 0 011.502 3.575z\",\n fill: \"currentColor\"\n })));\n}\nexport default SvgLinkFill;","var _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLogoInstagram(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 6.865a5.135 5.135 0 100 10.27 5.135 5.135 0 000-10.27zm0 8.47a3.334 3.334 0 110-6.669 3.334 3.334 0 010 6.668z\",\n fill: \"currentColor\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.538 6.662a1.2 1.2 0 11-2.4 0 1.2 1.2 0 012.4 0z\",\n fill: \"currentColor\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M21.94 7.877c-.049-1.064-.218-1.792-.465-2.427a4.91 4.91 0 00-1.153-1.77 4.91 4.91 0 00-1.772-1.155c-.635-.247-1.363-.416-2.428-.465C15.058 2.012 14.716 2 12 2s-3.057.012-4.123.06c-1.067.05-1.792.218-2.427.465a4.91 4.91 0 00-1.772 1.153A4.91 4.91 0 002.525 5.45c-.247.635-.416 1.363-.465 2.428C2.012 8.942 2 9.284 2 12s.012 3.056.06 4.123c.05 1.067.218 1.792.465 2.427a4.91 4.91 0 001.153 1.77c.5.51 1.105.904 1.772 1.155.635.247 1.363.416 2.428.465 1.064.048 1.407.06 4.123.06s3.056-.012 4.123-.06c1.067-.05 1.79-.218 2.426-.465a5.113 5.113 0 002.925-2.925c.247-.635.416-1.363.465-2.428.048-1.064.06-1.407.06-4.123s-.012-3.056-.06-4.122zm-1.8 8.164c-.045.975-.207 1.504-.344 1.857a3.315 3.315 0 01-1.898 1.898c-.353.137-.882.3-1.857.344-1.054.048-1.37.058-4.041.058-2.67 0-2.987-.01-4.041-.058-.975-.045-1.504-.207-1.857-.344a3.096 3.096 0 01-1.151-.748 3.096 3.096 0 01-.748-1.152c-.137-.352-.3-.882-.344-1.857C3.81 14.985 3.8 14.67 3.8 12s.01-2.987.059-4.042c.044-.974.207-1.504.344-1.856.16-.435.416-.829.748-1.152a3.096 3.096 0 011.151-.748c.353-.137.882-.3 1.857-.344 1.055-.048 1.37-.058 4.041-.058 2.67 0 2.986.01 4.041.058.975.044 1.504.207 1.857.344.435.16.828.416 1.151.748.332.323.588.717.748 1.152.137.352.3.882.345 1.856.047 1.055.058 1.371.058 4.041 0 2.67-.012 2.988-.06 4.043z\",\n fill: \"currentColor\"\n })));\n}\nexport default SvgLogoInstagram;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLogoYoutube(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 25\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.5 8.125a2.476 2.476 0 00-1.75-1.75C18.25 6 11.875 6 11.875 6S5.625 6 4 6.375c-.875.25-1.5.875-1.75 1.75C2 9.75 2 13 2 13s0 3.25.375 4.875c.25.875.875 1.5 1.75 1.75C5.625 20 12 20 12 20s6.25 0 7.875-.375c.875-.25 1.5-.875 1.75-1.75C22 16.25 22 13 22 13s0-3.25-.5-4.875zM10 16v-6l5.25 3L10 16z\",\n fill: \"currentColor\"\n })));\n}\nexport default SvgLogoYoutube;","import { useMemo, useState } from 'react';\nimport cs from 'classnames';\nimport { useAtomValue } from 'jotai';\nimport { Drawer } from '../drawer';\nimport { useTranslation } from 'react-i18next';\nimport Link from 'icon/link_fill.svg';\nimport ArrowTriangleDownFill from 'icon/arrow_triangle_down_fill.svg';\nimport InsIcon from 'icon/logo_instagram.svg';\nimport TwitterIcon from 'icon/logo_twitter.svg';\nimport YoutubeIcon from 'icon/logo_youtube.svg';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { IUserDetail } from 'shared/models';\n\nimport './user-link.scss';\n\ninterface UserLinksProps {\n user: IUserDetail;\n}\n\n// link order\n// const linkType = ['ins', 'twitter', 'youtube', 'personal'];\n\nexport function UserLinks(props: UserLinksProps): JSX.Element {\n const { user } = props;\n const { thirdLinks } = user;\n const isMultipleLink = thirdLinks.length > 1;\n\n const { isMobile } = useAtomValue($UserAgent);\n const isPC = !isMobile;\n\n const { t } = useTranslation();\n\n const [pressIndex, setPressIndex] = useState(-1);\n const [showActionsheet, setShowActionsheet] = useState(false);\n\n const actionSheetItemTouchStart = (index: number) => {\n setPressIndex(index);\n };\n const actionSheetItemTouchEnd = (_: number) => {\n setPressIndex(-1);\n };\n\n const closeLinkModal = () => {\n setShowActionsheet(false);\n };\n\n const handleLinkClick = () => {\n if (isMultipleLink) {\n setShowActionsheet(true);\n } else {\n location.href = thirdLinks[0].url;\n }\n };\n\n const Icon = useMemo(() => {\n const platform = thirdLinks[0].platform;\n if (platform === 'personal') {\n return Link;\n } else if (platform === 'ins') {\n return InsIcon;\n } else if (platform === 'twitter') {\n return TwitterIcon;\n } else {\n return YoutubeIcon;\n }\n }, [thirdLinks]);\n\n if (thirdLinks.length > 0) {\n return (\n
\n
\n \n

{thirdLinks[0].name}

\n {isMultipleLink && }\n
\n \n {\n
\n
\n
\n {thirdLinks.map((item, index) => {\n return (\n {\n window.open(item.url, '_blank');\n }}\n onTouchStart={() => {\n actionSheetItemTouchStart(index);\n }}\n onTouchEnd={() => {\n actionSheetItemTouchEnd(index);\n }}\n >\n {pressIndex === index &&
}\n {item.platform === 'personal' ? (\n \n ) : (\n
\n )}\n

{item.name}

\n
\n );\n })}\n
\n
\n {t('cancel_picture_view')}\n
\n
\n
\n }\n \n
\n );\n }\n\n return <>;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport cls from 'classnames';\n\nimport './style.scss';\n\ninterface ISimpleToastProps {\n show: boolean;\n setShow: (value: boolean) => void;\n content: string;\n}\n\nexport default function SimpleToast(props: ISimpleToastProps): JSX.Element {\n const { show, setShow, content } = props;\n const [hydrated, setHydrated] = useState(false);\n\n useEffect(() => {\n setHydrated(true);\n }, []);\n\n const timer = useRef(0);\n useEffect(() => {\n if (!show) {\n return;\n }\n\n const newTimer = window.setTimeout(() => {\n setShow(false);\n }, 2150);\n timer.current = newTimer;\n\n return () => window.clearTimeout(newTimer);\n }, [show, setShow]);\n\n return (\n
\n

{content || ''}

\n
\n );\n}\n","import { Link, useLocation } from '@remix-run/react';\nimport { SyntheticEvent, useCallback, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useAtomValue } from 'jotai';\nimport DividerContainer from '~/components/divider-container';\nimport { useNumFormatter } from '~/utils/format/num-formatter';\nimport { ClickPosition } from '~/utils/click-position';\nimport { UserLinks } from './user-link';\nimport SimpleToast from '~/components/simple-toast';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { usePageActive } from '~/utils/active/use-page-active';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { ViewTracker } from '../view-tracker';\nimport { ModuleType } from '~/utils/module-type';\nimport { Avatar } from '~/components/avatar';\nimport { EPrivacyStatus, EUserGender, IUserDetail } from 'shared/models';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\ninterface UserDescriptionProps {\n user: IUserDetail;\n}\n\nexport default function UserDescription(props: UserDescriptionProps): JSX.Element {\n const { user } = props;\n const { privacyStatus, userId, gender, ageGroup, location: locationValue } = user;\n const location = useLocation();\n const { t } = useTranslation();\n const active = usePageActive();\n const isRealUser = useAtomValue($IsMobileUser);\n\n const { region } = useAtomValue($Locale);\n\n const formatNumber = useNumFormatter();\n const [toast, setToast] = useState({ show: false, content: '' });\n\n const followingHref = `${location.pathname}/follow?tabkey=following®ion=${region}`;\n const followerHref = `${location.pathname}/follow?tabkey=follower®ion=${region}`;\n\n const activeAction = (enterPosition: ClickPosition): void => {\n active({\n schemaOption: {\n pageType: 'user',\n userId,\n },\n ampExtra: {\n enter_position: enterPosition,\n },\n });\n };\n\n const onClickFollowingInner = useReflowClick(\n {\n clickEvent: (_, bundle) => ({\n ...bundle,\n current_position: ClickPosition.user_following,\n page_click_id: userId,\n }),\n reflowBehavior: () => {\n activeAction(ClickPosition.user_following);\n },\n },\n [active, userId],\n );\n\n const onClickFollowing = useCallback(\n (e: SyntheticEvent) => {\n if (privacyStatus === EPrivacyStatus.PrivateUser) {\n e.preventDefault();\n setToast({\n show: true,\n content: t('privateAccount_profile_toast'),\n });\n return;\n }\n\n onClickFollowingInner(e);\n },\n [privacyStatus, onClickFollowingInner],\n );\n\n const onClickFollowerInner = useReflowClick(\n {\n clickEvent: (_, bundle) => ({\n ...bundle,\n current_position: ClickPosition.user_fans,\n page_click_id: userId,\n }),\n reflowBehavior: () => {\n activeAction(ClickPosition.user_fans);\n },\n },\n [active, userId],\n );\n\n const onClickFollower = useCallback(\n (e: SyntheticEvent) => {\n if (privacyStatus === EPrivacyStatus.PrivateUser) {\n e.preventDefault();\n setToast({\n show: true,\n content: t('privateAccount_profile_toast'),\n });\n return;\n }\n\n onClickFollowerInner(e);\n },\n [privacyStatus, onClickFollowerInner],\n );\n\n const genderValue = useMemo(() => {\n if (gender === EUserGender.Unknown) {\n return false;\n }\n\n return false;\n\n // TODO no such text\n return gender === EUserGender.MALE ? t('tag_male') : t('tag_female');\n }, [gender]);\n\n const ageValue = useMemo(() => {\n const AgeGroup = [\n { label: t('age_20_less'), value: 10 },\n { label: t('age_20'), value: 20 },\n { label: t('age_30'), value: 30 },\n { label: t('age_40'), value: 40 },\n { label: t('age_50'), value: 50 },\n { label: t('age_60_more'), value: 60 },\n ];\n return AgeGroup.filter((item) => item.value === ageGroup)[0]?.label;\n }, [ageGroup]);\n\n const showLink = useMemo(() => {\n const { thirdLinks } = user;\n return Boolean(thirdLinks.length);\n }, [user]);\n\n const sendTrackingEvent = (position: ClickPosition): void => {\n if (isRealUser) {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.user_homepage_info,\n current_position: position,\n });\n }\n };\n\n return (\n
\n
\n \n \n sendTrackingEvent(ClickPosition.user_following)}\n >\n \n {formatNumber(user.followingCount)}\n {t('follow_count_number')}\n \n \n sendTrackingEvent(ClickPosition.user_fans)}>\n \n {formatNumber(user.followerCount)}\n {t('fans_count_number')}\n \n \n
\n {formatNumber(user.dugCount + user.favoredCount)}\n {t('profile_likes_favors_count')}\n
\n
\n
\n
\n

{user.nickName}

\n \n {genderValue && {genderValue}}\n {ageValue && {ageValue}}\n {locationValue && {locationValue}}\n {showLink && }\n \n {user.description &&

{user.description}

}\n
\n setToast({ show, content: '' })} content={toast.content} />\n
\n );\n}\n","import { useAtomValue } from 'jotai';\nimport UserDescription from '~/components/user-description';\nimport { $CurrentAvailableUserOrNull } from '@user/shared/atoms/current-user';\nimport { NotFound } from '~/components/not-found';\n\nexport default function UserDescriptionSection(): JSX.Element {\n const user = useAtomValue($CurrentAvailableUserOrNull);\n\n if (!user) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n
\n );\n}\n","import { atom } from 'jotai';\nimport { $UserRelatedUser } from 'shared/atoms';\nimport { $CurrentUserLinkName } from '@user/shared/atoms/current-user';\n\nexport const $CurrentUserRelatedUser = atom((get) => {\n const currentUserLinkName = get($CurrentUserLinkName);\n return get($UserRelatedUser(currentUserLinkName));\n});\n","import { useAtomValue } from 'jotai';\nimport { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport SectionTitle from '~/components/section-title';\nimport { StepScroll } from '~/components/step-scroll';\nimport { UserCard } from '~/components/user-card';\nimport { ModuleType } from '~/utils/module-type';\nimport { User } from 'shared/models/legacy';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { $CurrentUserRelatedUser } from '@user/shared/atoms/current-user-related-user';\n\nexport default function UserRelatedSection(): JSX.Element | null {\n const { t } = useTranslation();\n const users = useAtomValue($CurrentUserRelatedUser);\n\n const observedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_module_show', {\n current_page_module: ModuleType.related_user,\n });\n }, []),\n });\n\n if (!users.length) {\n return null;\n }\n\n return (\n
\n \n \n {users.map((user: User) => (\n \n ))}\n \n
\n );\n}\n","import { FC, Suspense } from 'react';\nimport UserPostSection from './post';\nimport UserCampaignSection from './campaign';\nimport UserDescriptionSection from './description';\nimport { UserBodySkeleton } from '~/skeleton/user';\nimport UserRelatedSection from './related-user';\n\nexport const UserBody: FC = () => {\n return (\n <>\n \n }>\n \n \n \n \n \n );\n};\n","\"use strict\";\n\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport { RemixPage } from \"~/utils/remix-page\";\nimport { cssLinks } from \"@ttark/css-links\";\nimport { UserHead } from \"./head\";\nimport { UserBody } from \"./body\";\nimport { buildMasterLoader } from \"~/utils/build-master-loader\";\nvar links = () => [...cssLinks(\"routes/$user_link_name\")];\nvar loader = buildMasterLoader(\"user\");\nvar shouldRevalidate = args => {\n const {\n currentParams: {\n user_link_name: currentUserLinkName\n },\n nextParams: {\n user_link_name: userLinkName\n },\n defaultShouldRevalidate\n } = args;\n if (currentUserLinkName === userLinkName) {\n console.log(\"[shouldRevalidate] same route, skip revalidate\");\n return false;\n }\n return defaultShouldRevalidate;\n};\nvar UserPage = class extends RemixPage {\n constructor() {\n super(...arguments);\n this.Head = UserHead;\n this.Body = UserBody;\n }\n};\nexport { UserPage as default, links, shouldRevalidate };"],"sourceRoot":""}