التوثيق
الأهداف ومبادئ التصميم
يوفّر Native Shell عروضًا وتفاعلًا أصليين عبر iOS وAndroid وmacOS وWindows وLinux والويب. يملك التطبيق تصميمه البصري. ويخدم نموذج مكوّنات واحد التطبيقات الكاملة والميزات المضمّنة والواجهات المُسلَّمة ديناميكيًا.
#أساس أصلي وتصميم يملكه التطبيق
يعتمد NSH على العروض والنصوص وبنية الإدخال في كل منصة، ويكيّف التفاعل مع الجهاز: التنقل بلوحة المفاتيح، والإدخال بالمؤشر واللمس، وتحرير النصوص، والتمرير، وإمكانية الوصول (مقدمة).
يحدد التطبيق الألوان والخطوط والمسافات والأشكال وردود فعل الحالات والحركة. يمكن لشاشة الإعدادات أن تتبع هوية التطبيق على iOS وAndroid، بينما يتبع الإدخال والتنقل أعراف كل جهاز. ويصقل المصممون هذه اللغة البصرية عبر الأنماط وأجزاء المكوّنات.
العرض الأصلي هو أساس الرسم. أما العنصر المُنسَّق بنمط النظام فهو خيار بصري وسلوكي محدد. تتيح عناصر التحكم الشائعة في NSH سلوكًا مشتركًا وأجزاءً قابلة للتخصيص، ليتمكن المطورون من بناء أنظمة التصميم الخاصة بتطبيقاتهم.
#التكامل الأصلي عمليًا
يشمل الأساس الأصلي الرسم، والحركة المرتبطة بالإطارات، والإدخال، ودلالات إمكانية الوصول. على iOS وAndroid، يستخدم Input حقول النص الخاصة بالمنصة: تتولى المنصة التحرير وقوائم التحديد وطرق الإدخال وخدمات الملء التلقائي المدعومة. يصف التطبيق الحقل عبر autoComplete، مثل current-password أو postal-code، ويوفّر النظام الاقتراحات المتاحة وفق إعداداته وخدماته (النماذج ولوحة المفاتيح). ولا يتعارض تنسيق الحقل مع الحفاظ على هذا التكامل مع النظام.
هذا فرق معماري عن رسم حقل النص بالكامل داخل مُصيِّر مخصص: فالمُصيِّر المخصص يوفّر تكاملًا خاصًا به مع خدمات تحرير النصوص وإمكانية الوصول في النظام، بينما يستخدم NSH عناصر النص الأصلية للمنصة حيثما توفرها الواجهة الخلفية. وتحدد وثائق كل واجهة خلفية تكاملها، بما في ذلك محرر NSH الخاص على Windows والواجهة الخلفية المضمِّنة GPUI (المنصات).
يستلهم NSH طبقاته من فصل GPUI Kit بين سلوك المكوّن وتصميمه البصري، ويبني على هذا المبدأ بالاعتماد على عروض المنصة وبنية الإدخال فيها. ويعمل التكامل الأصلي والتصميم الذي يملكه التطبيق معًا في هذا النموذج بأكمله.
#نموذج مكوّنات واحد عبر المنصات
يعني المفتاح (Switch) الشيء نفسه على الهاتف وسطح المكتب والويب. يوفّر nsh/base الحالة ومعالجة الإدخال والتركيز وإمكانية الوصول، بينما ينسّق التطبيق مسار Switch ومقبضه وحالاته. وتتبع أزرار الاختيار ومربعات الاختيار المبدأ نفسه.
| المسؤولية | الموضع | مثال |
|---|---|---|
| الرسم والتخطيط والتفاعلية والبيئة | nsh-core وnsh ووحدات وقت التشغيل | العروض، النصوص، الإشارات، الأنماط |
| السلوك المشترك والبنية الميسّرة | nsh-base، ويُستورد باسم nsh/base في TSX | Button، Checkbox، Switch، Tabs |
| التصميم البصري والمكوّنات المنسّقة | التطبيق أو مكتبة مجتمعية | عناصر تحكم بهوية التطبيق، بطاقات، صفوف النماذج |
| القدرات الخاصة بالمنصة | nsh/mobile، nsh/desktop | شريط التنقل على الجوال، أزرار النافذة على سطح المكتب |
لعناصر التحكم الشائعة موضع واحد عابر للمنصات في nsh/base. أما وحدات المنصات فتُحدَّد بحسب الغرض ودلالات المنصة. يخدم TabBar التنقل الرئيسي على الجوال؛ ويبدّل Tabs محتوى علامات التبويب عبر المنصات. ولكل منهما دور مختلف. تقبل nsh/mobile القدرات ذات دلالات التفاعل الخاصة بالجوال؛ أما الاختلافات في مظهر عنصر التحكم الشائع أو حجمه أو لونه أو حركته فمكانها المكوّن المشترك وتنسيق التطبيق. وينبغي تصميم الإشعار أو التنبيه العابر ذي الدور المشترك أولًا حول عقد واحد عابر للمنصات، مع تكييف طريقة العرض داخليًا.
يمكن للمكوّن المشترك تكييف تفاعله داخليًا: تُفتح القائمة كنافذة منبثقة على سطح المكتب وكورقة سفلية على الهاتف، بينما يستخدم التطبيق واجهة برمجية واحدة ويحدد مظهره بنفسه. أما العروض التي يديرها النظام، مثل رؤوس التنقل والتنبيهات، فتتبع قواعد العرض الموثقة لكل منصة. ويمكن للتطبيقات إتاحة مكوّناتها وخدماتها الأصلية عبر واجهات التضمين.
#الأساس غير المنسّق وطبقة مكتبة المكوّنات
يملك NSH العناصر الأولية والأساس غير المنسّق (nsh-core وnsh-base). وتملك التطبيقات والمكتبات الخارجية طبقة مكتبة المكوّنات المنسّقة، وهو الدور الذي يؤديه gpui-component في GPUI Kit. يمنح هذا التقسيم كل منتج سيطرة على لغته البصرية مع إعادة استخدام الأجزاء الصعبة من تنفيذ المكوّنات.
تأتي الخبرة وراء هذا الخيار من GPUI Kit. فقد نشأت مكوّناته المنسّقة من العمل على Longbridge Pro. ومع حاجة التطبيقات إلى تصاميم مختلفة أكثر فأكثر، دفعت ضغوط التخصيص المستخدمين إلى نسخ المكوّنات وتفريعها. وقد جعل استخراج الأساس المشترك إلى gpui-base السلوك قابلًا لإعادة الاستخدام عبر تلك التصاميم. وتبقى المكوّنات المنسّقة مفيدة كمرجع تصميمي وللتطبيقات التي تناسبها حدود تخصيصها؛ أما الأساس فيمنح التطبيقات الأخرى تحكمًا مباشرًا في العرض.
يطبّق NSH هذا الدرس منذ البداية. يتولى nsh/base السلوك المعقد والتفاعل والحالة التفاعلية والتركيز وإمكانية الوصول والعرض المتكيف، مع اختبارات في الطبقة المالكة لكل سلوك. ويشمل ذلك بُنى أكبر مثل Dock. وتبني التطبيقات تصاميم متنوعة على هذا الأساس عبر الأنماط والحالات والفتحات والأجزاء. وتتبع مساهمات المكوّنات الحدّ نفسه: فالإعدادات البصرية الافتراضية والنسخ ذات الهوية الخاصة تنتمي إلى مكوّنات التطبيق أو الجهات الخارجية. أما العروض التي يديرها النظام والموثقة وإعدادات القراءة الافتراضية في TextView فتحتفظ بعقودها الخاصة (البنية المعمارية).
#ما الذي يعرضه Gallery
مواقع العروض التوضيحية وGallery تطبيقات أمثلة منسّقة. وتختبر تدرجاتها وظلالها وزواياها المستديرة وانتقالاتها وحركتها قدرات التخصيص في NSH وتوفّر أمثلة برمجية. هذه الخيارات تخص العروض التوضيحية وGallery؛ أما المكوّنات الأساسية القابلة لإعادة الاستخدام فتتيح السلوك والأجزاء التي تقف تحتها. ويمكن للتطبيقات استعارة الأمثلة أو بناء لغة بصرية مختلفة.
أي مكتبة منسّقة تُوزَّع بشكل مستقل ستنتمي إلى طبقة التطبيق/المجتمع الموصوفة أعلاه. ويمثّل تنسيق Gallery اتجاهًا تصميميًا واحدًا؛ أما مدى ملاءمته لمنتج بعينه فقرار تصميمي يخص ذلك المنتج.
#Rust وTSX على محرك واحد
تتشارك تطبيقات Rust وشاشات TSX والمشاريع المختلطة العناصر الأولية والمكوّنات الأساسية والإشارات والتخطيط. يوفّر Rust منطق التطبيق المُصرَّف والمكوّنات الأصلية القابلة لإعادة الاستخدام. ويدعم TSX التكرار السريع والوحدات المُسلَّمة وقت التشغيل (البناء باستخدام Rust).
يحدّث المحرك الارتباطات التي تعتمد على إشارات تغيّرت، ويجمّع عمليات العرض في دفعات. ويعود تخطيط النصوص والحركات الأصلية والإدخال إلى المحرك وواجهاته الخلفية الخاصة بالمنصات (البنية المعمارية). ويُقيَّم الأداء بأحمال عمل تطبيقية قابلة لإعادة الإنتاج (الأداء).
#التضمين والتسليم الديناميكي والذكاء الاصطناعي
يضع تطبيق أصلي قائم عرض NSH حيث تنتمي الميزة، ويتيح مكوّناته الأصلية وخدمات المضيف الخاصة به. وتستخدم التطبيقات المستقلة وقت التشغيل ونموذج المكوّنات نفسيهما (المنصات).
تملك وحدات TSX المُسلَّمة ديناميكيًا حالتها ومنطقها وتخطيطها. وتحدد الحزم الموقّعة الناشرين الذين يثق بهم المضيف؛ وتحدد حدود البيئة المعزولة والقدرات ما يُسمح للوحدات بفعله. والمضيف هو من يختار الثقة والأذونات معًا (الحزم الموقّعة، البيئة المعزولة والقدرات).
تتبع الواجهات التي يولّدها الذكاء الاصطناعي هذا العقد: تولَّد TSX وفق واجهات برمجية معلنة، ثم تُفحص وتُختبر، وتُبنى الوحدة وتُوقَّع، ثم تُتحقَّق وتُشغَّل وفق سياسة المضيف. وتجعل التصريحات المولّدة والوثائق المقروءة للنماذج واختبارات CLI سير العمل هذا قابلًا للفحص والتكرار (الاختبار والتتبع).
#كيف توجّه هذه الأهداف الإضافات الجديدة
- حدّد سلوك المستخدم، وهل هو مشترك عبر المنصات.
- ضع السلوك المشترك في العنصر الأولي أو المكوّن الأساسي الموجود، مع إتاحة الحالة والأجزاء لتخصيص التطبيق.
- ضع القدرات ذات الدلالات الخاصة بمنصة معينة في وحدة تلك المنصة، مع توثيق نطاق انطباقها وطريقة تركيبها مع الواجهة المشتركة.
- ابنِ المكوّنات المنسّقة في التطبيق أو في المكتبة المجتمعية.
- تحقّق من السلوك وإمكانية الوصول والتخطيط والإدخال على المنصات المتأثرة، ووثّق العقد العام باللغتين.
تُبقي هذه المبادئ التصميم البصري مرنًا، وواجهات المكوّنات المشتركة متسقة، وتكامل المنصات صريحًا مع نمو NSH.