الوحدة 2 · الـ Design Tokens
خطوط إنتاج الـ Tokens: من JSON إلى كل منصّة
20 دقراءة 4 داملأ الفراغات
الدرس في لمحة
جهّز خط إنتاج (pipeline) لبناء الـ tokens يحوّل JSON بصيغة DTCG إلى CSS custom properties لكل theme وإلى صيغ أصلية لكل منصّة، مع الحفاظ على المراجع حتى يبقى تغيير الـ theme وقت التشغيل ممكنًا.
لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.
100%
بعد أن صارت الـ tokens مخزّنة كـ JSON بصيغة DTCG، يجب أن يحوّلها شيء ما إلى ما تستهلكه كل منصّة: CSS custom properties لتطبيق الويب والموقع التسويقي، وSwift لتطبيق السائقين على iOS، وKotlin أو XML لـ Android. هذا الشيء هو خط إنتاج الـ tokens (token pipeline). إنه قطعة كود صغيرة ينتهي كل فريق نظام تصميم بامتلاكها، وإتقانها مبكرًا يوفّر شهورًا من الانحراف لاحقًا.
ماذا يفعل خط الإنتاج
- التحليل (parse): يقرأ كل ملفات المصدر ويدمجها دمجًا عميقًا في شجرة واحدة.
- حلّ المراجع (resolve): يحلّ الأسماء المستعارة مثل
{color.blue.600}، ويرفض المراجع المكسورة أو الدائرية. - التحويل (transform): يحوّل الأسماء والقيم لكل منصّة: يصبح
color.action.bgهو--nw-color-action-bgفي CSS وcolorActionBgفي Swift؛ ويصبح1remهو16نقطة على iOS. - التنسيق (format): يكتب النتيجة في ملف: كتلة custom properties، أو enum في Swift، أو ملف موارد Android.
هذا قلب جانب CSS، وهو صغير بما يكفي لتقرأه دفعة واحدة:
JavaScript
const tokens = {
color: {
$type: 'color',
blue: { 600: { $value: { colorSpace: 'srgb', components: [0.122, 0.353, 0.878], hex: '#1f5ae0' } } },
white: { $value: { colorSpace: 'srgb', components: [1, 1, 1], hex: '#ffffff' } },
action: {
bg: { $value: '{color.blue.600}' },
text: { $value: '{color.white}' },
},
},
space: { $type: 'dimension', 4: { $value: { value: 1, unit: 'rem' } } },
};
// Walk the tree and collect every token with its path.
function flatten(node, path = [], type) {
const t = node.$type ?? type;
if ('$value' in node) return [{ path, type: t, value: node.$value }];
return Object.entries(node)
.filter(([key]) => !key.startsWith('