VideoPlayer
عرض شاملimport { VideoPlayer, VideoPlayerLabels, VideoRatio } from '@nili/ui';هذه صفحة العرض الشامل الخاصة بالمكتبة، معروضة حيّة. غيّر اللغة أو السمة من الأعلى وسَتتبعك.
أساسي
عناصر تحكّم مخصّصة فوق عنصر فيديو حقيقي. وكل ما لا يُعرف يُنشر على عنصر الوسائط، فتعمل preload وcrossOrigin وأحداث الوسائط دون أن يعيد هذا المكوّن تعريفها — باستثناء className التي تنسّق الحاوية.
import { VideoPlayer } from "@nili/ui"
export function Example() {
return (
<VideoPlayer
src="/media/flower.mp4"
poster="/media/flower.jpg"
labels={{
root: "Product tour",
play: "Play",
pause: "Pause",
seek: "Seek",
fullscreen: "Full screen",
}}
/>
)
}نسب العرض إلى الارتفاع
يحدّد ratio الإطار لا الملف — كي لا يقفز التخطيط عند وصول البيانات الوصفية. ويعيد auto الصندوق إلى أبعاد الفيديو نفسه.
import { VideoPlayer } from "@nili/ui"
export function Example() {
return (
<>
<VideoPlayer src={src} ratio="16/9" />
<VideoPlayer src={src} ratio="4/3" />
<VideoPlayer src={src} ratio="1/1" />
<VideoPlayer src={src} ratio="auto" />
</>
)
}كثافة عناصر التحكّم
يضبط size حجم عناصر التحكّم لا حجم الفيديو. استخدم sm حين يجلس المشغّل في بطاقة أو شريط جانبي ويزدحم الإطار بشريط بالحجم الكامل.
import { VideoPlayer } from "@nili/ui"
export function Example() {
return (
<>
<VideoPlayer src={src} size="md" />
<VideoPlayer src={src} size="sm" />
</>
)
}التسميات التوضيحية والتشغيل التلقائي وعناصر التحكّم الأصلية
يقبل tracks عناصر track للتسميات التوضيحية — أرفقها، فالفيديو المكتوم ذاتي التشغيل غير مفهوم بدونها. والتشغيل التلقائي لا يعمل إلا مكتومًا في كل المتصفّحات، ولذلك يترافقان. ويعيد nativeControls الشريط إلى المتصفّح حين تحتاج قوائم صورة-داخل-صورة والبثّ.
import { VideoPlayer } from "@nili/ui"
export function Example() {
return (
<>
<VideoPlayer
src={src}
tracks={
<track
kind="captions"
srcLang="en"
label="English"
src="/media/flower.en.vtt"
default
/>
}
/>
{/* muted autoplay, looping — a background clip */}
<VideoPlayer src={src} autoPlay loop muted />
{/* the browser's own controls */}
<VideoPlayer src={src} nativeControls />
</>
)
}الأحداث والتنقّل
onPlayChange وonTimeChange للتحليلات ولمزامنة النص المكتوب. ويحدّد seekStep مقدار قفزة مفاتيح الأسهم — الافتراضي خمس ثوانٍ، ومحاضرة طويلة تريد أكثر عادةً.
import { VideoPlayer } from "@nili/ui"
export function Example() {
return (
<VideoPlayer
src={src}
seekStep={10}
onPlayChange={(playing) => track(playing ? "play" : "pause")}
onTimeChange={(time) => syncTranscript(time)}
/>
)
}VideoButton
داخليVideoControls
داخليمحاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| visible | 'true' | 'false' | true |
VideoElement
داخليVideoOverlayButton
داخليVideoPlayer
extends Omit< ComponentPropsWithoutRef<'video'>, 'src' | 'poster' | 'controls' | 'children' | 'autoPlay' | 'loop' | 'muted' >
محاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| size | md | sm | md | |
| ratio | 16/9 | 4/3 | 1/1 | auto | 16/9 |
باقي الخصائص
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| children | ReactNode | — | |
| aria-label | string | — | |
| src* | string | — | |
| poster | string | — | |
| tracks | ReactNode | — | Caption and subtitle tracks. Pass real `<track>` elements — captions are the accessibility story of this component, not an optional extra. |
| autoPlay | boolean | false | |
| loop | boolean | false | |
| muted | boolean | false | Starts muted. Required by browsers for autoplay to be allowed at all. |
| nativeControls | boolean | false | Hand control back to the browser's own UI. Worth doing when the platform player is better than anything you would ship — picture-in-picture, AirPlay, and caption styling all come free with it. |
| seekStep | number | 5 | Seconds jumped by the arrow keys. |
| onPlayChange | (playing: boolean) => void | — | |
| onTimeChange | (currentTime: number) => void | — | |
| locale | string | — | BCP-47 tag driving the timestamps (`'fa'` → Persian). Defaults to the ambient locale from `NiliProvider`. |
| labels | VideoPlayerLabels | — |