/* ============================================================ ROOY · 10a 单日分享弹窗 ─────────────────────────────────────────────────────────── 需求:用户在 10 屏右上点分享键后弹出。预览将要分享出去的卡片 (场名 + 日期 + 路线图 + 数据 + Made with [logo] 水印),下方 一排分享渠道(保存 / 微信好友 / 朋友圈 / 更多)。 结构:medium detent —— scrim(点关闭)+ 按内容高度的 sheet(drag handle 下滑关闭,无 ×)+ 预览卡 + flush 分享行。 accent budget:外部品牌色(微信绿 #07C160)允许,是渠道身份信号, 不计 ROOY 自身 budget;保存 / 更多走中性 systemFill(本地动作)—— 「品牌色 = 对外社交、中性 = 本地」的二分规则;心流数据保留 gold。 非显然决定: · medium detent 而非全高 sheet —— 消除预览卡与分享行间的死空隙, 上方留大面积 scrim 点关闭区。 · 分享行 flush(R.bg + 顶部 hairline)而非独立白卡 —— 让预览卡 成为唯一白块、视觉层级更清。 · 水印用 assets/logo-wordmark.png 实物 logo(黑 wordmark),分享 图自带品牌印记。 · 依赖 daily.jsx 的 DailyTrackMap。 dismiss 走全 app sheet 契约(shared.jsx 的 Scrim / B.sheet / Shadow.sheet / rooy-sheet-up):scrim 点 + 下滑,无 × 按钮。 ============================================================ */ /* ShareStat — 分享卡内的数据条(value + unit + 下方 label)。N.italic 26 / weight 900,单行 baseline 对齐,2×2 grid 内紧凑可读。 */ function ShareStat({ v, u, l, color = R.ink }) { return (
{v} {u && ( {u} )}
{l &&

{l}

}
); } /* ShareChannel — 单个分享渠道。52pt tinted 圆 + glyph + 下方 label。 品牌色 = 对外社交(微信绿),中性 systemFill = 本地动作(保存 / 更多)。 */ function ShareChannel({ label, bg, color, children }) { return ( ); } function DailyShareSheet({ onNav }) { const WECHAT_GREEN = '#07C160'; return (
onNav && onNav('back')} style={{ height: '100%', display: 'flex', flexDirection: 'column', ...Scrim, position: 'relative', }}> {/* scrim filler —— medium detent:sheet 按内容高度贴底,上方 整片 scrim 都是点关闭区。 */}
{/* ── Sheet 主体(内容高度,贴底)── */}
e.stopPropagation()} style={{ background: R.bg, borderTopLeftRadius: B.sheet, borderTopRightRadius: B.sheet, boxShadow: Shadow.sheet, animation: 'rooy-sheet-up 320ms cubic-bezier(0.2,0,0,1) both', }} > {/* drag handle —— 下滑关闭的 affordance(scrim 点关闭是另一条 路径)。无 × 按钮,无顶部 brand chip。 */} {/* ── Share preview card(唯一白块 / 视觉英雄)── */}
{/* track map */}
{/* identity row */}
R

Zermatt 单日

2025 / 3 / 20

{/* stat grid 2×2 */}
{/* Made with [logo] —— 分享图自带品牌水印(右下)。logo 是黑 wordmark PNG,白卡上清晰。 */}
Made with ROOY
{/* ── Share buttons row —— flush(R.bg + 顶部 hairline)── */}
{/* 保存 —— 中性(本地动作),下载到相册 glyph */} {/* 微信好友 —— 品牌绿 chat bubble */} {/* 朋友圈 —— 品牌绿 圈 + 四象限点 */} {/* 更多 —— 中性 ⋯ */}
); } Object.assign(window, { DailyShareSheet, ShareStat, ShareChannel });