Skip to content

feat(react): add thumbnail component#648

Merged
mihar-22 merged 2 commits intomainfrom
opencode/lucky-wolf-react
Feb 28, 2026
Merged

feat(react): add thumbnail component#648
mihar-22 merged 2 commits intomainfrom
opencode/lucky-wolf-react

Conversation

@mihar-22
Copy link
Copy Markdown
Member

@mihar-22 mihar-22 commented Feb 27, 2026

Ref: #501
Stacked on: #643

Summary

<Thumbnail> React component.

@videojs/react

<Thumbnail>

Props time?: number, className, style, render (via UIComponentProps)
Renders <div> (overflow hidden) + <img>
Sizing max-width / max-height via style prop or CSS → auto-scales proportionally
Data attrs data-loading, data-error, data-hidden
Ref ForwardedRef<HTMLDivElement>
<Thumbnail time={hoverTime} style={{ maxWidth: 200, maxHeight: 150 }} />

Namespace

Thumbnail.Props  // ThumbnailProps
Thumbnail.State  // ThumbnailCore.State

@vercel
Copy link
Copy Markdown

vercel bot commented Feb 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
vjs-10-demo-react Ignored Ignored Preview Feb 28, 2026 0:46am

Request Review

@mihar-22 mihar-22 changed the title feat(react): add thumbnail component with CSS constraint-based sizing feat(react): add thumbnail component Feb 27, 2026
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf-react branch from 070d050 to 88f4d9e Compare February 27, 2026 21:14
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf branch from f745af9 to 2666ebb Compare February 27, 2026 21:18
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf-react branch 3 times, most recently from 31593c3 to 214aa3c Compare February 27, 2026 22:30
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf branch 2 times, most recently from b69a38d to 129c833 Compare February 27, 2026 22:46
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf-react branch from 214aa3c to ad607ca Compare February 27, 2026 22:46
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf branch from 129c833 to 41d0881 Compare February 27, 2026 23:00
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf-react branch from ad607ca to 4cde5ec Compare February 27, 2026 23:00
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf branch from 41d0881 to c94a108 Compare February 27, 2026 23:07
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf-react branch from 4cde5ec to fc0f3de Compare February 27, 2026 23:07
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf branch from c94a108 to f0eae6a Compare February 27, 2026 23:10
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf-react branch 2 times, most recently from d4507b2 to bcd2c26 Compare February 27, 2026 23:14
export const Thumbnail = forwardRef(function Thumbnail(
componentProps: ThumbnailProps,
forwardedRef: ForwardedRef<HTMLDivElement>
) {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

const Thumbnail = forwardRef<HTMLDivElement, ThumbnailProps>(
  function Thumbnail(props, ref) {
    // ...
  }
);

The above is the pattern I've always been exposed to but here's ChatGPTs explanation on why:

Pros
• Best inference + best consumer type: you reliably get ref correctly typed when someone uses .
• Cleaner function signature (no repeated type noise).
• Usually the least-friction with JSX + IDE help.

Cons
• Slightly less “local” explicitness (types are up at the callsite, not on params).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for catching that! Missed it. Fixing...

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ye this is awkward, claude not performing today

@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf-react branch from bcd2c26 to afc293c Compare February 27, 2026 23:18
Base automatically changed from opencode/lucky-wolf to main February 27, 2026 23:19
Add <Thumbnail> React component that uses useLayoutEffect to read
CSS constraints before paint and applies resize imperatively.
Tracks image natural dimensions via onLoad callback.
@mihar-22 mihar-22 force-pushed the opencode/lucky-wolf-react branch from afc293c to b2aafb9 Compare February 28, 2026 00:46
@netlify
Copy link
Copy Markdown

netlify bot commented Feb 28, 2026

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit b2aafb9
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/69a23ad64b9ff4000858faeb
😎 Deploy Preview https://deploy-preview-648--vjs10-site.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link
Copy Markdown
Contributor

📦 Bundle Size Report

Package Size Diff %
@videojs/core 8.21 kB 0 B ░░░░░░░░ 0%
@videojs/element 1.60 kB 0 B ░░░░░░░░ 0%
@videojs/html 10.60 kB 0 B ░░░░░░░░ 0%
@videojs/icons 3.79 kB 0 B ░░░░░░░░ 0%
@videojs/react 10.36 kB +681 B ████████ +6.9% 🔺
@videojs/store 1.94 kB 0 B ░░░░░░░░ 0%
@videojs/utils 2.54 kB 0 B ░░░░░░░░ 0%

Total: 39.05 kB · +681 B · +1.7%


Entry Breakdown

Subpath sizes are the additional bytes on top of the root entry point, measured by bundling root + subpath together and subtracting the root-only size.

@videojs/core
Entry Base PR Diff %
. 3.86 kB 3.86 kB 0 B 0%
./dom 4.36 kB 4.36 kB 0 B 0%
total 8.21 kB 8.21 kB 0 B 0%
@videojs/element
Entry Base PR Diff %
. 817 B 817 B 0 B 0%
./context 823 B 823 B 0 B 0%
total 1.60 kB 1.60 kB 0 B 0%
@videojs/icons
Entry Base PR Diff %
./react 2.27 kB 2.27 kB 0 B 0%
./html 1.52 kB 1.52 kB 0 B 0%
total 3.79 kB 3.79 kB 0 B 0%
@videojs/store
Entry Base PR Diff %
. 1.29 kB 1.29 kB 0 B 0%
./html 468 B 468 B 0 B 0%
./react 199 B 199 B 0 B 0%
total 1.94 kB 1.94 kB 0 B 0%
@videojs/utils
Entry Base PR Diff %
./array 104 B 104 B 0 B 0%
./dom 760 B 760 B 0 B 0%
./events 227 B 227 B 0 B 0%
./function 197 B 197 B 0 B 0%
./object 119 B 119 B 0 B 0%
./predicate 265 B 265 B 0 B 0%
./string 110 B 110 B 0 B 0%
./style 185 B 185 B 0 B 0%
./time 478 B 478 B 0 B 0%
./number 158 B 158 B 0 B 0%
total 2.54 kB 2.54 kB 0 B 0%

ℹ️ How to interpret

Sizes are minified + brotli, measured with esbuild.
Package totals are computed as root size + marginal subpath costs.
Subpath marginal cost = (root + subpath bundled together) − root alone.

Icon Meaning
No change
🔺 Increased ≤ 10%
🔴 Increased > 10%
🔽 Decreased
🆕 New (no baseline)

Run pnpm size locally to check current sizes.

@mihar-22 mihar-22 merged commit 40606ff into main Feb 28, 2026
12 checks passed
@mihar-22 mihar-22 deleted the opencode/lucky-wolf-react branch February 28, 2026 01:04
This was referenced Feb 28, 2026
@github-actions github-actions bot mentioned this pull request Mar 10, 2026
This was referenced Apr 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants