Modal
תיבת דו-שיח מודאלית המבוססת על אלמנט הדו-שיח המובנה.
- דפדפנים
- Chrome 123+Firefox 121+Safari 17.5+
- שכבה
- 0
- גודל חבילה דחוסה
- 875 B
- מגבלת פריסה כפויה
- 0 ms
- מגבלת Axe
- 0
- תואם SSR
- כן
- מבוסס על
- elements/dialog
- חוזה מפורסם
- סביבת בדיקות
מגרש ניסויים
API
Modal
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
id* | string | — | מזהה ייחודי לתיבת הדו-שיח שאליו מכוונים כפתורי הפתיחה והסגירה, כדי שהתיבה תיפתח ותיסגר לפני ההידרציה. |
trigger* | ReactNode | — | תוכן הכפתור שפותח את תיבת הדו-שיח. |
title* | ReactNode | — | כותרת המוצגת בתוך תיבת הדו-שיח ומשמשת כשמה הנגיש. |
description | ReactNode | — | טקסט משלים המוצג מתחת לכותרת ומקושר באמצעות aria-describedby. |
children | ReactNode | — | תוכן הגוף, המוצג ב-ModalBody הנגלל. |
closeLabel | string | "Close" | השם הנגיש של אייקון הסגירה בכותרת העליונה. |
footer | ReactNode | — | שורת פעולות המקובעת מתחת לגוף. יש להציב כאן ModalClose לכפתור סגירה תחתון. |
size | "sm" | "md" | "lg" | "full" | "md" | מדרגת רוחב (24, 28, 40rem). הערך full ממלא את אזור התצוגה. נכתב ל-data-size; לרוחב מותאם אישית יש לדרוס את --uiify-modal-inline-size. |
align | "center" | "start" | "center" | מיקום אנכי בטאבלט ובמחשב. בטלפונים מוצג לוח תחתון אלא אם size הוא full. |
dismiss | "any" | "closerequest" | "none" | "any" | closedby: הערך any מוסיף לחיצות על הרקע, closerequest מאפשר רק Escape, ו-none רק את הפקדים שלכם. Safari אינו תומך ב-closedby, ולכן Escape תמיד סוגר; UIEnhance מטפל בלחיצות על הרקע (any) ובהחלקת הלוח (כשאינו none). |
backdrop | "opaque" | "blur" | "none" | "opaque" | מראה הרקע. נכתב ל-data-backdrop. |
className | string | — | המחלקה המוחלת על אלמנט השורש של Modal. |
slotProps | ModalSlotProps | — | מאפיינים מובנים לחלקים הפנימיים ש-Modal יוצר; השורש שלו מקבל מאפיינים מובנים ישירות. |
ModalTrigger
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
target* | string | — | מזהה ה-ModalContent שכפתור זה פותח; הדפדפן מאתר אותו בזמן הלחיצה, ולכן לא מופעל JavaScript שלנו. |
children | ReactNode | — | תוכן כפתור הפתיחה. |
as | TAs & NativeButtonAs<TAs> | "button" | רכיב המעביר מאפיינים ו-ref לכפתור מובנה; תגיות אחרות נדחות, כי פקודות הפעלה דורשות כפתור אמיתי. |
ModalContent
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
id* | string | — | מזהה ייחודי שמספק המשתמש בספרייה; כפתור הפתיחה ויעד הסגירה מפנים אליו. |
size | "sm" | "md" | "lg" | "full" | "md" | מדרגת רוחב (24, 28, 40rem). הערך full ממלא את אזור התצוגה. נכתב ל-data-size; לרוחב מותאם אישית יש לדרוס את --uiify-modal-inline-size. |
align | "center" | "start" | "center" | מיקום אנכי בטאבלט ובמחשב. בטלפונים מוצג לוח תחתון אלא אם size הוא full. |
dismiss | "any" | "closerequest" | "none" | "any" | closedby: הערך any מוסיף לחיצות על הרקע, closerequest מאפשר רק Escape, ו-none רק את הפקדים שלכם. Safari אינו תומך ב-closedby, ולכן Escape תמיד סוגר; UIEnhance מטפל בלחיצות על הרקע (any) ובהחלקת הלוח (כשאינו none). |
backdrop | "opaque" | "blur" | "none" | "opaque" | מראה הרקע. נכתב ל-data-backdrop. |
children | ReactNode | — | תוכן תיבת הדו-שיח. |
ModalClose
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
target* | string | — | מזהה ה-ModalContent שכפתור זה סוגר. |
children | ReactNode | — | תוכן כפתור הסגירה. |
as | TAs & NativeButtonAs<TAs> | "button" | רכיב המעביר מאפיינים ו-ref לכפתור מובנה; תגיות אחרות נדחות, כי פקודות הפעלה דורשות כפתור אמיתי. |
ModalHeader
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
children | ReactNode | — | שורה עליונה מקובעת המכילה את הכותרת, התיאור ופקד הסגירה. |
ModalTitle
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
children | ReactNode | — | השם הנגיש של תיבת הדו-שיח; יש להפנות למזהה שלו מ-aria-labelledby. |
ModalDescription
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
children | ReactNode | — | טקסט משלים; יש להפנות למזהה שלו מ-aria-describedby. |
ModalBody
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
children | ReactNode | — | אזור הגלילה בין הכותרת העליונה לתחתית. |
ModalFooter
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
children | ReactNode | — | שורת פעולות המקובעת מתחת לגוף. |
ModalGrabber
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
children | ReactNode | — | ידית גרירה דקורטיבית בלוח הנייד; ההחלקה מתחילה כאן. |
ModalClientContent (@gunkin/uiify/components/modal/client)
| מאפיין | טיפוס | ברירת מחדל | תיאור |
|---|---|---|---|
id* | string | — | מזהה ייחודי שמספק המשתמש בספרייה; חלקי הפתיחה והסגירה מפנים אליו. |
open | boolean | — | מצב פתיחה מבוקר, הקובע לאחר ההידרציה. |
defaultOpen | boolean | — | מצב התחלתי לא מבוקר, המוחל באמצעות showModal() לאחר ההידרציה; ה-HTML מהשרת נשאר סגור. |
onOpenChange | (open: boolean) => void | — | מופעלת פעם אחת לכל שינוי מובנה או מתוכנת עם המצב החדש, לרבות פעם אחת בעת הטעינה אם הדפדפן פתח את התיבה לפני ההידרציה. |
onOpenChangeComplete | (open: boolean) => void | — | מופעלת פעם אחת לכל מעבר פתיחה או סגירה לאחר סיום מעברי ה-CSS שלו, או מיד אם אין מעברים, לרבות מעבר defaultOpen לאחר ההידרציה; לעולם לא כשתיבת הדו-שיח נשארת ללא שינוי. |
size | "sm" | "md" | "lg" | "full" | "md" | מדרגת רוחב (24, 28, 40rem). הערך full ממלא את אזור התצוגה. נכתב ל-data-size; לרוחב מותאם אישית יש לדרוס את --uiify-modal-inline-size. |
align | "center" | "start" | "center" | מיקום אנכי בטאבלט ובמחשב. בטלפונים מוצג לוח תחתון אלא אם size הוא full. |
dismiss | "any" | "closerequest" | "none" | "any" | closedby: הערך any מוסיף לחיצות על הרקע, closerequest מאפשר רק Escape, ו-none רק את הפקדים שלכם. Safari אינו תומך ב-closedby, ולכן Escape תמיד סוגר; UIEnhance מטפל בלחיצות על הרקע (any) ובהחלקת הלוח (כשאינו none). |
backdrop | "opaque" | "blur" | "none" | "opaque" | מראה הרקע. נכתב ל-data-backdrop. |
children | ReactNode | — | תוכן תיבת הדו-שיח. |
מקלדת
| מקש | פעולה |
|---|---|
| Escape | סגירה (רק המודאל העליון במקרה של קינון) |
| Tab | מעבר מחזורי של המיקוד בתוך המודאל |
| Shift+Tab | סדר Tab הפוך |
נגישות
אלמנט <dialog> מובנה שנפתח באמצעות מפעיל עם command="show-modal" לפני הרצת JavaScript כלשהו. הדפדפן אחראי למודאליות, לכליאת המיקוד, ל-Escape ולהחזרת המיקוד; הסגירה משתמשת ב-request-close כך ש-onCancel יכול למנוע אותה. סמל הסגירה בכותרת תמיד קיים. בטלפונים המודאל הוא יריעה תחתונה; החלקה כלפי מטה והקשה על הרקע הן קיצורי דרך, ולעולם אינן הדרך היחידה לצאת.
נקודות חיבור לעיצוב
data-uiify-modaldata-part="trigger|content|header|title|description|body|footer|grabber|close"data-size="sm|lg|full"data-align="start"data-backdrop="blur|none"--uiify-trigger-open (inside [data-uiify-modal][data-part="root"])--uiify-modal-inline-size (dialog width)