{"version":3,"file":"wanxing-Czpg1zxe.mjs","sources":["../src/pages/wanxing/wanxingFlow.ts","../src/pages/wanxing/wanxing.tsx","../src/pages/wanxing/index.tsx"],"sourcesContent":["import {\n    normalizeWanxingLanguage,\n    type WanxingEvent,\n    type WanxingLanguage,\n} from '@zentube/schema';\n\nexport function wanxingLanguageFromPage(\n    search: string,\n    pageLanguage?: string,\n    browserLanguage?: string\n): WanxingLanguage {\n    const requested = new URLSearchParams(search).get('lang');\n    return normalizeWanxingLanguage(requested || pageLanguage || browserLanguage);\n}\n\n/** 只认完整的视频编号，避免把任意查询参数放进播放器地址。 */\nexport function wanxingSharedVideoId(search: string): string | null {\n    const id = new URLSearchParams(search).get('v');\n    return id && /^[A-Za-z0-9_-]{11}$/.test(id) ? id : null;\n}\n\nexport function wanxingVideoUrl(\n    origin: string,\n    pathname: string,\n    search: string,\n    videoId: string | null\n): string {\n    const url = new URL(pathname + search, origin);\n    if (videoId) url.searchParams.set('v', videoId);\n    else url.searchParams.delete('v');\n    return url.toString();\n}\n\n/** 法讯按日期自动进入、结束后自动消失，不靠人记得改文案。 */\nexport function wanxingCurrentEvent(\n    events: WanxingEvent[],\n    today: string\n): { event: WanxingEvent; state: 'ongoing' | 'upcoming' } | null {\n    const ongoing = events.find(e => e.startsOn <= today && today <= e.endsOn);\n    if (ongoing) return { event: ongoing, state: 'ongoing' };\n    const upcoming = events\n        .filter(e => e.startsOn > today)\n        .sort((a, b) => a.startsOn.localeCompare(b.startsOn))[0];\n    return upcoming ? { event: upcoming, state: 'upcoming' } : null;\n}\n\nexport function wanxingFormatDuration(seconds?: number): string {\n    if (!seconds || seconds < 1) return '';\n    const total = Math.round(seconds);\n    return `${Math.floor(total / 60)}:${String(total % 60).padStart(2, '0')}`;\n}\n\nexport function wanxingLocalDay(now: Date = new Date()): string {\n    // 法会日期按寺院所在的北京时间计算，和访问者时区无关。\n    return new Date(now.getTime() + 8 * 3600_000).toISOString().slice(0, 10);\n}\n\nexport function wanxingLibraryAppLink(hostname = ''): string {\n    return `${hostname.startsWith('staging') ? 'buddhachat-staging' : 'buddhachat'}://wanxing?go=library`;\n}\n\nexport function filterWanxingTalks<T extends { title: string; topic: string | null }>(\n    talks: readonly T[],\n    topic: string | null,\n    query: string\n): T[] {\n    const needle = query.trim().toLowerCase();\n    return talks.filter(talk =>\n        (topic === null || talk.topic === topic)\n        && (!needle || talk.title.toLowerCase().includes(needle))\n    );\n}\n\nexport function wanxingAppLink(videoId: string | null, hostname = ''): string {\n    // 测试版 App 注册的是单独的链接前缀，不能唤起正式版。\n    const scheme = hostname.startsWith('staging') ? 'buddhachat-staging' : 'buddhachat';\n    return videoId\n        ? `${scheme}://wanxing?v=${encodeURIComponent(videoId)}`\n        : `${scheme}://wanxing`;\n}\n","import {\n    useCallback,\n    useEffect,\n    useMemo,\n    useRef,\n    useState,\n    type CSSProperties,\n    type PointerEvent as ReactPointerEvent,\n    type RefObject,\n} from 'react';\nimport {\n    wanxingImagePath,\n    WANXING_TOPIC_KEYS,\n    WANXING_TOPIC_NAMES,\n    type WanxingContent,\n    type WanxingImage,\n    type WanxingLanguage,\n    type WanxingProfileResponse,\n    type WanxingTalk,\n    type WanxingTalksResponse,\n    type WanxingTopicKey,\n} from '@zentube/schema';\nimport { api } from '../../libs';\nimport { appPath, getAssetUrl } from '../../libs/url';\nimport {\n    filterWanxingTalks,\n    wanxingAppLink,\n    wanxingCurrentEvent,\n    wanxingFormatDuration,\n    wanxingLanguageFromPage,\n    wanxingLibraryAppLink,\n    wanxingLocalDay,\n    wanxingSharedVideoId,\n    wanxingVideoUrl,\n} from './wanxingFlow';\nimport './wanxing.scss';\n\ntype Profile = WanxingProfileResponse['data'];\ntype PlayingVideo = { videoId: string; title: string; duration?: number };\n\nconst DOWNLOAD_URL = 'https://www.buddhachat.online/download';\nconst imageUrl = (image: WanxingImage) => getAssetUrl(wanxingImagePath(image).replace('/assets/', ''));\nconst reducedMotion = () => window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n\nconst Icon = ({ d, size = 22, fill }: { d: string; size?: number; fill?: boolean }) => (\n    <svg className=\"wx-ico\" width={size} height={size} viewBox=\"0 0 24 24\" aria-hidden=\"true\" fill={fill ? 'currentColor' : 'none'} stroke={fill ? 'none' : 'currentColor'}>\n        <path d={d} />\n    </svg>\n);\nconst PLAY = 'M8 5.5v13l10.5-6.5z';\nconst ARROW = 'M5 12h14M13 6l6 6-6 6';\nconst CLOSE = 'M6 6l12 12M18 6L6 18';\nconst SHARE = 'M12 15V4M7.5 8.5L12 4l4.5 4.5M5 13v6h14v-6';\n\n/** 首屏的光尘：只在首屏可见时运行，每秒 24 帧，不用混合模式，保证低端机不卡。 */\nfunction useDust(canvasRef: RefObject<HTMLCanvasElement | null>, active: boolean) {\n    useEffect(() => {\n        const canvas = canvasRef.current;\n        const context = canvas?.getContext('2d');\n        if (!canvas || !context || reducedMotion()) return;\n        let frame = 0;\n        let last = 0;\n        const rect = canvas.getBoundingClientRect();\n        canvas.width = rect.width;\n        canvas.height = rect.height;\n        const dots = Array.from({ length: 20 }, () => ({\n            x: Math.random() * rect.width,\n            y: Math.random() * rect.height,\n            r: 0.5 + Math.random() * 1.7,\n            v: 0.1 + Math.random() * 0.4,\n            p: Math.random() * 6,\n        }));\n        const draw = (time: number) => {\n            frame = requestAnimationFrame(draw);\n            if (!active || document.hidden || time - last < 42) return;\n            last = time;\n            context.clearRect(0, 0, canvas.width, canvas.height);\n            context.fillStyle = 'rgb(255,226,160)';\n            dots.forEach(dot => {\n                dot.y -= dot.v;\n                if (dot.y < -4) dot.y = canvas.height + 4;\n                context.globalAlpha = 0.2 + 0.4 * Math.abs(Math.sin(time / 1600 + dot.p));\n                context.beginPath();\n                context.arc(dot.x + Math.sin(time / 2400 + dot.p) * 7, dot.y, dot.r, 0, 7);\n                context.fill();\n            });\n        };\n        frame = requestAnimationFrame(draw);\n        return () => cancelAnimationFrame(frame);\n    }, [canvasRef, active]);\n}\n\nfunction MoonHold({ chan }: { chan: WanxingContent['chan'] }) {\n    const [progress, setProgress] = useState(0);\n    const [done, setDone] = useState(false);\n    const timer = useRef<number | undefined>(undefined);\n    const value = useRef(0);\n    const update = (next: number) => {\n        value.current = next;\n        setProgress(next);\n    };\n    const stop = () => {\n        window.clearInterval(timer.current);\n        timer.current = undefined;\n    };\n    const release = () => {\n        stop();\n        if (done) return;\n        timer.current = window.setInterval(() => {\n            const next = Math.max(0, value.current - 0.04);\n            update(next);\n            if (next <= 0) stop();\n        }, 30);\n    };\n    const press = (event: ReactPointerEvent) => {\n        event.preventDefault();\n        if (done) return;\n        stop();\n        const started = performance.now() - value.current * 2400;\n        timer.current = window.setInterval(() => {\n            const next = Math.min(1, (performance.now() - started) / 2400);\n            update(next);\n            if (next >= 1) {\n                setDone(true);\n                stop();\n            }\n        }, 30);\n    };\n    const reveal = () => {\n        update(1);\n        setDone(true);\n    };\n    useEffect(() => stop, []);\n    return (\n        <>\n            <button\n                type=\"button\"\n                className={`wx-bigmoon${progress > 0 && !done ? ' is-hold' : ''}`}\n                style={{ '--wx-p': progress } as CSSProperties}\n                onPointerDown={press}\n                onPointerUp={release}\n                onPointerLeave={release}\n                onPointerCancel={release}\n                onClick={event => {\n                    // 键盘和读屏软件没有“按住”，点按直接显现。\n                    if (event.detail === 0) reveal();\n                }}\n                onContextMenu={event => event.preventDefault()}\n            >\n                {done ? chan.mind[2] : chan.hold}\n            </button>\n            <div className=\"wx-mind\" lang=\"zh\">\n                {[...chan.mind].reverse().map((line, index) => (\n                    <span\n                        key={line}\n                        className=\"wx-v\"\n                        style={{ opacity: 0.26 + 0.74 * Math.min(1, Math.max(0, progress * 3 - (2 - index))) }}\n                    >\n                        {line}\n                    </span>\n                ))}\n            </div>\n        </>\n    );\n}\n\nfunction Player({ video, content, onClose, onNext }: { video: PlayingVideo; content: WanxingContent; onClose: () => void; onNext?: () => void }) {\n    return (\n        <div className=\"wx-layer\" role=\"dialog\" aria-modal=\"true\" aria-label={video.title}>\n            <div className=\"wx-player-top\">\n                <button type=\"button\" className=\"wx-round\" aria-label={content.player.close} onClick={onClose}>\n                    <Icon d={CLOSE} />\n                </button>\n            </div>\n            <iframe\n                className=\"wx-frame\"\n                key={video.videoId}\n                title={video.title}\n                src={appPath(`/embed/${encodeURIComponent(video.videoId)}?autoplay=1&bare=1`)}\n                allow=\"autoplay; fullscreen; encrypted-media; picture-in-picture\"\n                allowFullScreen\n            />\n            <div className=\"wx-player-info\">\n                <h3>{video.title}</h3>\n                <p>{content.name} · {content.role}</p>\n                <div className=\"wx-player-row\">\n                    <span>{wanxingFormatDuration(video.duration)}</span>\n                    {onNext ? (\n                        <button type=\"button\" className=\"wx-next\" onClick={onNext}>\n                            {content.player.next} <Icon d={ARROW} size={18} />\n                        </button>\n                    ) : null}\n                </div>\n            </div>\n        </div>\n    );\n}\n\nfunction Story({ content, start, onClose }: { content: WanxingContent; start: number; onClose: () => void }) {\n    const [index, setIndex] = useState(start);\n    const stories = content.life.stories;\n    const story = stories[index];\n    const forward = useCallback(() => {\n        if (index === stories.length - 1) onClose();\n        else setIndex(index + 1);\n    }, [index, onClose, stories.length]);\n    useEffect(() => {\n        const onKey = (event: KeyboardEvent) => {\n            if (event.key === 'ArrowRight') forward();\n            if (event.key === 'ArrowLeft') setIndex(current => Math.max(0, current - 1));\n        };\n        window.addEventListener('keydown', onKey);\n        return () => window.removeEventListener('keydown', onKey);\n    }, [forward]);\n    return (\n        <div className=\"wx-layer\" role=\"dialog\" aria-modal=\"true\" aria-label={content.life.label}>\n            <div className=\"wx-layer-bg\" key={story.image} style={{ backgroundImage: `url(${imageUrl(story.image)})` }} />\n            <div className=\"wx-layer-shade\" />\n            <div className=\"wx-bars\" aria-hidden=\"true\">\n                {stories.map((item, position) => (\n                    <i key={item.mark} className={position <= index ? 'is-on' : ''} />\n                ))}\n            </div>\n            <div className=\"wx-player-top\">\n                <button type=\"button\" className=\"wx-round\" aria-label={content.player.close} onClick={onClose}>\n                    <Icon d={CLOSE} />\n                </button>\n            </div>\n            <div className=\"wx-taps\">\n                <button type=\"button\" aria-label=\"‹\" onClick={() => setIndex(Math.max(0, index - 1))} />\n                <button type=\"button\" aria-label=\"›\" onClick={forward} />\n            </div>\n            <div className=\"wx-story-text\">\n                <em>{story.mark}</em>\n                <p>{story.text}</p>\n                <small>{content.life.next}</small>\n            </div>\n        </div>\n    );\n}\n\nconst TALK_PAGE = 30;\n\nfunction TopicChips({ language, allLabel, current, onSelect }: { language: WanxingLanguage; allLabel?: string; current?: WanxingTopicKey | null; onSelect: (topic: WanxingTopicKey | null) => void }) {\n    return (\n        <div className=\"wx-chips\">\n            {allLabel ? (\n                <button type=\"button\" className={current === null ? 'is-current' : ''} aria-pressed={current === null} onClick={() => onSelect(null)}>{allLabel}</button>\n            ) : null}\n            {WANXING_TOPIC_KEYS.map(key => (\n                <button type=\"button\" key={key} className={current === key ? 'is-current' : ''} aria-pressed={current === key} onClick={() => onSelect(key)}>\n                    {WANXING_TOPIC_NAMES[key][language]}\n                </button>\n            ))}\n        </div>\n    );\n}\n\nfunction AllTalks({ content, language, initialTopic, onPlay, onClose }: { content: WanxingContent; language: WanxingLanguage; initialTopic: WanxingTopicKey | null; onPlay: (video: PlayingVideo) => void; onClose: () => void }) {\n    const [talks, setTalks] = useState<WanxingTalk[]>([]);\n    const [topic, setTopic] = useState<WanxingTopicKey | null>(initialTopic);\n    const [query, setQuery] = useState('');\n    const [limit, setLimit] = useState(TALK_PAGE);\n    const [loading, setLoading] = useState(true);\n    const [failed, setFailed] = useState(false);\n    useEffect(() => {\n        let live = true;\n        api.get<WanxingTalksResponse>(appPath('/api/wanxing/talks'))\n            .then(response => live && setTalks(response.data.data.talks))\n            .catch(() => live && setFailed(true))\n            .finally(() => live && setLoading(false));\n        return () => {\n            live = false;\n        };\n    }, []);\n    const matches = useMemo(() => filterWanxingTalks(talks, topic, query), [talks, topic, query]);\n    const change = (next: () => void) => {\n        next();\n        setLimit(TALK_PAGE);\n    };\n    return (\n        <div className=\"wx-layer wx-all\" role=\"dialog\" aria-modal=\"true\" aria-label={content.talks.allTitle}>\n            <div className=\"wx-all-head\">\n                <h2>{content.talks.allTitle}{matches.length ? <small> {matches.length}</small> : null}</h2>\n                <button type=\"button\" className=\"wx-round\" aria-label={content.player.close} onClick={onClose}>\n                    <Icon d={CLOSE} />\n                </button>\n            </div>\n            <form className=\"wx-search\" onSubmit={event => event.preventDefault()}>\n                <input id=\"wx-search\" type=\"search\" value={query} onChange={event => change(() => setQuery(event.target.value))} placeholder={content.talks.search} aria-label={content.talks.search} />\n            </form>\n            <TopicChips language={language} allLabel={content.talks.allTopics} current={topic} onSelect={next => change(() => setTopic(next))} />\n            <div className=\"wx-all-list\">\n                {matches.slice(0, limit).map(item => (\n                    <button type=\"button\" key={item.id} className=\"wx-row\" onClick={() => onPlay({ videoId: item.id, title: item.title, duration: item.duration })}>\n                        <span>{item.title}</span>\n                        <time>{wanxingFormatDuration(item.duration)}</time>\n                    </button>\n                ))}\n                {!loading && !failed && matches.length === 0 ? <p className=\"wx-empty\">{content.talks.empty}</p> : null}\n                {failed ? <p className=\"wx-empty\">{content.player.error}</p> : null}\n                {loading ? <p className=\"wx-empty\" role=\"status\">…</p> : null}\n                {matches.length > limit ? (\n                    <button type=\"button\" className=\"wx-ghost\" onClick={() => setLimit(limit + TALK_PAGE)}>{content.talks.loadMore}</button>\n                ) : null}\n            </div>\n        </div>\n    );\n}\n\nexport default function WanxingPage() {\n    const language = useMemo(\n        () => wanxingLanguageFromPage(window.location.search, window.__ZENTUBE_I18N__?.currentLanguage, navigator.language),\n        []\n    );\n    const [profile, setProfile] = useState<Profile>();\n    const [loadFailed, setLoadFailed] = useState(false);\n    const [scrolled, setScrolled] = useState(false);\n    const [section, setSection] = useState('');\n    const [playing, setPlaying] = useState<PlayingVideo | null>(null);\n    const [storyIndex, setStoryIndex] = useState<number | null>(null);\n    const [openNeed, setOpenNeed] = useState(0);\n    const [book, setBook] = useState<number | null>(null);\n    const [shareOpen, setShareOpen] = useState(false);\n    const [footprintOpen, setFootprintOpen] = useState(false);\n    const [talkTopic, setTalkTopic] = useState<WanxingTopicKey | null>(null);\n    const [allOpen, setAllOpen] = useState(false);\n    const [chanOpen, setChanOpen] = useState(false);\n    const [toast, setToast] = useState('');\n    const dust = useRef<HTMLCanvasElement>(null);\n    useDust(dust, !scrolled);\n\n    const load = useCallback(() => {\n        setLoadFailed(false);\n        api.get<WanxingProfileResponse>(appPath('/api/wanxing/profile'), { params: { lang: language } })\n            .then(response => setProfile(response.data.data))\n            .catch(() => setLoadFailed(true));\n    }, [language]);\n    useEffect(load, [load]);\n\n    useEffect(() => {\n        document.documentElement.classList.add('wx-document');\n        return () => document.documentElement.classList.remove('wx-document');\n    }, []);\n\n    useEffect(() => {\n        let queued = false;\n        const update = () => {\n            queued = false;\n            const y = window.scrollY;\n            setScrolled(y > window.innerHeight * 0.62);\n            let current = '';\n            ['talks', 'life', 'chan', 'books', 'temple'].forEach(id => {\n                const element = document.getElementById(`wx-${id}`);\n                if (element && element.offsetTop - window.innerHeight * 0.45 <= y) current = id;\n            });\n            setSection(current);\n        };\n        const onScroll = () => {\n            if (queued) return;\n            queued = true;\n            requestAnimationFrame(update);\n        };\n        window.addEventListener('scroll', onScroll, { passive: true });\n        return () => window.removeEventListener('scroll', onScroll);\n    }, []);\n\n    const overlayOpen = Boolean(playing || storyIndex !== null || book !== null || shareOpen || footprintOpen || allOpen);\n    useEffect(() => {\n        document.documentElement.classList.toggle('wx-locked', overlayOpen);\n    }, [overlayOpen]);\n\n    const setVideoInUrl = (videoId: string | null) => {\n        const { origin, pathname, search } = window.location;\n        window.history.replaceState(null, '', wanxingVideoUrl(origin, pathname, search, videoId));\n    };\n\n    const durationOf = useCallback((videoId: string) => profile?.durations[videoId], [profile]);\n    const play = useCallback((videoId: string, title: string) => {\n        setVideoInUrl(videoId);\n        setBook(null);\n        setPlaying({ videoId, title, duration: durationOf(videoId) });\n    }, [durationOf]);\n\n    useEffect(() => {\n        if (!profile) return;\n        const shared = wanxingSharedVideoId(window.location.search);\n        if (!shared) return;\n        const known = [...profile.questions, ...profile.longTalks, ...profile.needs.items.flatMap(item => item.videos)]\n            .find(item => item.videoId === shared);\n        if (known) play(known.videoId, known.title);\n    }, [profile, play]);\n\n    const closePlayer = () => {\n        setVideoInUrl(null);\n        setPlaying(null);\n    };\n    const showToast = (message: string) => {\n        setToast(message);\n        window.setTimeout(() => setToast(''), 2000);\n    };\n    const openTalks = (topic: WanxingTopicKey | null) => {\n        setTalkTopic(topic);\n        setAllOpen(true);\n    };\n    const openApp = (hint: string, link = wanxingAppLink(playing?.videoId ?? null, window.location.hostname)) => {\n        showToast(hint);\n        const started = Date.now();\n        window.location.href = link;\n        window.setTimeout(() => {\n            // 还在当前页且页面没有被切到后台，说明没装 App。\n            if (!document.hidden && Date.now() - started < 2500) window.location.href = DOWNLOAD_URL;\n        }, 1600);\n    };\n    const shareUrl = () => wanxingVideoUrl(window.location.origin, window.location.pathname, window.location.search, playing?.videoId ?? null);\n    const copyLink = async () => {\n        try {\n            await navigator.clipboard.writeText(shareUrl());\n            showToast(profile!.share.copied);\n        } catch {\n            showToast(shareUrl());\n        }\n    };\n    const sendLink = async () => {\n        if (!navigator.share) {\n            await copyLink();\n            return;\n        }\n        try {\n            await navigator.share({ title: profile!.share.pageTitle, url: shareUrl() });\n        } catch {\n            // 用户取消系统分享不算错误。\n        }\n    };\n\n    if (!profile) {\n        return (\n            <div className=\"wx-root wx-loading\">\n                {loadFailed ? (\n                    <button type=\"button\" className=\"wx-ghost\" onClick={load}>↻</button>\n                ) : (\n                    <div className=\"wx-moon\" />\n                )}\n            </div>\n        );\n    }\n\n    const content = profile;\n    const first = content.questions[0];\n    const current = wanxingCurrentEvent(content.temple.events, wanxingLocalDay());\n    const questionIndex = playing ? content.questions.findIndex(item => item.videoId === playing.videoId) : -1;\n    const goTo = (id: string) => document.getElementById(`wx-${id}`)?.scrollIntoView({ behavior: reducedMotion() ? 'auto' : 'smooth' });\n    const title = (lines: string[]) => lines.map(line => <span key={line}>{line}<br /></span>);\n\n    return (\n        <div className={`wx-root${scrolled ? ' is-scrolled' : ''}`} lang={language}>\n            <div className=\"wx-top\">\n                <a className=\"wx-round\" aria-label={content.name} href={DOWNLOAD_URL} onClick={event => { event.preventDefault(); window.scrollTo({ top: 0, behavior: 'smooth' }); }}>\n                    <span className=\"wx-seal-mini\" aria-hidden=\"true\">行</span>\n                </a>\n                <span className=\"wx-toptitle\">{content.name}</span>\n                <button type=\"button\" className=\"wx-round\" aria-label={content.share.send} onClick={() => setShareOpen(true)}>\n                    <Icon d={SHARE} />\n                </button>\n            </div>\n\n            <header className=\"wx-hero\">\n                <div className=\"wx-hero-photo\" style={{ backgroundImage: `url(${imageUrl('hero')})` }} />\n                <div className=\"wx-hero-shade\" />\n                <canvas ref={dust} className=\"wx-dust\" aria-hidden=\"true\" />\n                <div className=\"wx-moon\" aria-hidden=\"true\" />\n                {language === 'en' ? null : (\n                    <div className=\"wx-sig\">\n                        <div className=\"wx-chop\">{content.role}</div>\n                        <h1 className=\"wx-name wx-v\">{content.name}</h1>\n                    </div>\n                )}\n                <div className=\"wx-hero-copy\">\n                    {language === 'en' ? <h1 className=\"wx-name-en\">{content.name}<small>{content.role}</small></h1> : null}\n                    <h2>{title(content.hero.title)}</h2>\n                    <p>{content.hero.subtitle}</p>\n                    {first ? (\n                        <button type=\"button\" className=\"wx-cta\" onClick={() => play(first.videoId, first.title)}>\n                            <i><Icon d={PLAY} fill /></i>\n                            <span>\n                                <b>{first.title}</b>\n                                <small>{content.hero.ctaHint} · {wanxingFormatDuration(profile.durations[first.videoId])}</small>\n                            </span>\n                        </button>\n                    ) : null}\n                    <div className=\"wx-hero-foot\">\n                        <button type=\"button\" className=\"wx-follow\" onClick={() => openApp(content.app.followHint)}>\n                            <span className=\"wx-stamp\">{language === 'en' ? '+' : '关'}</span>\n                            {content.hero.follow}\n                        </button>\n                        <span>{content.hero.scrollHint} ↑</span>\n                    </div>\n                </div>\n            </header>\n\n            {content.questions.length ? (\n                <section className=\"wx-dark\" id=\"wx-talks\">\n                    <p className=\"wx-label\">{content.talks.label}</p>\n                    <h2 className=\"wx-title\">{title(content.talks.title)}</h2>\n                    <p className=\"wx-lead\">{content.talks.lead}</p>\n                    <div className=\"wx-questions\">\n                        {content.questions.map(item => (\n                            <button type=\"button\" key={item.videoId} className=\"wx-q\" onClick={() => play(item.videoId, item.title)}>\n                                <img src={imageUrl(item.image)} alt=\"\" loading=\"lazy\" decoding=\"async\" />\n                                <span className=\"wx-q-shade\" />\n                                <span className=\"wx-q-text\">\n                                    <strong>{item.title}</strong>\n                                    <span className=\"wx-q-play\"><i><Icon d={PLAY} size={16} fill /></i>{wanxingFormatDuration(profile.durations[item.videoId])}</span>\n                                </span>\n                            </button>\n                        ))}\n                    </div>\n                    {content.longTalks.length ? (\n                        <>\n                            <p className=\"wx-label wx-label-gap\">{content.talks.longLabel}</p>\n                            <div className=\"wx-long\">\n                                {content.longTalks.map(item => (\n                                    <button type=\"button\" key={item.videoId} className=\"wx-row\" onClick={() => play(item.videoId, item.title)}>\n                                        <span>{item.title}</span>\n                                        <time>{wanxingFormatDuration(profile.durations[item.videoId])}</time>\n                                    </button>\n                                ))}\n                            </div>\n                        </>\n                    ) : null}\n                    <p className=\"wx-label wx-label-gap\">{content.talks.byTopic}</p>\n                    <TopicChips language={language} onSelect={openTalks} />\n                    <div className=\"wx-talk-links\">\n                        <button type=\"button\" className=\"wx-line\" onClick={() => openTalks(null)}>\n                            {content.talks.allLabel} <Icon d={ARROW} size={18} />\n                        </button>\n                        <button type=\"button\" className=\"wx-line\" onClick={() => setFootprintOpen(true)}>\n                            {content.footprint.entry} <Icon d={ARROW} size={18} />\n                        </button>\n                    </div>\n                </section>\n            ) : null}\n\n            {content.needs.items.length ? (\n                <section className=\"wx-light\">\n                    <p className=\"wx-label\">{content.needs.label}</p>\n                    <h2 className=\"wx-title\">{title(content.needs.title)}</h2>\n                    <p className=\"wx-lead\">{content.needs.lead}</p>\n                    <div className=\"wx-acc\">\n                        {content.needs.items.map((need, index) => (\n                            <div key={need.key} className={openNeed === index ? 'is-open' : ''}>\n                                <button type=\"button\" className=\"wx-acc-head\" aria-expanded={openNeed === index} onClick={() => setOpenNeed(openNeed === index ? -1 : index)}>\n                                    {need.title}\n                                    <Icon d=\"M12 5v14M5 12h14\" />\n                                </button>\n                                <div className=\"wx-acc-body\">\n                                    <div>\n                                        {need.videos.map(entry => (\n                                            <button type=\"button\" key={entry.videoId} className=\"wx-vid\" onClick={() => play(entry.videoId, entry.title)}>\n                                                <i><Icon d={PLAY} size={16} fill /></i>\n                                                <span>{entry.title}</span>\n                                                <time>{wanxingFormatDuration(profile.durations[entry.videoId])}</time>\n                                            </button>\n                                        ))}\n                                    </div>\n                                </div>\n                            </div>\n                        ))}\n                    </div>\n                </section>\n            ) : null}\n\n            <section className=\"wx-life\" id=\"wx-life\">\n                <p className=\"wx-label\">{content.life.label}</p>\n                <h2 className=\"wx-title\">{title(content.life.title)}</h2>\n                <p className=\"wx-lead\">{content.life.lead}</p>\n                <div className=\"wx-reel\">\n                    {content.life.stories.map((story, index) => (\n                        <button type=\"button\" key={story.mark} className=\"wx-frame-card\" onClick={() => setStoryIndex(index)}>\n                            <img src={imageUrl(story.image)} alt=\"\" loading=\"lazy\" decoding=\"async\" />\n                            <b>{story.mark}</b>\n                        </button>\n                    ))}\n                </div>\n                <button type=\"button\" className=\"wx-line\" onClick={() => setStoryIndex(0)}>\n                    {content.life.watch} <Icon d={ARROW} size={18} />\n                </button>\n            </section>\n\n            <section className=\"wx-chan\" id=\"wx-chan\">\n                <p className=\"wx-label\">{content.chan.label}</p>\n                <h2 className=\"wx-title\">{title(content.chan.title)}</h2>\n                <MoonHold chan={content.chan} />\n                <p className=\"wx-chan-text\">{content.chan.quote}<br />{content.chan.body}</p>\n                <p className=\"wx-relations\">{content.chan.relationsLabel}<br />{content.chan.relations}</p>\n                {chanOpen ? (\n                    <div className=\"wx-chan-more\">\n                        {content.chan.paragraphs.map(paragraph => <p key={paragraph}>{paragraph}</p>)}\n                        <h3>{content.chan.methodLabel}</h3>\n                        <p className=\"wx-verse\">{content.chan.method.map(line => <span key={line}>{line}<br /></span>)}</p>\n                    </div>\n                ) : null}\n                <button type=\"button\" className=\"wx-line\" aria-expanded={chanOpen} onClick={() => setChanOpen(!chanOpen)}>\n                    {chanOpen ? content.chan.less : content.chan.more} <Icon d={ARROW} size={18} />\n                </button>\n            </section>\n\n            <section className=\"wx-books\" id=\"wx-books\">\n                <p className=\"wx-label\">{content.books.label}</p>\n                <h2 className=\"wx-title\">{title(content.books.title)}</h2>\n                <p className=\"wx-lead\">{content.books.lead}</p>\n                <div className=\"wx-shelf\">\n                    {content.books.items.map((item, index) => (\n                        <button\n                            type=\"button\"\n                            key={item.title}\n                            className={`wx-spine wx-v${book === index ? ' is-selected' : ''}`}\n                            style={{ height: item.height, background: item.color }}\n                            onClick={() => setBook(index)}\n                        >\n                            {item.title}\n                        </button>\n                    ))}\n                </div>\n                <p className=\"wx-note\">{content.books.note}</p>\n            </section>\n\n            <section className=\"wx-temple\" id=\"wx-temple\">\n                <div className=\"wx-aerial\" style={{ backgroundImage: `url(${imageUrl('aerial')})` }}>\n                    <div>\n                        <span>{content.temple.place}</span>\n                        <h2>{content.temple.name}</h2>\n                    </div>\n                </div>\n                <div className=\"wx-temple-body\">\n                    <ul className=\"wx-era\">\n                        {content.temple.history.map(row => (\n                            <li key={row.when}><b>{row.when}</b><span>{row.what}</span></li>\n                        ))}\n                    </ul>\n                    <p className=\"wx-motto\">{content.temple.motto}</p>\n                    {current ? (\n                        <div className=\"wx-event\">\n                            <small><span className={current.state === 'ongoing' ? 'wx-dot' : 'wx-dot is-still'} />{current.state === 'ongoing' ? content.temple.ongoing : content.temple.upcoming} · {current.event.dateLabel}</small>\n                            <b>{current.event.title}</b>\n                        </div>\n                    ) : null}\n                    <p className=\"wx-visit\">{content.temple.address}<br />{content.temple.phone}</p>\n                </div>\n            </section>\n\n            <section className=\"wx-end\">\n                <q>{title(content.close.quote)}</q>\n                <button type=\"button\" className=\"wx-ghost\" onClick={() => setShareOpen(true)}>{content.close.share}</button>\n                <nav className=\"wx-langs\" aria-label=\"Language\">\n                    <a href=\"?lang=zh-CN\" aria-current={language === 'zh-CN'}>简体</a>\n                    <a href=\"?lang=zh-TW\" aria-current={language === 'zh-TW'}>繁體</a>\n                    <a href=\"?lang=en\" aria-current={language === 'en'}>English</a>\n                </nav>\n            </section>\n\n            <nav className=\"wx-nav\" aria-label={content.name}>\n                {(['talks', 'life', 'chan', 'books', 'temple'] as const).map(id => (\n                    <button type=\"button\" key={id} className={section === id ? 'is-current' : ''} onClick={() => goTo(id)}>\n                        {content.nav[id]}\n                    </button>\n                ))}\n            </nav>\n\n            <div className=\"wx-appbar\">\n                <span>{content.app.hint}</span>\n                <button type=\"button\" onClick={() => openApp(content.app.hint)}>{content.app.open}</button>\n            </div>\n\n            {playing ? (\n                <Player\n                    video={playing}\n                    content={content}\n                    onClose={closePlayer}\n                    onNext={questionIndex >= 0 && content.questions.length > 1 ? () => {\n                        const next = content.questions[(questionIndex + 1) % content.questions.length];\n                        play(next.videoId, next.title);\n                    } : undefined}\n                />\n            ) : null}\n            {storyIndex !== null ? <Story content={content} start={storyIndex} onClose={() => setStoryIndex(null)} /> : null}\n            {allOpen ? (\n                <AllTalks\n                    content={content}\n                    language={language}\n                    initialTopic={talkTopic}\n                    onClose={() => setAllOpen(false)}\n                    onPlay={video => {\n                        setVideoInUrl(video.videoId);\n                        setPlaying(video);\n                    }}\n                />\n            ) : null}\n\n            {book !== null || shareOpen || footprintOpen ? <button type=\"button\" className=\"wx-scrim\" aria-label={content.player.close} onClick={() => { setBook(null); setShareOpen(false); setFootprintOpen(false); }} /> : null}\n            {book !== null ? (\n                <div className=\"wx-sheet\" role=\"dialog\" aria-modal=\"true\">\n                    <div className=\"wx-grip\" />\n                    <h3>《{content.books.items[book].title.replace('·中英', '')}》</h3>\n                    <p>{content.books.items[book].meta}</p>\n                    {first ? <button type=\"button\" className=\"wx-send\" onClick={() => play(first.videoId, first.title)}>{content.books.action}</button> : null}\n                </div>\n            ) : null}\n            {footprintOpen ? (\n                <div className=\"wx-sheet\" role=\"dialog\" aria-modal=\"true\" aria-label={content.footprint.title}>\n                    <div className=\"wx-grip\" />\n                    <h3>{content.footprint.title}</h3>\n                    <p>{content.footprint.body}</p>\n                    <div className=\"wx-share-row\">\n                        <button type=\"button\" className=\"wx-copy\" onClick={() => setFootprintOpen(false)}>{content.footprint.cancel}</button>\n                        <button type=\"button\" className=\"wx-send\" onClick={() => { setFootprintOpen(false); openApp(content.app.hint, wanxingLibraryAppLink(window.location.hostname)); }}>{content.footprint.open}</button>\n                    </div>\n                </div>\n            ) : null}\n            {shareOpen ? (\n                <div className=\"wx-sheet\" role=\"dialog\" aria-modal=\"true\">\n                    <div className=\"wx-grip\" />\n                    <div className=\"wx-poster\" style={{ backgroundImage: `url(${imageUrl('field')})` }}>\n                        <div>\n                            <q>{title(content.close.quote)}</q>\n                            <small>{content.name} · {content.role}<br />wanxing.buddhachat.online</small>\n                        </div>\n                    </div>\n                    <div className=\"wx-share-row\">\n                        <button type=\"button\" className=\"wx-copy\" onClick={copyLink}>{content.share.copy}</button>\n                        <button type=\"button\" className=\"wx-send\" onClick={sendLink}>{content.share.send}</button>\n                    </div>\n                </div>\n            ) : null}\n            {toast ? <div className=\"wx-toast\" role=\"status\">{toast}</div> : null}\n        </div>\n    );\n}\n","import { render } from '../../libs';\nimport WanxingPage from './wanxing';\n\n// 独立入口：万行主页的代码和样式不进入源慧和其他专题页的打包。\nrender('topic-container', () => <WanxingPage />);\n"],"names":["wanxingLanguageFromPage","search","pageLanguage","browserLanguage","requested","normalizeWanxingLanguage","wanxingSharedVideoId","id","wanxingVideoUrl","origin","pathname","videoId","url","wanxingCurrentEvent","events","today","ongoing","e","upcoming","a","b","wanxingFormatDuration","seconds","total","wanxingLocalDay","now","wanxingLibraryAppLink","hostname","filterWanxingTalks","talks","topic","query","needle","talk","wanxingAppLink","scheme","DOWNLOAD_URL","imageUrl","image","getAssetUrl","wanxingImagePath","reducedMotion","Icon","d","size","fill","jsx","PLAY","ARROW","CLOSE","SHARE","useDust","canvasRef","active","useEffect","canvas","context","frame","last","rect","dots","draw","time","dot","MoonHold","chan","progress","setProgress","useState","done","setDone","timer","useRef","value","update","next","stop","release","press","event","started","reveal","jsxs","Fragment","line","index","Player","video","content","onClose","onNext","appPath","Story","start","setIndex","stories","story","forward","useCallback","onKey","current","item","position","TALK_PAGE","TopicChips","language","allLabel","onSelect","WANXING_TOPIC_KEYS","key","WANXING_TOPIC_NAMES","AllTalks","initialTopic","onPlay","setTalks","setTopic","setQuery","limit","setLimit","loading","setLoading","failed","setFailed","live","api","response","matches","useMemo","change","WanxingPage","profile","setProfile","loadFailed","setLoadFailed","scrolled","setScrolled","section","setSection","playing","setPlaying","storyIndex","setStoryIndex","openNeed","setOpenNeed","book","setBook","shareOpen","setShareOpen","footprintOpen","setFootprintOpen","talkTopic","setTalkTopic","allOpen","setAllOpen","chanOpen","setChanOpen","toast","setToast","dust","load","queued","y","element","onScroll","overlayOpen","setVideoInUrl","durationOf","play","title","shared","known","closePlayer","showToast","message","openTalks","openApp","hint","link","shareUrl","copyLink","sendLink","first","questionIndex","goTo","lines","need","entry","paragraph","row","render"],"mappings":"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"}