Commit Graph

105 Commits

Author SHA1 Message Date
TerryM
4e5093cae0 ui: drop the 'download complete' success toast
Successful downloads no longer pop a 'downloadOk' toast across all
the download sites (PopularRankList, RecommendedCard, FileDocBubble,
ImageLightbox). The browser's native download UI already confirms
the action, and the toast was redundant noise. Failure toasts and
the spinner state remain so users still see errors.
2026-05-30 01:21:35 +08:00
TerryM
92e6ce9dd8 feat(video): explicit fullscreen button, simplify download pill sizing
- VideoBubble: add a Maximize2 fullscreen button at the top-right of
  the inline player (mirrors the download pill on the left), so the
  user explicitly opts into fullscreen instead of any tile click being
  promoted to one. Removed the outer onClick that opened fullscreen
  on any tap.
- AttachmentDownloadPill: drop the adaptive (cqw-based) sizing branch
  and the corresponding 'adaptive' prop. The pill is now a uniform
  30px tall in every host (album tile, single image, video tile),
  matching the design without needing query containers on parents.
- AlbumBubble: remove the now-unused 'adaptive' prop and the
  containerType: inline-size hook that supported it.
2026-05-30 01:21:35 +08:00
TerryM
6b42981419 fix(video): keep scroll position and stop pause from going fullscreen
- VideoBubble: stopPropagation on the inline <video> element so
  clicks on the native controls (play/pause/seek) don't bubble up
  to the outer tile, which previously promoted any control click
  into a fullscreen overlay.
- VideoPlayer: replace overflow:hidden body lock with the iOS-safe
  position-fixed + scroll-restore pattern. Closing the fullscreen
  player now returns the page to the exact scroll offset it had,
  instead of snapping back to the top on iOS Safari.
2026-05-30 01:09:19 +08:00
TerryM
ac208dfe25 style: stronger contrast on image lightbox nav buttons
Bump the previous/next chevron buttons from translucent white tint
to a solid-ish black with a subtle ring + shadow, so the controls
stay legible on light or busy image backgrounds.
2026-05-30 01:02:18 +08:00
TerryM
15bcb6bdf0 feat: 相册下载胶囊自适应尺寸(随图块大小缩放)
- AttachmentDownloadPill 新增 adaptive 模式:用容器查询单位 cqw + clamp,
  尺寸随所在容器宽度缩放(图标框 22~30px、图标 13~18px、文字 10~12px)
- 相册图块设 container-type: inline-size 作为查询容器,小缩略图上的下载按钮
  自动缩小;单图/视频默认固定尺寸不受影响

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 00:52:23 +08:00
TerryM
d7e2e56cde ui: home carousel height lock + bubble polish
- Home: lock category carousel height to the tallest page so the
  Official Recommendations section below does not jump up when
  swiping to a page with fewer categories.
- CollapsibleText: raise default threshold to 25 lines and tighten
  the spacing between the expand-all button and the timestamp
  (drop the fixed h-8 and use mt-1 instead of mt-1.5).
- formatTime: always render dates as yyyy/m/d HH:mm regardless of
  locale, matching the requested timestamp format.
