{"version":3,"sources":["webpack://@lemon8/web-seo/./client/utils/click-position.ts","webpack://@lemon8/web-seo/./client/utils/remix-page.tsx","webpack://@lemon8/web-seo/./client/utils/use-route-loader.ts","webpack://@lemon8/web-seo/./shared/utils/format/kep-formatter.ts","webpack://@lemon8/web-seo/./client/routes/search.sug/head/index.tsx","webpack://@lemon8/web-seo/./client/routes/search.sug/body/search-input/base-input/index.tsx","webpack://@lemon8/web-seo/./client/routes/search.sug/body/search-input/index.tsx","webpack://@lemon8/web-seo/./client/routes/search.sug/body/search-result/search-item/index.tsx","webpack://@lemon8/web-seo/./client/routes/search.sug/body/search-result/index.tsx","webpack://@lemon8/web-seo/./client/routes/search.sug/body/index.tsx","webpack://@lemon8/web-seo/./client/routes/search.sug/__remix_browser_route__route.tsx"],"names":["ClickPositionPrefix","ClickPosition","RemixPage","Component","constructor","arguments","Head","Body","HeadContent","state","useNavigation","canonicalUrl","useAtomValue","$PageLevelTraffic","pathname","useLocation","routeLoading","useMemo","a","URL","location","jsx","Fragment","children","BodyContent","RootSkeleton","Content","for","contextFor","useOutletContext","page","Error","render","getAtom","atom","key","res","includes","atomKey","args","split","decodeArgs","map","decodeURIComponent","atomFamily","atomFamilies","console","error","atoms","useRouteLoader","method","params","store","useStore","fetcher","useFetcher","load","useCallback","searchParams","URLSearchParams","set","Object","entries","forEach","_ref","value","String","concat","toString","useEffect","data","_ref2","startsWith","atomToSet","specialRegex","emojiRegex","kepQueryFormat","query","replace","char","toLowerCase","trim","SearchSugHead","Input","props","className","defaultValue","propsValue","onChange","onFocus","onBlur","onEnter","onClear","allowClear","placeholder","maxLength","beforeIcon","afterIcon","autoComplete","autoFocus","type","size","hasDate","handleClick","restProps","_objectWithoutProperties","_excluded","setValue","useState","isFocus","setFocus","inputWrapperRef","useRef","handleChange","e","val","target","handleFocus","handleBlur","handleOnKeydown","keyCode","preventDefault","stopPropagation","handleClear","handleInputWrapperClick","jsxs","_objectSpread","ref","onClick","classnames","focus","id","onKeyDown","conceal","SearchInput","onQueryChange","isMobile","$UserAgent","t","useTranslation","setQuery","isSearching","setSearching","handleCancel","loader","keyword","$SearchSugData","loadData","debounce","cs","isPC","action","onSubmit","BaseInput","Magnifyingglass","XmarkCircleFill","show","hidden","HighlightTxt","item","highlightPos","text","start","end","substring","Boolean","SearchItem","isUserVerify","avatar","src","ArrowUpLeftFill","SearchResult","region","$Locale","sugList","navigate","useNavigate","isUserPage","SugType","url","userId","window","Tea","current_position","rank","code","document","addEventListener","removeEventListener","SearchSugBody","str","links","SearchSPage"],"mappings":"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","file":"routes/search.sug-3731361e62389c6e57e8.js","sourcesContent":["export const enum ClickPositionPrefix {\n category = 'category_',\n none = '',\n}\n\nexport const enum ClickPosition {\n pwa_notification_banner = 'pwa_notification_banner',\n intercept_banner = 'intercept_banner',\n first_landing_dialog = 'first_landing_dialog',\n side_bar_homepage = 'side_bar_homepage',\n side_bar_pp = 'side_bar_pp',\n side_bar_tos = 'side_bar_tos',\n side_bar_cookie = 'side_bar_cookie',\n side_bar_avmsd = 'side_bar_avmsd',\n side_bar_download = 'side_bar_download',\n side_bar_category = 'side_bar_category',\n side_bar_email = 'side_bar_email',\n top_bar_logo = 'top_bar_logo',\n top_bar_side = 'top_bar_side',\n top_bar_share = 'top_bar_share',\n top_bar_search = 'top_bar_search',\n top_bar_download = 'top_bar_download',\n top_search_bar = 'top_search_bar',\n main_category = 'main_category',\n main_author = 'main_author',\n main_author_follow_btn = 'main_author_follow_btn',\n main_hashtag = 'main_hashtag',\n main_poi = 'main_poi',\n main_content_poi = 'main_content_poi',\n main_content_mentioned_user = 'main_content_mentioned_user',\n main_sar = 'main_sar',\n main_inner_link = 'main_inner_link',\n main_content_read_more = 'main_content_read_more',\n main_content_read_more_modal = 'main_content_read_more_modal',\n main_content_unfold_cta_btn = 'main_content_unfold_cta_btn',\n main_comment_send = 'main_comment_send',\n main_comment_icon = 'main_comment_icon',\n main_share_icon = 'main_share_icon',\n main_like_icon = 'main_like_icon',\n main_favorite_icon = 'main_favorite_icon',\n main_see_more_btn = 'main_see_more_btn',\n main_read_more = 'main_read_more',\n comment_author = 'comment_author',\n comment_image = 'comment_image',\n comment_like = 'comment_like',\n comment_reply = 'comment_reply',\n comment = 'comment',\n comment_mentioned_user = 'comment_mentioned_user',\n comment_see_more = 'comment_see_more',\n comment_reply_see_more = 'comment_reply_see_more',\n activity_banner = 'activity_banner',\n related_post = 'related_post',\n related_post_carousel = 'related_post_carousel',\n related_dialog = 'related_dialog',\n related_hashtag = 'related_hashtag',\n related_hashtag_with_article_card = 'related_hashtag_with_article_card',\n related_hashtag_article_card = 'related_hashtag_article_card',\n related_phone = 'related_phone',\n related_address = 'related_address',\n related_user = 'related_user',\n user_fans = 'user_fans',\n user_following = 'user_following',\n user_likes = 'user_likes',\n share_panel_icon = 'share_panel_icon',\n unknown = 'unknown',\n bottom_button = 'bottom_button',\n original_post_banner = 'original_post_banner',\n main_gallery_slide = 'main_gallery_slide',\n main_gallery_slide_modal = 'main_gallery_slide_modal',\n main_video_see_more = 'main_video_see_more',\n main_video_see_more_modal = 'main_video_see_more_modal',\n main_video_pause_auto = 'main_video_pause_auto',\n main_video_replay = 'main_video_replay',\n main_video_replay_modal = 'main_video_replay_modal',\n main_video_pause_manual = 'main_video_pause_manual',\n main_video_pause_manual_modal = 'main_video_pause_manual_modal',\n main_video_download_banner = 'main_video_download_banner',\n main_video_play = 'main_video_play',\n main_video_play_modal = 'main_video_play_modal',\n see_more_button = 'see_more_button',\n view_more_button = 'view_more_button',\n kep_breadcrumbs = 'kep_breadcrumbs',\n main_related_post = 'main_related_post',\n gallery_img = 'gallery_img',\n gallery_img_open = 'gallery_img_open',\n gallery_img_open_modal = 'gallery_img_open_modal',\n gallery_img_mask_open_btn = 'gallery_img_mask_open_btn',\n gallery_img_mask_close_btn = 'gallery_img_mask_close_btn',\n co_creator = 'co_creator',\n kep_classify_hot_keyword = 'kep_classify_hot_keyword',\n // pc reflow qrcode\n scan_code = 'scan_code',\n search_sug_item = 'search_sug_item',\n\n // the following string is concat by ClickPositionPrefix + ClickPosition\n // Please ensure the correctness of the value yourself\n\n category_related_post = 'category_related_post',\n category_view_more = 'category_view_more_button',\n category_see_more = 'category_see_more_button',\n related_search = 'related_search',\n bottom_sar_search = 'bottom_sar_search',\n}\n","import { Component, FC, useMemo } from 'react';\nimport { useLocation, useNavigation, useOutletContext } from '@remix-run/react';\nimport { useAtomValue } from 'jotai';\nimport { $PageLevelTraffic } from 'shared/atoms';\nimport { RootSkeleton } from '~/skeleton';\n\nexport abstract class RemixPage extends Component {\n /**\n * @deprecated\n */\n get page(): string {\n throw new Error('page name unspecified');\n }\n\n Head: FC = () => {\n return null;\n };\n\n Body: FC = () => {\n return null;\n };\n\n protected HeadContent: FC = () => {\n const { state } = useNavigation();\n const { canonicalUrl } = useAtomValue($PageLevelTraffic);\n const { pathname } = useLocation();\n\n const routeLoading = useMemo(() => {\n if (__BUILD_TARGET__ === 'server') {\n return false;\n }\n\n const a = new URL(canonicalUrl);\n return location.pathname !== a.pathname;\n }, [pathname, canonicalUrl]);\n\n if (state === 'loading' || routeLoading) {\n return (\n <>\n Lemon8 Loading\n \n );\n }\n const { Head } = this;\n\n return ;\n };\n\n protected BodyContent: FC = () => {\n const { state } = useNavigation();\n const { canonicalUrl } = useAtomValue($PageLevelTraffic);\n const { pathname } = useLocation();\n\n const routeLoading = useMemo(() => {\n if (__BUILD_TARGET__ === 'server') {\n return false;\n }\n\n const a = new URL(canonicalUrl);\n return location.pathname !== a.pathname;\n }, [pathname, canonicalUrl]);\n\n const { Body } = this;\n\n if (state === 'loading' || routeLoading) {\n return ;\n }\n\n return ;\n };\n\n protected Content: FC = () => {\n const { HeadContent, BodyContent } = this;\n const { for: contextFor } = useOutletContext<{\n for: 'head' | 'body';\n }>();\n\n if (contextFor === 'head') {\n return ;\n } else {\n return ;\n }\n };\n\n override render(): JSX.Element {\n const { Content } = this;\n\n return ;\n }\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","const specialRegex = /[!@&/\\\\#,+()$~%.'\":*?<>{}]/g;\nconst emojiRegex = /[\\u{1F000}-\\u{1F9FF}]/gu;\n\n/** format to url word */\nexport const kepQueryFormat = (query: string) => {\n if (!query) {\n return '';\n }\n\n const filterCharWord = query.replace(specialRegex, '');\n const filterEmojiWord = filterCharWord.replace(emojiRegex, '');\n const filterSpaceWord = filterEmojiWord.replace(/\\s+/g, ' ');\n const lowerCaseWord = filterSpaceWord.replace(/[A-Z]/g, (char) => char.toLowerCase());\n\n return lowerCaseWord.trim();\n};\n","import { FC } from 'react';\n\nexport const SearchSugHead: FC = () => {\n return (\n <>\n {'Lemon8'}\n \n );\n};\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport classnames from 'classnames';\n\nimport './style.scss';\n\ntype Event = React.ChangeEvent;\ntype KeyEvent = React.KeyboardEvent;\ntype InputSize = 'large' | 'default';\nexport interface InputProps {\n /** 未输入时的占位内容 */\n placeholder?: string;\n /** 自定义样式名 */\n className?: string;\n /** 初始值 */\n defaultValue?: string;\n /** 外部控制input的value值 */\n value?: string;\n /** 可输入的最大值 */\n maxLength?: number;\n /** 输入框规格大小 */\n size?: InputSize;\n /** value改变时的回调 */\n onChange?: (e: Event, value: string) => void;\n /** 输入框聚焦时的回调 */\n onFocus?: () => void;\n /** 输入框失焦时的回调 */\n onBlur?: () => void;\n /** 回车事件 */\n onEnter?: (value: string) => void;\n /** 清除输入框内容时的回调 */\n onClear?: () => void;\n /** 输入框左侧的icon */\n beforeIcon?: JSX.Element;\n /** 输入框右侧的icon */\n afterIcon?: JSX.Element;\n /** input 自动完成属性 */\n autoComplete?: string;\n /** 是否自动选中 */\n autoFocus?: boolean;\n /** input输入类型 */\n type?: string;\n /** 是否支持清除输入内容 */\n allowClear?: boolean;\n /** date-picker中是否有选中值 */\n hasDate?: boolean;\n /** 传入在外部处理的点击事件 */\n handleClick?: () => void;\n}\n\n// eslint-disable-next-line max-lines-per-function\nexport function Input(props: InputProps) {\n const {\n className,\n defaultValue,\n value: propsValue,\n onChange,\n onFocus,\n onBlur,\n onEnter,\n onClear,\n allowClear,\n placeholder,\n maxLength,\n beforeIcon,\n afterIcon,\n autoComplete = '',\n autoFocus = false,\n type = 'text',\n size = 'default',\n hasDate,\n handleClick,\n /** 外部antd之类的hoc会注入字段 */\n ...restProps\n } = props;\n const [value, setValue] = useState(defaultValue || '');\n const [isFocus, setFocus] = useState(false);\n const inputWrapperRef = useRef(null);\n\n useEffect(() => {\n if (propsValue !== undefined) {\n setValue(propsValue);\n }\n }, [propsValue]);\n\n const handleChange = (e: Event) => {\n const val = e.target.value;\n setValue(val);\n if (onChange) {\n onChange(e, val);\n }\n };\n\n const handleFocus = () => {\n setFocus(true);\n if (onFocus) {\n onFocus();\n }\n };\n\n const handleBlur = () => {\n setFocus(false);\n if (onBlur) {\n onBlur();\n }\n };\n\n const handleOnKeydown = (e: KeyEvent) => {\n if (onEnter && e.keyCode === 13) {\n onEnter(value);\n handleBlur();\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const handleClear = useCallback(() => {\n if (allowClear) {\n setValue('');\n if (onClear) {\n onClear();\n }\n }\n }, [allowClear]);\n\n const handleInputWrapperClick = () => {\n if (handleClick) {\n handleClick();\n }\n };\n\n return (\n \n {beforeIcon &&
{beforeIcon}
}\n \n {afterIcon && (\n
\n {afterIcon}\n
\n )}\n \n );\n}\n","import { FC, useEffect, useState } from 'react';\nimport cs from 'classnames';\nimport { useAtomValue } from 'jotai';\nimport { Input as BaseInput } from './base-input';\nimport { useTranslation } from 'react-i18next';\nimport { useRouteLoader } from '~/utils/use-route-loader';\nimport { $SearchSugData } from 'shared/atoms/search-sug';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport XmarkCircleFill from '@lemon8/design/lib/icons/icon_assets/xmark_circle_fill.svg';\nimport Magnifyingglass from '@lemon8/design/lib/icons/icon_assets/magnifyingglass.svg';\nimport { debounce } from 'lodash';\n\nimport './style.scss';\n\ninterface Props {\n className?: string;\n onQueryChange?: (query: string) => void;\n}\n\nexport const SearchInput: FC = ({ className, onQueryChange }) => {\n const { isMobile } = useAtomValue($UserAgent);\n const { t } = useTranslation();\n\n const [query, setQuery] = useState('');\n const [isSearching, setSearching] = useState(false);\n\n const handleFocus = () => {\n setSearching(true);\n };\n\n const handleChange = (e: React.ChangeEvent, value: string) => {\n setQuery(value);\n };\n\n const handleClear = () => {\n handleFocus();\n setQuery('');\n };\n\n const handleCancel = () => {\n setSearching(false);\n setQuery('');\n };\n\n const loader = useRouteLoader(\n 'search-sug-request',\n {\n keyword: query,\n },\n {\n atoms: {\n $SearchSugData,\n },\n },\n );\n\n const loadData = debounce(() => {\n loader.load();\n }, 0); // 和旧代码保持一致,看情况调整\n\n useEffect(() => {\n if (query !== '') {\n loadData();\n }\n\n onQueryChange?.(query);\n }, [query]);\n\n return (\n {\n e.preventDefault();\n }}\n >\n {/* iOS键盘显示回车为搜索需要使用form包裹 */}\n }\n afterIcon={\n \n }\n allowClear={true}\n onClear={handleClear}\n placeholder={t('search')}\n />\n \n {t('cancel')}\n \n \n );\n};\n","import { FC } from 'react';\nimport { SearchSugItem } from 'shared/models';\nimport Magnifyingglass from '@lemon8/design/lib/icons/icon_assets/magnifyingglass.svg';\nimport ArrowUpLeftFill from '@lemon8/design/lib/icons/icon_assets/arrow_up_left_fill.svg';\n\nimport './style.scss';\n\nconst HighlightTxt: FC<{ item: SearchSugItem }> = ({ item }) => {\n const { highlightPos, text } = item;\n const [start, end] = highlightPos;\n\n return (\n <>\n {text.substring(0, start)}\n {Boolean(text.substring(start, end + 1)) && {text.substring(start, end + 1)}}\n {text.substring(end + 1)}\n \n );\n};\n\nexport const SearchItem: FC<{ item: SearchSugItem; onClick: (item: SearchSugItem) => void }> = ({ item, onClick }) => {\n if (!item?.text) {\n return null;\n }\n\n return (\n
onClick(item)}>\n \n
\n \n \n \n {item.isUserVerify &&
}\n
\n {item.avatar && }\n \n
\n );\n};\n","import { FC, useEffect } from 'react';\nimport { useNavigate } from '@remix-run/react';\nimport { useAtomValue } from 'jotai';\nimport { SearchItem } from './search-item';\nimport { $SearchSugData } from 'shared/atoms';\nimport { SearchSugItem, SugType } from 'shared/models';\nimport { kepQueryFormat } from 'shared/utils';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ClickPosition } from '~/utils/click-position';\n\nimport './style.scss';\n\nexport const SearchResult: FC<{ query: string }> = ({ query }) => {\n const { region } = useAtomValue($Locale);\n const sugList = useAtomValue($SearchSugData);\n\n const navigate = useNavigate();\n\n const onClick = (item?: SearchSugItem): void => {\n // only two type page, user or discover\n const isUserPage = item?.type === SugType.user;\n\n let url = '';\n if (isUserPage && item?.userId) {\n url = `/user/${item.userId}/share`;\n } else if (item?.text) {\n url = `/discover/${kepQueryFormat(item.text)}?region=${region}`;\n } else {\n return;\n }\n\n window.Tea('wap_click', {\n current_position: ClickPosition.search_sug_item,\n query: item?.userId || item.text,\n rank: item.rank || -1, // is enter key down, not real click\n });\n\n navigate(url);\n };\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent): void => {\n if ((e.code === 'Enter' || e.key === 'Enter') && query) {\n e.preventDefault();\n\n onClick({ text: query } as SearchSugItem);\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [query]);\n\n return (\n
\n {sugList.map((item) => (\n \n ))}\n
\n );\n};\n","import { FC, useState } from 'react';\nimport { SearchInput } from './search-input';\nimport { SearchResult } from './search-result';\n\nexport const SearchSugBody: FC = () => {\n const [query, setQuery] = useState('');\n\n const onQueryChange = (str: string): void => {\n setQuery(str);\n };\n\n return (\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 { SearchSugHead } from \"./head\";\nimport { SearchSugBody } from \"./body\";\nimport { buildMasterLoader } from \"~/utils/build-master-loader\";\nvar links = () => [...cssLinks(\"routes/search.sug\")];\nvar loader = buildMasterLoader(\"searchSug\");\nvar SearchSPage = class extends RemixPage {\n constructor() {\n super(...arguments);\n this.Head = SearchSugHead;\n this.Body = SearchSugBody;\n }\n get page() {\n return \"search-sug\";\n }\n};\nexport { SearchSPage as default, links };"],"sourceRoot":""}