انتقل إلى المحتوى
TopClass UI

علامات التبويب

عروض متعددة لشيء واحد، يظهر منها واحد في كل مرة. كل لوحة تُعرض على الخادم وتبقى في HTML، فيُفهرَس النص المخفي أيضًا.

split - الحجم لم يُقَس بعد

علامات التبويب

split - الحجم لم يُقَس بعد

عروض متعددة لشيء واحد، يظهر منها واحد في كل مرة. كل لوحة تُعرض على الخادم وتبقى في HTML، فيُفهرَس النص المخفي أيضًا.

تثبيت
Revenue is up 12% against last quarter.

جرّبه

variant
size
keepMounted

الشيفرة

tabs.tsx
import { TabsList, TabsPanel, TabsRoot, TabsTab } from 'topclassui/tabs'

<TabsRoot defaultValue="overview">
  <TabsList aria-label="Project">
    <TabsTab value="overview">Overview</TabsTab>
    <TabsTab value="activity">Activity</TabsTab>
    <TabsTab value="settings">Settings</TabsTab>
  </TabsList>
  <TabsPanel value="overview">Revenue is up 12% against last quarter.</TabsPanel>
  <TabsPanel value="activity">Three people edited this project today.</TabsPanel>
  <TabsPanel value="settings">Only an owner can rename or delete this project.</TabsPanel>
</TabsRoot>

keepMounted هنا true، وقيمته في Base UI هي false: اللوحات غير النشطة تبقى مخفية في HTML القادم من الخادم.

كل الحالات، بدون تمرير الفأرة

حالتان
The active tab is semibold over a bar of the primary colour.
The active tab sits on a raised surface.

أو استورده من الحزمة

topclassui/tabs
import { TabsRoot, TabsList, TabsPanel, TabsTab } from 'topclassui/tabs'

ثبّت مرة واحدة:npm i topclassui@beta zod

أمثلة

  • أربعة أجزاء بأسماء مسطّحة، ولا يوجد Tabs وحده: TabsRoot وTabsList وTabsTab وTabsPanel. كل جزء يمرّر بقية خصائصه إلى العنصر الذي يرسمه.
  • مرّر دائمًا defaultValue أو value. دونهما لا يُظهر HTML القادم من الخادم أي لوحة حتى الترطيب.
  • اكتب محتوى اللوحة في مكوّن الخادم الخاص بك. اللوحة الثقيلة تأخذ keepMounted={false}، فلا تُضاف حتى تُفتح علامتها.
  • variant على TabsRoot: line يرسم خطًّا تحت العلامة النشطة، وenclosed يرفعها داخل صندوق ملوّن.
  • size على TabsRoot يضبط كل العلامات. custom لا يضبط شيئًا: أعطِ كل TabsTab قيمة className الخاصة به.
  • العلامات الكثيرة تمرّر أفقيًا داخل القائمة، ولا تتحرك الصفحة. التسمية الطويلة تنتهي بعلامة حذف وتُقصّ عند 100 حرف.
  • value مع onValueChange يحتاجان ملفًا فيه 'use client'، كما في المثال المتحكَّم به.
basic
Revenue is up 12% against last quarter.
enclosed
Revenue is up 12% against last quarter.
sizes
The xs tabs of the line look.
The sm tabs of the line look.
The md tabs of the line look.
The lg tabs of the line look.
The xl tabs of the line look.
Tabs sized by their own classes.
The xs tabs of the enclosed look.
The sm tabs of the enclosed look.
The md tabs of the enclosed look.
The lg tabs of the enclosed look.
The xl tabs of the enclosed look.
Tabs sized by their own classes.
disabled
Version 2.4 ships on Monday.
Version 2.4 ships on Monday.
server-content
controlled
Only you can see a draft.
many
Everything under Overview.
Everything under Overview.
long-label
Quarterly revenue, costs and forecast for every region the finance team reports on.
Quarterly revenue, costs and forecast for every region the finance team reports on.
بالعربية، من اليمين إلى اليسار
ارتفعت الإيرادات 12% عن الربع الماضي.

الخصائص

TabsRoot

خصائص TabsRoot
الخاصيةالنوعالافتراضيالحدودالوصف
sizexs | sm | md | lg | xl | custom"md"-TabsRoot: the height, padding and type step of every tab; custom emits none.
variantline | enclosed"line"-TabsRoot: line underlines the active tab, enclosed lifts it onto a raised surface.

TabsList

خصائص TabsList
الخاصيةالنوعالافتراضيالحدودالوصف
aria-labelstring--The name read out when no visible text names the group.
aria-labelledbystring--The id of the visible text that names the group.

TabsPanel

خصائص TabsPanel
الخاصيةالنوعالافتراضيالحدودالوصف
keepMountedbooleantrue-TabsPanel: whether a panel that is not active stays in the HTML, hidden.

TabsTab

لا خصائص خاصة به: يأخذ سمات العنصر الذي يعرضه.

لوحة المفاتيح وإمكانية الوصول

لوحة مفاتيح Tabs
المفاتيحما يفعله
ArrowRightينتقل إلى العلامة التالية، ومن اليمين إلى اليسار إلى العلامة السابقة.
ArrowLeftينتقل إلى العلامة السابقة، ومن اليمين إلى اليسار إلى التالية.
Homeينتقل إلى العلامة الأولى.
Endينتقل إلى العلامة الأخيرة.
Enterيفتح العلامة التي عليها التركيز.
Spaceيفتح العلامة التي عليها التركيز.
Tabيغادر القائمة إلى اللوحة المفتوحة.
  • TabsList يحتاج aria-label أو aria-labelledby: يرفضه TypeScript دون أحدهما.
  • العلامة المعطّلة بـdisabled لا تُفتح، لكن مفاتيح الأسهم تتوقف عندها، فيسمع قارئ الشاشة أنها موجودة.
  • اللوحة محطة Tab مستقلة. مرّر tabIndex={-1} إلى TabsPanel يبدأ بزر أو حقل.

من اليمين إلى اليسار

العلامة الأولى على اليمين. مع TopClassProvider وdirection="rtl" ينقل السهم الأيسر إلى العلامة التالية، ودون مزوّد تبقى المفاتيح من اليسار إلى اليمين.

الخادم والمتصفح

يُعرض على الخادم، والجزء التفاعلي مكوّن متصفح لا يُرسل إلا عند استخدامه.

الملفات: index.tsx, client.tsx.

على الشارة: split - الحجم لم يُقَس بعد.