2026-05-30 00:43:54 +08:00
TerryM
c0068e957e feat: 文档预览图改方形放大,下载胶囊整体放大
- FileDocBubble 预览缩略图 52px 圆形 → 64px 方形圆角(rounded-lg),行高自适应
- AttachmentDownloadPill 放大:图标框 24→30px、图标 14→18px、文字 11→12px

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 00:43:27 +08:00
TerryM
ad885f578c Merge origin/main into terry-media-adaptive-trial
Combine collapsible long-text (main) with adaptive image frame
(this branch). Resolved conflict in ImageWithTextBubble.tsx by
keeping both SingleImageFrame and CollapsibleText imports.
2026-05-30 00:17:10 +08:00
TerryM
64a41359b4 style: 展开/收起按钮去掉背景胶囊样式,仅保留文字+chevron 2026-05-29 23:58:14 +08:00
TerryM
b283ba74da feat: 消息气泡长文字支持「展开全部/收起全部」折叠
- 新增 CollapsibleText 组件:超过 8 行文字自动折叠,按行高对齐裁切,底部柔和渐隐遮罩暗示有更多内容
- 折叠按钮左对齐,胶囊样式 + chevron 图标,hover 浅背景高亮,点击 chevron 旋转 180°
- 应用到全部 5 种气泡:Text/ImageWithText/Album/Video/FileDoc
- 动画统一使用 motion 包的 EASE_OUT 缓动,尊重 reducedMotion=user
- i18n 七种语言新增 showMore/showLess 文案
2026-05-29 23:49:59 +08:00
TerryM
471d29bec9 fix: 相册改用绝对定位百分比布局,彻底消除底部黑边
CSS grid + aspect-ratio 下 fr 行在部分浏览器不撑满,留出 bg-black。
改为 Telegram 同款:算法输出每块 {left,top,width,height} 百分比坐标,
图块绝对定位铺满容器。顺带修复竖主图在左时右侧堆叠图高度算错未填满列。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 22:56:20 +08:00
TerryM
789920d2b9 fix: 修复相册底部黑边(grid 用 aspect-ratio 时 fr 行不撑满)
aspect-ratio 单独作用在 grid 上时,容器高度对 fr 行属"非确定高度",
fr 退化为 max-content,行被压成内容高度,容器底部露出 bg-black。
改为:aspect-ratio + maxHeight 放外层 wrapper,内层 grid 用 absolute
inset-0 撑满,获得确定高度,fr 行正常拉伸,黑边消除。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 22:37:16 +08:00
TerryM
0035457c6d feat: 媒体流图片自适应显示(单图/2图/Telegram式相册)
- 单图气泡按真实比例显示:横图限高260px、过高裁上下;竖图完整铺满宽度不裁、无黑边
- 2张同类相册:都竖图左右并排、都横图上下堆叠,按比例不裁
- 3+张相册:Telegram式马赛克拼贴(竖主图占左+其余堆右 / 横主图占顶+其余排底)
- 图片比例优先用后端width/height,缺失时从加载后的naturalWidth/Height读取
- 新增 constants/media.ts 统一尺寸规范;albumLayout 纯算法附单测

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 22:16:55 +08:00
TerryM
a7792c117d fix: 资料流提早显现内容,避免空白缺口被误认为到底
Reveal 加 300px 前置 viewport margin,内容在进入视口前淡入;
无限滚动预加载触发线 200px → 1000px,下一页提前请求。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 19:04:31 +08:00
TerryM
042635528a feat: 灯箱支持下载、底部缩略图居中、关闭后保留滚动位置
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 18:11:30 +08:00
TerryM
e04dd7dc2a fix: 修复相册缩略图无法显示(dev 代理 + 前端兜底)
- vite: /uploads 代理指向源站根而非 /apnew 前缀,relative thumbnailUrl
  (/uploads/thumb…) 在 dev 下不再落到 SPA index.html
- BubbleImage: 新增 fallbackSrc 候选链,缩略图加载失败时自动回退到绝对
  thumbUrl/url,全部失败才显示占位符
- AlbumBubble / ImageLightbox: 缩略图传入绝对地址作为兜底

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:59:33 +08:00
TerryM
1f8772f645 feat: 相册点击直接进大图查看器,移除「选择图片」列表
- AlbumBubble: 点 +N 直接打开全屏查看器(从该图开始),删除中间的选择列表弹窗
- ImageLightbox: 底部加可滑动缩略图条(当前高亮+自动滚动定位),顶栏加下载按钮
- 下载按钮保证此前藏在 +N 列表里的图片仍可下载

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:50:53 +08:00
TerryM
559c4f19c8 feat: image error placeholder + scroll-to-top on navigation
Image bubbles previously used the raw filename as alt text, so a failed
asset load exposed the file name in the broken-image box. Add a reusable
BubbleImage that renders an empty alt and falls back to a neutral
placeholder (ImageOff icon) on error; use it in the album, image, and
image-with-text bubbles, and drop the filename from their aria-labels.

Also add a global ScrollToTop that resets the window on route change so
desktop navigation matches mobile (e.g. clicking a category card no
longer lands at the bottom of the new page). Hash navigations are skipped
so #post-<id> deep-link scrolling still works.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:09:09 +08:00
TerryM
4464e6fdc5 fix: fall back to file icon when document thumbnail fails to load
Render the 52x52 preview with an empty alt and an onError handler, so a
broken thumbnail no longer shows the browser's broken-image box (which
leaked the raw filename) — it falls back to the file-type icon instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:08:16 +08:00
TerryM
f73131dc03 style: apply prettier formatting to fix format:check
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 12:49:22 +08:00
TerryM
14c3defd23 feat: show attachment preview thumbnail in document bubble
Use thumbnailUrl/posterUrl (and the image url itself for image-type
attachments) inside the 52x52 box of the file/document bubble, falling
back to the file-type icon when no preview is available.

