إنتقل إلى المحتوى الرئيسي

أنماط الواجهة وrender-ui

المصدر: tests/schemas/08-patterns.orb

واجهة Orb تُقاد بالكامل بتأثيرات render-ui داخل انتقالات آلة الحالة (State Machine). لا يوجد JSX، لا ملفات قوالب، لا شجرة مكوّنات منفصلة. آلة الحالة هي منطق الواجهة.

OrderLifecycleFulfillment/orders/track
Orbital Unit = Entity + Traits + Pages

كيف يعمل render-ui

["render-ui", "slot", { "type": "pattern", ...props }]
الوسيطالوصف
"slot"أين يُعرض المكوّن على الصفحة
{ "type": "..." }أي مكوّن نمط يُستخدم
...propsإعدادات خاصة بالنمط

لمسح فتحة:

[
"عرض_واجهة",
"slot",
null
]

الفتحات (Slots)

الفتحات تقسم الصفحة إلى مناطق مسماة. كل فتحة مملوكة لسمة واحدة في كل مرة.

الفتحةالاستخدام النموذجي
mainمنطقة المحتوى الأساسي
modalحوارات النوافذ المنبثقة (نماذج، تأكيدات)
drawerلوحة جانبية (عرض التفاصيل)
sidebarتنقل جانبي دائم
overlayطبقات ملء الشاشة
hud-top / hud-bottomترويسات/تذييلات دائمة
toastإشعارات مؤقتة

فئات الأنماط

أنماط العرض

entity-table - جدول بيانات مع أعمدة وترتيب وإجراءات على الصفوف.

[
"عرض_واجهة",
"main",
{
"نوع": "entity-table",
"كيان": "Product",
"columns": [
"name",
"price",
"stock",
"category"
],
"itemActions": [
{
"حدث": "VIEW",
"تسمية": "View"
},
{
"حدث": "EDIT",
"تسمية": "Edit"
},
{
"حدث": "DELETE",
"تسمية": "Delete"
}
]
}
]

entity-detail - عرض تفاصيل للقراءة فقط لسجل واحد.

[
"عرض_واجهة",
"main",
{
"نوع": "entity-detail",
"كيان": "Product",
"حقول": [
"name",
"description",
"price",
"stock",
"category"
]
}
]

stats - بطاقات إحصائيات لوحة المعلومات (أعداد، إجماليات، ملخصات).

[
"عرض_واجهة",
"main",
{
"نوع": "stats",
"عناصر": [
{
"تسمية": "Total Products",
"value": "@كيان.count"
},
{
"تسمية": "Out of Stock",
"value": "@كيان.outOfStock"
}
]
}
]

أنماط النماذج

form - نموذج مُولَّد تلقائياً لكيان. يعرض جميع الحقول أو مجموعة فرعية محددة.

[
"عرض_واجهة",
"main",
{
"نوع": "form",
"كيان": "Product",
"حقول": [
{
"اسم": "name",
"تسمية": "Product Name",
"مطلوب": true
},
{
"اسم": "description",
"تسمية": "Description",
"نوع": "textarea"
},
{
"اسم": "price",
"تسمية": "Price",
"نوع": "number",
"مطلوب": true
},
{
"اسم": "stock",
"تسمية": "Stock",
"نوع": "number"
},
{
"اسم": "category",
"تسمية": "Category"
}
]
}
]

form-section - نموذج داخل نافذة منبثقة أو درج، مع إرسال/إلغاء مربوط بأحداث.

[
"عرض_واجهة",
"modal",
{
"نوع": "form-section",
"كيان": "Task",
"حقول": [
"title",
"priority",
"dueDate"
],
"submitEvent": "SAVE",
"cancelEvent": "CANCEL"
}
]

مهم: استخدم submitEvent وcancelEvent (وليس onSubmit/onCancel - هذه مُهملة).


أنماط التنقل والترويسة

page-header - عنوان الصفحة مع أزرار إجراءات اختيارية.

[
"عرض_واجهة",
"main",
{
"نوع": "page-header",
"عنوان": "Products",
"subtitle": "Manage your product catalog",
"actions": [
{
"حدث": "CREATE",
"تسمية": "New Product",
"متغير": "primary"
}
]
}
]

breadcrumb - مسار التنقل.

[
"عرض_واجهة",
"main",
{
"نوع": "breadcrumb",
"عناصر": [
{
"تسمية": "Products",
"مسار": "/products"
},
{
"تسمية": "@كيان.name"
}
]
}
]

أنماط الحالة

empty-state - يُعرض عندما لا تحتوي القائمة على عناصر.

[
"عرض_واجهة",
"main",
{
"نوع": "empty-state",
"عنوان": "No products yet",
"وصف": "Add your first product to get started",
"actions": [
{
"حدث": "CREATE",
"تسمية": "Add Product"
}
]
}
]

loading-state - مؤشر تحميل أثناء جلب البيانات.

[
"عرض_واجهة",
"main",
{
"نوع": "loading-state",
"عنوان": "Loading products..."
}
]

الواجهة المدفوعة بالحالة: مثال كامل

قوة render-ui أنها تتغير بناءً على الحالة. حالات مختلفة تعرض مكوّنات مختلفة في نفس الفتحة.

ما تعرضه آلة الحالة لكل حالة:

الحالةفتحة main تعرض
listingentity-table مع إجراءات على الصفوف
viewingentity-detail مع الحقول
editingform في وضع التعديل
creatingform مع جميع الحقول

مرجع خصائص الإجراءات

الإجراءات تُحدد داخل خصائص النمط، وليس كأنماط منفصلة.

النمطكيفية ربط الإجراءات
entity-tableitemActions: [{ "event": "EDIT", "label": "Edit" }]
entity-detailactions: [{ "event": "EDIT", "label": "Edit" }]
form-sectionsubmitEvent: "SAVE", cancelEvent: "CANCEL"
page-headeractions: [{ "event": "CREATE", "label": "New" }]
empty-stateactions: [{ "event": "CREATE", "label": "Add" }]

الربط في خصائص الأنماط

خصائص الأنماط تقبل الربط لقراءة البيانات المباشرة:

الربطيُحل إلى
@entity.fieldقيمة حقل الكيان الحالي
@payload.fieldحقل حمولة الحدث
@stateاسم الحالة الحالية
@nowالطابع الزمني الحالي

مثال:

{
"نوع": "stats",
"عنوان": "Cart Total: $@entity.total"
}

الخطوات التالية