{"id":"l-fig-4-3","courseId":"figma-ui-design","lang":"ar","kind":"lesson","summary":"جهّز شاشات Steady للمطوّرين، وعلّمها جاهزة للتطوير، ودوّن ملاحظات السلوك وإمكانية الوصول، واستخدم في Dev Mode لوحة inspect والـ variables ومقارنة التغييرات ليبقى التسليم حوارًا.","html":"<p>يفتح مطوّر ملف Steady لأول مرة. دون مساعدة، يواجه ستين frame، وثلاث محاولات استكشافية لشاشة Today، وصفحة اسمها <code dir=\"ltr\">Scratch</code>، وعليه أن يخمّن أيّ نسخة هي الحقيقية، وماذا يحدث حين يكون الاسم أطول من اللازم، وهل ذلك التركوازي token أم استثناء لمرة واحدة. كل تخمين يصبح خطأً، أو نقاشًا على Slack، أو كليهما.</p>\n<p>التسليم (handoff) هو إزالة هذه التخمينات. معظمه أنجزته بالفعل: الطبقات المسمّاة، والـ Auto layout، والـ components بخصائصها، والـ variables. هذا الدرس يضيف الطبقة الأخيرة.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">نظّم الملف من أجل قارئه</h2>\n<p>قبل أي شيء آخر، اجعل الملف سهل التصفّح لشخص لم يكن حاضرًا:</p>\n<ul>\n<li>انقل المحاولات الاستكشافية خارج صفحة <code dir=\"ltr\">Screens</code>. يجب ألّا يرى المطوّرون إلا ما سيُبنى.</li>\n<li>جمّع الشاشات في <strong>sections</strong> حسب المسار: “Check-in” و&quot;Add habit&quot; و&quot;Habit detail&quot;. ورتّب كل مسار من اليسار إلى اليمين بالترتيب الذي يتنقّل به الناس.</li>\n<li>أضف الحالات، لا المسار المثالي فقط: شاشة Today الفارغة (“No habits yet”)، وعادة بـ streak من 1,000 يوم، وحالة الخطأ في حقل النص، وحالة التحميل في Habit detail.</li>\n<li>امنح كل section وصفًا من سطر واحد في أعلاه: ما الغرض من المسار، وأيّ أسئلة مفتوحة.</li>\n</ul>\n<h2 id=\"sec-2\" tabindex=\"-1\">Ready for dev</h2>\n<p>حين يستقرّ مسار ما، حدّد الـ section الخاص به وعلّمه <strong>Ready for dev</strong>. وقت كتابة هذا الدرس، يمكنك فعل ذلك على الـ sections والـ frames والـ components، وهو متاح في الخطط المدفوعة.</p>\n<p>الحالات إشارة لا قفل. إذا عدّلت تصميمًا بعد تعليمه جاهزًا، يعلّمه Figma تلقائيًا بـ <strong>Changed</strong>، فيعرف المطوّرون أن عليهم النظر مجدّدًا، ويستطيعون مقارنة النسخة الحالية بالنسخة التي عُلّمت جاهزة. وحين تنتهي من تغييره، تعلّمه بأن تغييراته اكتملت ويمكنك إضافة ملاحظة قصيرة. وفي خطتي Organization وEnterprise توجد أيضًا حالة <strong>Completed</strong> للتصاميم التي بُنيت.</p>\n<figure class=\"diagram\"><svg class=\"diagram-svg\" focusable=\"false\" viewBox=\"0 0 680 210\" role=\"img\" aria-labelledby=\"l-fig-4-3-t1\"><defs><marker id=\"arrow-l-fig-4-3-1\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" class=\"d-arrowhead\"/></marker></defs>\n  <title id=\"l-fig-4-3-t1\">ينتقل التصميم من In design إلى Ready for dev، ويضبط المصمّم ذلك. تعديله بعد ذلك يضبط Changed تلقائيًا؛ فيعلّمه المصمّم بأن تغييراته اكتملت ويعود إلى Ready for dev. وحين يُبنى، يمكن تعليمه Completed في الخطط الأعلى.</title>\n  <rect class=\"d-box\" x=\"10\" y=\"70\" width=\"120\" height=\"56\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"70\" y=\"103\" text-anchor=\"middle\">In design</text>\n  <rect class=\"d-box-primary\" x=\"190\" y=\"70\" width=\"140\" height=\"56\" rx=\"12\"/>\n  <text class=\"d-label-strong\" x=\"260\" y=\"103\" text-anchor=\"middle\">Ready for dev</text>\n  <rect class=\"d-box-warn\" x=\"390\" y=\"10\" width=\"130\" height=\"50\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"455\" y=\"40\" text-anchor=\"middle\">Changed</text>\n  <rect class=\"d-box-success\" x=\"390\" y=\"136\" width=\"130\" height=\"56\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"455\" y=\"169\" text-anchor=\"middle\">Completed</text>\n  <path class=\"d-arrow\" d=\"M132 98 L188 98\" marker-end=\"url(#arrow-l-fig-4-3-1)\"/>\n  <path class=\"d-arrow\" d=\"M330 84 L388 44\" marker-end=\"url(#arrow-l-fig-4-3-1)\"/>\n  <path class=\"d-arrow d-dashed\" d=\"M400 62 L332 92\" marker-end=\"url(#arrow-l-fig-4-3-1)\"/>\n  <path class=\"d-arrow\" d=\"M330 112 L388 156\" marker-end=\"url(#arrow-l-fig-4-3-1)\"/>\n  <text class=\"d-label-muted\" x=\"560\" y=\"32\">يُضبط تلقائيًا</text>\n  <text class=\"d-label-muted\" x=\"560\" y=\"52\">عند التعديل</text>\n  <text class=\"d-label-muted\" x=\"380\" y=\"96\" text-anchor=\"end\">اكتملت التغييرات</text>\n  <text class=\"d-label-muted\" x=\"540\" y=\"172\">Org وEnterprise</text>\n</svg><figcaption>حالات Dev Mode أثناء انتقال التصميم من مرحلة التصميم إلى البناء</figcaption></figure>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">خطأ شائع</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>التعليم بالجاهزية مبكرًا</span></p>\n<p>تعليم مسار بأنه جاهز وأنت ما زلت تستكشف يعني أن المطوّرين يبدؤون ببناء شيء سيتغيّر، وتتحوّل شارة Changed إلى ضجيج يتعلّمون تجاهله. علّمه جاهزًا حين تكون مرتاحًا لو أُطلق غدًا كما هو بالضبط.</p>\n</aside>\n<h2 id=\"sec-3\" tabindex=\"-1\">ما يراه المطوّرون في Dev Mode</h2>\n<p>ينتقل المطوّرون إلى <strong>Dev Mode</strong> بمفتاح التبديل في شريط الأدوات أو بـ <code dir=\"ltr\">Shift+D</code>. ويحتاج خطة مدفوعة ومقعد Full أو Dev وقت كتابة هذا الدرس. تحديد طبقة يعرض لوحة <strong>inspect</strong> الخاصة بها:</p>\n<ul>\n<li><strong>القياسات والتخطيط</strong>: الأحجام والـ padding وقيم الـ gap، مع وصف الـ Auto layout بمصطلحات قريبة من CSS flexbox.</li>\n<li><strong>الـ Variables بأسمائها</strong>: تظهر تعبئة زر التعليم على أنها <code dir=\"ltr\">color/action/primary</code> مع قيمتها، والـ padding على أنه <code dir=\"ltr\">space/4</code>. وإذا ضبطت صيغة الكود (code syntax) على الـ variables (الدرس 3.3)، يرى المطوّرون اسم الـ token الدقيق الذي يستخدمه كودهم.</li>\n<li><strong>الـ Components وخصائصها</strong>: الـ component الخاص بالـ instance، وقيم الـ variant والخصائص، ووصف الـ component الذي كتبته في الدرس 3.5.</li>\n<li><strong>مقتطفات الكود</strong>: كود CSS وiOS وAndroid مولَّد، نقطة بداية لا كود إنتاج. وفي خطتي Organization وEnterprise، تستطيع الفرق ربط كود الـ components الحقيقي عبر Code Connect فيعرض المقتطف الـ component الخاص بها بدلًا من ذلك.</li>\n<li><strong>الأصول (Assets)</strong>: الأيقونات والصور المعلَّمة للتصدير، قابلة للتنزيل بالصيغة المناسبة.</li>\n</ul>\n<p>هنا يؤتي كل الانضباط السابق ثماره. الـ component ذو الطبقات المسمّاة والـ variables المرتبطة يُقرأ كمواصفات؛ أما الـ frame المفصول برموز hex خام فيُقرأ كأحجية.</p>\n<h2 id=\"sec-4\" tabindex=\"-1\">دوّن ما لا تستطيع البكسلات قوله</h2>\n<p>بعض الأشياء غير مرئية في frame ثابت. الملاحظات التوضيحية تضعها مباشرة على التصميم. اضغط <code dir=\"ltr\">Shift+T</code> (أو استخدم أداة الملاحظات)، وحدّد طبقة واكتب ملاحظة، أو ثبّت خاصية لتبقى ظاهرة. وقت كتابة هذا الدرس، للملاحظات فئات مثل Development وInteraction وAccessibility وContent، ويستطيع المطوّرون التصفية بها. والقياسات (<code dir=\"ltr\">Shift+M</code>) تثبّت المسافات على لوحة العمل.</p>\n<p>في Steady، دوّن:</p>\n<ul>\n<li><strong>قواعد المحتوى</strong>: أسماء العادات تلتفّ إلى سطرين، ثم تُقصّ بعلامة حذف؛ والـ streaks فوق 999 تُعرض “999+”.</li>\n<li><strong>السلوك</strong>: النقر على زر التعليم يعلّم العادة منجزة لليوم؛ ويمكن التراجع عن ذلك حتى منتصف الليل.</li>\n<li><strong>إمكانية الوصول</strong>: الـ accessible names لأزرار الأيقونات، وترتيب التركيز في لوحة New habit، ومساحة النقر 44 × 44، والبديل عند تقليل الحركة.</li>\n<li><strong>الحالات الحدّية للبيانات</strong>: كيف تبدو القائمة الفارغة والتحميل الفاشل، مع الإشارة إلى الـ frames التي تعرضها.</li>\n</ul>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">نصيحة</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>اشرح لهم خطوة بخطوة</span></p>\n<p>احجز ثلاثين دقيقة مع المطوّرين حين يصبح مسار ما جاهزًا. تنقّل في الـ prototype، وأشر إلى الملاحظات، واسأل عمّا هو غير واضح. ثم حين تجهز أول نسخة مبنية، راجعها جنبًا إلى جنب مع التصميم. التسليم حوار يبدأ هنا، لا ملف ترميه من فوق جدار.</p>\n</aside>\n<p>لقد صمّمت Steady، وحوّلته إلى نظام، وصنعت له prototype، وفحصته، وسلّمته. الدرس الأخير عن المهارتين اللتين تحوّلان هذا العمل إلى مسيرة مهنية: إدارة جلسة نقد تصميمي، ورواية القصة في دراسة حالة.</p>\n","toc":[{"id":"sec-1","text":"نظّم الملف من أجل قارئه","level":2},{"id":"sec-2","text":"Ready for dev","level":2},{"id":"sec-3","text":"ما يراه المطوّرون في Dev Mode","level":2},{"id":"sec-4","text":"دوّن ما لا تستطيع البكسلات قوله","level":2}],"takeaways":["يبدأ التسليم بملف منظّم؛ الـ sections لكل مسار، والطبقات المسمّاة، والـ components المرتبطة بالـ variables تؤدّي معظم العمل.","علامة Ready for dev تخبر المطوّرين أيّ التصاميم مستقرّة، ويعلّم Figma التصميم بأنه تغيّر حين يعدّله أحدهم بعد ذلك.","يعرض Dev Mode القياسات والـ variables بأسمائها ومقتطفات الكود، فيقرأ المطوّرون الـ tokens بدل التخمين من البكسلات.","الملاحظات التوضيحية (annotations) تحمل ما لا تستطيع البكسلات حمله، مثل السلوك والحالات الحدّية والـ accessible names وترتيب التركيز.","التسليم حوار، فاشرح المسار للمطوّرين خطوة بخطوة وراجع الشاشات المبنية مقابل التصميم."],"further":[{"title":"Guide to Dev Mode","url":"https://help.figma.com/hc/en-us/articles/15023124644247-Guide-to-Dev-Mode"},{"title":"Dev Mode statuses and notifications","url":"https://help.figma.com/hc/en-us/articles/26781702258583-Dev-Mode-statuses-and-notifications"},{"title":"Add measurements and annotate designs","url":"https://help.figma.com/hc/en-us/articles/20774752502935-Add-measurements-and-annotate-designs-in-Dev-Mode"}],"quiz":[{"q":"<p>بعد تعليم مسار تسجيل العادة بـ Ready for dev، غيّرت الـ padding في صف العادة. ماذا يرى المطوّر؟</p>","options":[{"text":"لا شيء، لأن Ready for dev يجمّد التصميم.","why":"Ready for dev إشارة لا قفل. يستطيع المصمّمون التعديل، ويسجّل Figma أنهم فعلوا."},{"text":"يظهر التصميم بأنه تغيّر، ويستطيع المطوّر مقارنته بالنسخة التي عُلّمت جاهزة.","why":"صحيح. حالة Changed تُطبَّق تلقائيًا، ومقارنة النسخ تُظهر بالضبط ما الذي تغيّر."},{"text":"يتراجع Figma عن التعديل تلقائيًا.","why":"لا يتراجع Figma عن تعديلاتك أبدًا. إنه يُبرزها حتى لا يُفاجأ المطوّرون."},{"text":"يجب على المطوّر إلغاء التعليم ثم إعادته ليرى التعديلات.","why":"يرى المطوّرون أحدث تصميم وحالة التغيير دون أي خطوات إضافية."}],"answer":1},{"q":"<p>أيّ ملاحظة مكانها annotation لا التصميم البصري؟</p>","options":[{"text":"نصف قطر زوايا صف العادة 12.","why":"يعرض Dev Mode نصف القطر والـ variable الخاص به من التصميم مباشرة. تدوينه يضيف ضجيجًا."},{"text":"خط العنوان هو الـ style ‏Large title.","why":"اسم الـ text style ظاهر في Dev Mode. لا حاجة إلى ملاحظة."},{"text":"خلفية الشاشة بيضاء.","why":"التعبئة والـ variable الخاص بها ظاهران في Dev Mode. الملاحظات لما لا يُرى."},{"text":"أسماء العادات تلتفّ إلى سطرين، ثم تُقصّ بعلامة حذف (…)؛ والـ accessible name لزر الإضافة هو “Add habit”.","why":"صحيح. قواعد الالتفاف والـ accessible names سلوك لا يمكنك قراءته من frame ثابت."}],"answer":3},{"q":"<p>في Dev Mode يرى المطوّر تعبئة زر التعليم على أنها <code dir=\"ltr\">color/action/primary</code> لا</p>","options":[{"text":"يستطيع المطوّر استخدام الـ token المقابل في الكود، فيعمل الوضع الداكن وتغييرات لوحة الألوان المستقبلية تلقائيًا.","why":"صحيح. الـ variables في Dev Mode تربط التصميم بنظام الـ tokens الذي يستخدمه الكود أصلًا."},{"text":"رموز hex غير مسموحة في كود الإنتاج.","why":"رموز hex تعمل في الكود. المشكلة أن رمز hex المنسوخ لا يتحدّث مع الثيم أبدًا."},{"text":"يجعل الملف يُحمَّل أسرع في Dev Mode.","why":"الأداء ليس السبب. الفائدة في الاسم المشترك."}],"answer":0}],"exercise":{"kind":"order","items":["clean","sections","states","annotate","ready","walkthrough","review"],"title":"سلّم مسار تسجيل العادة","prompt":"<p>مسار تسجيل العادة مصمّم ومختبَر. رتّب خطوات التسليم عند صوفيا، من تجهيز الملف حتى فحص ما بُني.</p>\n","hints":["يجب ألّا يرى المطوّرون أبدًا مسارًا معلَّمًا بأنه جاهز وما زال يحتوي محاولات استكشافية أو حالات ناقصة.","الملاحظات تصف الـ frames النهائية، فتأتي بعد وجود الحالات، وقبل إشارة الجاهزية.","نظّف، ثم جمّع، ثم أضف الحالات، ثم دوّن الملاحظات، ثم علّم بالجاهزية، ثم اشرح، ثم راجع البناء."],"explanation":"<p>أولًا <strong>نظّف</strong> حتى لا يبقى إلا التصاميم الحقيقية، ثم <strong>جمّع الشاشات في section</strong> بترتيب المسار. أضف <strong>الحالات الناقصة</strong> (الفارغة، والخطأ، والمحتوى الطويل) لأن الملاحظات والمطوّرين كليهما يحتاجونها. <strong>دوّن</strong> السلوك وإمكانية الوصول على تلك الـ frames النهائية. عندئذٍ فقط <strong>علّم الـ section بـ Ready for dev</strong>، فتعني الإشارة «مستقرّ». <strong>اشرح المسار للمطوّرين</strong> خطوة بخطوة، وأخيرًا <strong>راجع البناء</strong> مقابل التصميم. التعليم بالجاهزية قبل ذلك سيُطلق شارات Changed مع كل تعديل لاحق ويعلّم المطوّرين تجاهلها.</p>\n","checkLabels":{},"itemText":{"clean":"انقل المحاولات الاستكشافية والنسخ القديمة خارج صفحة Screens.","sections":"جمّع شاشات تسجيل العادة المتبقّية في section، مرتّبة من اليسار إلى اليمين بترتيب المسار.","states":"أضف الحالات الناقصة إلى ذلك الـ section: القائمة الفارغة، واسم العادة الطويل، والخطأ، والتحميل.","annotate":"دوّن قواعد المحتوى والسلوك والـ accessible names وترتيب التركيز.","ready":"علّم الـ section بـ Ready for dev.","walkthrough":"اشرح للمطوّرين الـ prototype والملاحظات خطوة بخطوة، وأجب عن أسئلتهم.","review":"راجع أول نسخة مبنية جنبًا إلى جنب مع التصميم وسجّل الإصلاحات المطلوبة."}},"words":702,"readMinutes":4}