Also tune the deep-link scroll-mt offset (82px / 98px) so a targeted
bubble lands just below the sticky header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 12:40:17 +08:00
TerryM
88a25b6ad4 feat: scroll to post bubble from recommended card + back-to-top button
Some checks failed
Deploy to Frontend Servers / deploy (push) Failing after 14s
Recommended cards already routed to /browse#post-<id>, but the stream had
no logic to scroll to the target bubble — and the post might not be paged
in yet. MessageStream now resolves the #post-<id> hash, auto-loads more
pages until the bubble renders, scrolls to it, and gives it a brief gold
highlight. Bubbles get scroll-mt so they clear the sticky header.

Also adds a global floating back-to-top button (BackToTop) mounted in
PublicLayout, shown after scrolling past 400px.

Bundles related staging UI work already present in the working tree.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 11:50:27 +08:00
TerryM
320739f91b Add stale cache for public data 2026-05-28 23:09:18 +08:00
TerryM
5ca38a0eca fix: overlay lightbox captions without shifting image 2026-05-28 18:40:17 +08:00
TerryM
5fec82dbba fix: route home view-all links 2026-05-28 16:49:30 +08:00
TerryM
4c15e01460 fix: keep video downloads visible while playing 2026-05-28 16:37:00 +08:00
TerryM
6a998c0186 feat: separate popular browse navigation 2026-05-28 16:28:50 +08:00
TerryM
0e98428f64 feat: polish figma mobile home and nav 2026-05-28 15:32:15 +08:00
TerryM
e65c473369 feat: align figma browse and category sections 2026-05-28 15:11:13 +08:00
TerryM
49f61b89f1 feat: apply figma browse mobile redesign 2026-05-28 10:41:53 +08:00
TerryM
4a718926da fix: show download buttons on video albums
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 19s
2026-05-27 15:37:46 +08:00
TerryM
7e70798d68 fix: show download buttons on image albums
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 19s
2026-05-27 15:30:40 +08:00
TerryM
f5e858659f feat: add media overflow pickers 2026-05-27 15:28:51 +08:00
TerryM
23a7807bef feat: support multi-video post bubbles 2026-05-27 15:19:31 +08:00
TerryM
1ad599c3ac Prevent mobile horizontal scroll black edge 2026-05-27 15:18:27 +08:00
TerryM
d3d054ad32 Toggle lightbox captions on image click 2026-05-27 13:37:14 +08:00
TerryM
a6fda3cd03 Align compact message bubbles within media column 2026-05-27 13:16:40 +08:00
TerryM
565784b4bb Shrink non-media message bubbles to content 2026-05-27 12:58:35 +08:00
TerryM
1f3acca211 Unify message bubble width
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 21s
2026-05-27 12:46:31 +08:00
TerryM
902300933e Share media attachment download pill 2026-05-27 12:35:47 +08:00
TerryM
8120f6b05c feat: add expandable filter chips 2026-05-27 12:35:47 +08:00
TerryM
54841a4ed9 Show attachment download progress 2026-05-27 12:35:47 +08:00
TerryM
9453777dba Use backend endpoint for attachment downloads 2026-05-27 12:35:47 +08:00
TerryM
68cbce9cf1 style: make message cards fluid width 2026-05-27 12:35:47 +08:00
TerryM
7cd48f767e style: align and widen message stream cards 2026-05-27 12:35:47 +08:00
TerryM
3f0a395f40 feat: unify search with browse page 2026-05-27 12:35:47 +08:00
TerryM
54f71c6ab3 feat: refine language menu and lightbox caption 2026-05-26 18:37:17 +08:00
TerryM
532f0112fd feat: polish message attachment downloads 2026-05-26 18:10:34 +08:00
TerryM
e0629c9df7 fix: allow copying message stream text 2026-05-26 18:10:34 +08:00
TerryM
78bdf73143 feat: enable real posts api by default 2026-05-26 14:07:10 +08:00