[{"data":1,"prerenderedAt":835},["ShallowReactive",2],{"article-\u002Farticles\u002F6740a7eb4e9c5b5b417686ea":3},{"id":4,"title":5,"articleId":6,"body":7,"cover":816,"coverThumb":817,"created":818,"date":819,"description":820,"extension":821,"meta":822,"navigation":134,"path":823,"seo":824,"stem":825,"tags":826,"updated":833,"__hash__":834},"articles\u002Farticles\u002F6740a7eb4e9c5b5b417686ea.md","تطبيق الاستايل الداكن Dark mode | جـ4","6740a7eb4e9c5b5b417686ea",{"type":8,"value":9,"toc":812},"minimark",[10,14,17,20,23,26,29,37,40,43,46,49,52,55,58,64,75,88,96,234,253,264,472,475,490,505,512,520,527,646,649,661,676,685,692,784,787,793,805,808],[11,12,13],"p",{},"الحمد لله الذي علَّم بالقلم، علَّم الإنسان ما لم يعلم، والصلاة والسلام على خير معلِّم الناس الخير سيدنا محمد - صلَّى الله عليه وسلم … أما بعد ،،",[11,15,16],{},"الوضع الداكن (Dark mode)، أصبح الصيحة الأبرز التي تتبناها العديد من المنصات، من يوتيوب وواتساب إلى مطوري التطبيقات المستقلين الذين يطلقون نسخًا داكنة بشكل متسارع.",[11,18,19],{},"ولكن كما هو الحال في الموضة، ليست كل الاتجاهات بالضرورة عملية أو ضرورية.",[11,21,22],{},"على سبيل المثال، يعد الوضع الداكن خيارًا مثاليًا لتطبيقات تحرير الصور أو الفيديو، حيث يقلل من إجهاد العين ويساعد المستخدمين على التركيز على التفاصيل الدقيقة للصور أو الفيديوهات.",[11,24,25],{},"على النقيض، يمكن أن يكون تطبيق الوضع الداكن في تطبيق تعليمي مليء بالمقالات أو المحتوى الأكاديمي الطويل أمرًا غير مثالي، إذ أن قراءة النصوص البيضاء على خلفية داكنة لفترات طويلة قد تتسبب في إجهاد العين وتجعل من الصعب على المستخدمين استيعاب المحتوى بشكل مريح.",[11,27,28],{},"في هذا المقال، سنغوص في عالم الوضع الداكن، نحلل جاذبيته وتأثيره، ونكشف الأسباب التي جعلت هذه الميزة الخيار الأول للعديد من التطبيقات والمواقع في عصرنا الرقمي.",[30,31,33],"h2",{"id":32},"الإيجابيات-والسلبيات",[34,35,36],"strong",{},"الإيجابيات والسلبيات",[11,38,39],{},"دعنا نبدأ بالسؤال المهم؛ هل الاستايل الداكن مجرد موضة تصميمية تجذب الأنظار بألوانها الداكنة وأناقتها العصرية، أم أنه يتجاوز حدود الجمال ليقدم فوائد حقيقية تُحدث فرقًا في تجربة المستخدم؟",[11,41,42],{},"يُعد الاستايل الداكن خيارًا مثاليًا لتقليل إجهاد العين، خاصة في ظروف الإضاءة المنخفضة أو أثناء استخدام التطبيق ليلاً، فهو يساعد المستخدمين على تصفح المحتوى لفترات أطول دون الشعور بالإرهاق البصري.",[11,44,45],{},"بالإضافة إلى ذلك، يوفر الوضع الداكن استهلاك الطاقة على الأجهزة التي تعتمد على شاشات OLED و AMOLED، مما يجعله خيارًا اقتصاديًا وملائمًا للمستخدمين المهتمين بالبيئة وتوفير البطارية.",[11,47,48],{},"ومن الناحية البصرية، يضفي الوضع الداكن مظهرًا عصريًا وأنيقًا على التصميم، مما يعزز تجربة المستخدم ويزيد من جاذبية التطبيق.",[11,50,51],{},"على الجانب الآخر ورغم مزاياه العديدة، فإن الوضع الداكن قد يسبب مشاكل في القراءة إذا لم يتم ضبط التباين بين النص والخلفية بشكل مثالي، مما يجعل قراءة النصوص الطويلة تحديًا للمستخدمين.",[11,53,54],{},"كما أن فعالية الوضع الداكن تختلف بين أنواع الشاشات؛ إذ يبدو رائعًا على شاشات OLED ولكنه قد يظهر بشكل باهت وغير جذاب على شاشات LCD.",[11,56,57],{},"علاوة على ذلك، في ظروف الإضاءة القوية مثل ضوء الشمس، قد تصبح الشاشة الداكنة صعبة القراءة بسبب الوهج وانخفاض التباين، مما قد يؤثر على وضوح العناصر.",[30,59,61],{"id":60},"التطبيق-العملي",[34,62,63],{},"التطبيق العملي",[11,65,66,67,74],{},"استكمالا للمقالات السابقة ضمن ",[68,69,71],"a",{"href":70},"\u002Farticles\u002F65bf4be1789ae522f33e4069\u002F",[34,72,73],{},"السلسلة الكاملة لتعلم بناء التطبيقات","، نستعرض في هذا المقال كيفية دعم الاستايل الداكن في التطبيق الذي نعمل على تطويره.",[11,76,77,78,82,83,87],{},"أيضا يجب التوضيح أننا سنعتمد في الشرح على بعض المفاهيم الأساسية مثل التفاعلية (Reactivity) والتراكيب (Composables)، بالتالي إن لم تكن ملم بهذه المفاهيم، أنصحك بالاطلاع على مقال \"",[68,79,81],{"href":80},"\u002Farticles\u002F673e09094e9c5b5b41768284\u002F","فهم التفاعلية في Vue لجعل تطبيقاتك أكثر مرونة وسلاسة","\"، وكذلك مقال \"",[68,84,86],{"href":85},"\u002Farticles\u002F6739ebbd4e9c5b5b41767b17\u002F","إعادة استخدام الكود بذكاء مع Composables فى Nuxt","\"، حيث توفر هذه المقالات أساسًا قويًا يساعدك على تطبيق الأفكار التي سنتناولها هنا بسهولة وكفاءة.",[11,89,90,91,95],{},"لجعل التطبيق يدعم اكثر من استايل، نقوم بتعديل اعدادات مكتبة vuetify من خلال تحديث ملف ",[92,93,94],"code",{},"vuetify.config.ts"," ليصبح بالشكل التالي",[97,98,103],"pre",{"className":99,"code":100,"language":101,"meta":102,"style":102},"language-typescript shiki shiki-themes github-dark","const primary = '#1A237E';\n\nexport default defineVuetifyConfiguration({\n  theme: {\n    themes: {\n      light: {\n        colors: { primary },\n      },\n      dark: {\n        colors: { primary },\n        dark: true,\n      },\n    },\n  },\n  ...\n});\n","typescript","",[92,104,105,129,136,152,158,164,170,176,182,188,193,205,210,216,222,228],{"__ignoreMap":102},[106,107,110,114,118,121,125],"span",{"class":108,"line":109},"line",1,[106,111,113],{"class":112},"snl16","const",[106,115,117],{"class":116},"sDLfK"," primary",[106,119,120],{"class":112}," =",[106,122,124],{"class":123},"sU2Wk"," '#1A237E'",[106,126,128],{"class":127},"s95oV",";\n",[106,130,132],{"class":108,"line":131},2,[106,133,135],{"emptyLinePlaceholder":134},true,"\n",[106,137,139,142,145,149],{"class":108,"line":138},3,[106,140,141],{"class":112},"export",[106,143,144],{"class":112}," default",[106,146,148],{"class":147},"svObZ"," defineVuetifyConfiguration",[106,150,151],{"class":127},"({\n",[106,153,155],{"class":108,"line":154},4,[106,156,157],{"class":127},"  theme: {\n",[106,159,161],{"class":108,"line":160},5,[106,162,163],{"class":127},"    themes: {\n",[106,165,167],{"class":108,"line":166},6,[106,168,169],{"class":127},"      light: {\n",[106,171,173],{"class":108,"line":172},7,[106,174,175],{"class":127},"        colors: { primary },\n",[106,177,179],{"class":108,"line":178},8,[106,180,181],{"class":127},"      },\n",[106,183,185],{"class":108,"line":184},9,[106,186,187],{"class":127},"      dark: {\n",[106,189,191],{"class":108,"line":190},10,[106,192,175],{"class":127},[106,194,196,199,202],{"class":108,"line":195},11,[106,197,198],{"class":127},"        dark: ",[106,200,201],{"class":116},"true",[106,203,204],{"class":127},",\n",[106,206,208],{"class":108,"line":207},12,[106,209,181],{"class":127},[106,211,213],{"class":108,"line":212},13,[106,214,215],{"class":127},"    },\n",[106,217,219],{"class":108,"line":218},14,[106,220,221],{"class":127},"  },\n",[106,223,225],{"class":108,"line":224},15,[106,226,227],{"class":112},"  ...\n",[106,229,231],{"class":108,"line":230},16,[106,232,233],{"class":127},"});\n",[11,235,236,237,240,241,244,245,248,249,252],{},"لاحظ تعديل العنصر ",[92,238,239],{},"themes"," حيث أصبح يحتوي على العنصرين ",[92,242,243],{},"light"," و ",[92,246,247],{},"dark","، وأيضا أضفنا ",[92,250,251],{},"primary"," بحيث تحتوي على اللون الرئيسي المستخدم في التطبيق.",[11,254,255,256,259,260,263],{},"الخطوة التالية، أن ننشئ ملف جديد باسم ",[92,257,258],{},"useMode.ts"," داخل المجلد ",[92,261,262],{},"composables"," ضمن ملفات التطبيق، بحيث يحتوي على الكود التالي",[97,265,267],{"className":99,"code":266,"language":101,"meta":102,"style":102},"export const useMode = () => {\n  const theme = useTheme();\n\n  const isDark = computed({\n    get() {\n      return theme.global.name.value === 'dark';\n    },\n    set() {\n      theme.global.name.value =\n        theme.global.name.value === 'dark' ? 'light' : 'dark';\n    },\n  });\n\n  const themeIcon = computed(() =>\n    theme.global.name.value === 'dark'\n      ? 'mdi-white-balance-sunny'\n      : 'mdi-weather-night'\n  );\n\n  return { isDark, themeIcon };\n};\n",[92,268,269,290,306,310,324,332,348,352,359,367,389,393,398,402,419,429,437,446,452,457,466],{"__ignoreMap":102},[106,270,271,273,276,279,281,284,287],{"class":108,"line":109},[106,272,141],{"class":112},[106,274,275],{"class":112}," const",[106,277,278],{"class":147}," useMode",[106,280,120],{"class":112},[106,282,283],{"class":127}," () ",[106,285,286],{"class":112},"=>",[106,288,289],{"class":127}," {\n",[106,291,292,295,298,300,303],{"class":108,"line":131},[106,293,294],{"class":112},"  const",[106,296,297],{"class":116}," theme",[106,299,120],{"class":112},[106,301,302],{"class":147}," useTheme",[106,304,305],{"class":127},"();\n",[106,307,308],{"class":108,"line":138},[106,309,135],{"emptyLinePlaceholder":134},[106,311,312,314,317,319,322],{"class":108,"line":154},[106,313,294],{"class":112},[106,315,316],{"class":116}," isDark",[106,318,120],{"class":112},[106,320,321],{"class":147}," computed",[106,323,151],{"class":127},[106,325,326,329],{"class":108,"line":160},[106,327,328],{"class":147},"    get",[106,330,331],{"class":127},"() {\n",[106,333,334,337,340,343,346],{"class":108,"line":166},[106,335,336],{"class":112},"      return",[106,338,339],{"class":127}," theme.global.name.value ",[106,341,342],{"class":112},"===",[106,344,345],{"class":123}," 'dark'",[106,347,128],{"class":127},[106,349,350],{"class":108,"line":172},[106,351,215],{"class":127},[106,353,354,357],{"class":108,"line":178},[106,355,356],{"class":147},"    set",[106,358,331],{"class":127},[106,360,361,364],{"class":108,"line":184},[106,362,363],{"class":127},"      theme.global.name.value ",[106,365,366],{"class":112},"=\n",[106,368,369,372,374,376,379,382,385,387],{"class":108,"line":190},[106,370,371],{"class":127},"        theme.global.name.value ",[106,373,342],{"class":112},[106,375,345],{"class":123},[106,377,378],{"class":112}," ?",[106,380,381],{"class":123}," 'light'",[106,383,384],{"class":112}," :",[106,386,345],{"class":123},[106,388,128],{"class":127},[106,390,391],{"class":108,"line":195},[106,392,215],{"class":127},[106,394,395],{"class":108,"line":207},[106,396,397],{"class":127},"  });\n",[106,399,400],{"class":108,"line":212},[106,401,135],{"emptyLinePlaceholder":134},[106,403,404,406,409,411,413,416],{"class":108,"line":218},[106,405,294],{"class":112},[106,407,408],{"class":116}," themeIcon",[106,410,120],{"class":112},[106,412,321],{"class":147},[106,414,415],{"class":127},"(() ",[106,417,418],{"class":112},"=>\n",[106,420,421,424,426],{"class":108,"line":224},[106,422,423],{"class":127},"    theme.global.name.value ",[106,425,342],{"class":112},[106,427,428],{"class":123}," 'dark'\n",[106,430,431,434],{"class":108,"line":230},[106,432,433],{"class":112},"      ?",[106,435,436],{"class":123}," 'mdi-white-balance-sunny'\n",[106,438,440,443],{"class":108,"line":439},17,[106,441,442],{"class":112},"      :",[106,444,445],{"class":123}," 'mdi-weather-night'\n",[106,447,449],{"class":108,"line":448},18,[106,450,451],{"class":127},"  );\n",[106,453,455],{"class":108,"line":454},19,[106,456,135],{"emptyLinePlaceholder":134},[106,458,460,463],{"class":108,"line":459},20,[106,461,462],{"class":112},"  return",[106,464,465],{"class":127}," { isDark, themeIcon };\n",[106,467,469],{"class":108,"line":468},21,[106,470,471],{"class":127},"};\n",[11,473,474],{},"هذا الكود يمثل Composable بسيط يُستخدم لإدارة الوضع الداكن أو الفاتح في التطبيق.",[11,476,477,478,481,482,485,486,489],{},"يبدأ الكود باستخدام ",[92,479,480],{},"useTheme"," للحصول على كائن الثيمات ",[92,483,484],{},"theme"," الذي يحتوي على معلومات حول الوضع الحالي، مثل اسم الوضع ",[92,487,488],{},"theme.global.name.value",".",[11,491,492,493,496,497,500,501,504],{},"يُعرّف المتغير المحسوب ",[92,494,495],{},"isDark"," للتحقق من الوضع الحالي (داكن أو فاتح) وتغيير الوضع عند الحاجة، إذ يحتوي هذا المتغير على خاصية ",[92,498,499],{},"get"," لمعرفة الوضع الحالي، وخاصية ",[92,502,503],{},"set"," لتبديله بين الداكن والفاتح.",[11,506,507,508,511],{},"بالإضافة إلى ذلك، يُعرّف المتغير المحسوب ",[92,509,510],{},"themeIcon"," لإرجاع أيقونة مناسبة بناءً على الوضع الحالي: أيقونة الشمس للوضع الفاتح وأيقونة القمر للوضع الداكن.",[11,513,514,515,244,517,519],{},"في النهاية، يتم إرجاع الكائن الذي يحتوي على ",[92,516,495],{},[92,518,510],{},"، مما يتيح للمكونات الأخرى في التطبيق الاستفادة منه لإدارة الوضع الداكن\u002Fالفاتح وعرض الأيقونات المناسبة في واجهة المستخدم.",[11,521,522,523,526],{},"بعد ذلك، قم بتحديث الزر في ملف ",[92,524,525],{},"header.vue"," الذي سبق إنشاؤه في دروس سابقة، بحيث يتوافق مع الكود التالي",[97,528,532],{"className":529,"code":530,"language":531,"meta":102,"style":102},"language-html shiki shiki-themes github-dark","\u003Ctemplate v-slot:append>\n   \u003Cv-btn :icon=\"themeIcon\" @click=\"isDark = !isDark\" \u002F>\n\u003C\u002Ftemplate>\n\n\u003Cscript lang=\"ts\" setup>\nconst { isDark, themeIcon } = useMode();\n...\n\u003C\u002Fscript>\n","html",[92,533,534,549,577,586,590,610,633,638],{"__ignoreMap":102},[106,535,536,539,543,546],{"class":108,"line":109},[106,537,538],{"class":127},"\u003C",[106,540,542],{"class":541},"s4JwU","template",[106,544,545],{"class":147}," v-slot:append",[106,547,548],{"class":127},">\n",[106,550,551,554,557,560,563,566,569,571,574],{"class":108,"line":131},[106,552,553],{"class":127},"   \u003C",[106,555,556],{"class":541},"v-btn",[106,558,559],{"class":147}," :icon",[106,561,562],{"class":127},"=",[106,564,565],{"class":123},"\"themeIcon\"",[106,567,568],{"class":147}," @click",[106,570,562],{"class":127},[106,572,573],{"class":123},"\"isDark = !isDark\"",[106,575,576],{"class":127}," \u002F>\n",[106,578,579,582,584],{"class":108,"line":138},[106,580,581],{"class":127},"\u003C\u002F",[106,583,542],{"class":541},[106,585,548],{"class":127},[106,587,588],{"class":108,"line":154},[106,589,135],{"emptyLinePlaceholder":134},[106,591,592,594,597,600,602,605,608],{"class":108,"line":160},[106,593,538],{"class":127},[106,595,596],{"class":541},"script",[106,598,599],{"class":147}," lang",[106,601,562],{"class":127},[106,603,604],{"class":123},"\"ts\"",[106,606,607],{"class":147}," setup",[106,609,548],{"class":127},[106,611,612,614,617,619,622,624,627,629,631],{"class":108,"line":166},[106,613,113],{"class":112},[106,615,616],{"class":127}," { ",[106,618,495],{"class":116},[106,620,621],{"class":127},", ",[106,623,510],{"class":116},[106,625,626],{"class":127}," } ",[106,628,562],{"class":112},[106,630,278],{"class":147},[106,632,305],{"class":127},[106,634,635],{"class":108,"line":172},[106,636,637],{"class":112},"...\n",[106,639,640,642,644],{"class":108,"line":178},[106,641,581],{"class":127},[106,643,596],{"class":541},[106,645,548],{"class":127},[11,647,648],{},"هذا الكود يُظهر كيفية دمج خاصية الوضع الداكن\u002Fالفاتح في واجهة المستخدم.",[11,650,651,652,654,655,657,658,660],{},"تم تعديل زر ",[92,653,556],{}," بحيث أصبح يحتوي على أيقونة ديناميكية يتم تحديدها بواسطة المتغير ",[92,656,510],{},"، وعند النقر على الزر، يتم عكس قيمة ",[92,659,495],{}," لتبديل الوضع بين الداكن والفاتح.",[11,662,663,664,667,668,671,672,244,674,489],{},"في الجزء الخاص بالسكربت ",[92,665,666],{},"script setup","، يتم استدعاء وظيفة ",[92,669,670],{},"useMode"," التي تُرجع القيمتين ",[92,673,495],{},[92,675,510],{},[11,677,678,679,681,682,684],{},"يتم ربط ",[92,680,495],{}," بتغيير الوضع، بينما يتم استخدام ",[92,683,510],{}," لتحديث الأيقونة المعروضة بناءً على الوضع الحالي.",[11,686,687,688,691],{},"الخطوة الأخيرة، هي جعل الخلفية الرمادية للموقع ديناميكية بناء على الاستايل الحالي، عن طريق تحديث الكود داخل ملف ",[92,689,690],{},"app.vue"," ليصبح متوافقا مع الكود التالي",[97,693,695],{"className":529,"code":694,"language":531,"meta":102,"style":102},"\u003Cv-main :class=\"isDark ? '' : 'bg-grey-lighten-3'\" style=\"min-height: 100vh\">\n   \u003CNuxtPage \u002F>\n\u003C\u002Fv-main>\n\n\u003Cscript lang=\"ts\" setup>\nconst { isDark } = useMode();\n\u003C\u002Fscript>\n",[92,696,697,722,732,740,744,760,776],{"__ignoreMap":102},[106,698,699,701,704,707,709,712,715,717,720],{"class":108,"line":109},[106,700,538],{"class":127},[106,702,703],{"class":541},"v-main",[106,705,706],{"class":147}," :class",[106,708,562],{"class":127},[106,710,711],{"class":123},"\"isDark ? '' : 'bg-grey-lighten-3'\"",[106,713,714],{"class":147}," style",[106,716,562],{"class":127},[106,718,719],{"class":123},"\"min-height: 100vh\"",[106,721,548],{"class":127},[106,723,724,726,730],{"class":108,"line":131},[106,725,553],{"class":127},[106,727,729],{"class":728},"s6RL2","NuxtPage",[106,731,576],{"class":127},[106,733,734,736,738],{"class":108,"line":138},[106,735,581],{"class":127},[106,737,703],{"class":541},[106,739,548],{"class":127},[106,741,742],{"class":108,"line":154},[106,743,135],{"emptyLinePlaceholder":134},[106,745,746,748,750,752,754,756,758],{"class":108,"line":160},[106,747,538],{"class":127},[106,749,596],{"class":541},[106,751,599],{"class":147},[106,753,562],{"class":127},[106,755,604],{"class":123},[106,757,607],{"class":147},[106,759,548],{"class":127},[106,761,762,764,766,768,770,772,774],{"class":108,"line":166},[106,763,113],{"class":112},[106,765,616],{"class":127},[106,767,495],{"class":116},[106,769,626],{"class":127},[106,771,562],{"class":112},[106,773,278],{"class":147},[106,775,305],{"class":127},[106,777,778,780,782],{"class":108,"line":172},[106,779,581],{"class":127},[106,781,596],{"class":541},[106,783,548],{"class":127},[11,785,786],{},"الآن يمكنك التوجه الى المتصفح والضغط على الأيقونة بشكل القمر أعلي يسار الشاشة، وستلاحظ تحوّل الصفحة إلى الاستايل الداكن.",[11,788,789],{},[790,791],"img",{"alt":102,"src":792},"\u002Fimages\u002F6740aa164e9c5b5b4176871b.webp",[11,794,795,796,489],{},"بإمكانك الوصول إلى الكود الكامل للتطبيق على GitHub عبر ",[68,797,804],{"href":798,"rel":799,"target":803},"https:\u002F\u002Fgithub.com\u002Framyahm2010\u002Fproducts-app",[800,801,802],"nofollow","noopener","noreferrer","_blank","رابط المشروع هنا",[11,806,807],{},"وفقنى الله وإياك إلى ما يحبه ويرضاه ،،",[809,810,811],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s4JwU, html code.shiki .s4JwU{--shiki-default:#85E89D}html pre.shiki code .s6RL2, html code.shiki .s6RL2{--shiki-default:#FDAEB7;--shiki-default-font-style:italic}",{"title":102,"searchDepth":131,"depth":138,"links":813},[814,815],{"id":32,"depth":131,"text":36},{"id":60,"depth":131,"text":63},"\u002Fimages\u002F6740a8204e9c5b5b417686f5.webp","\u002Fimages\u002F6740a8204e9c5b5b417686f5_thumb.webp","2024-11-22T15:48:59.914Z","2024-11-22T16:01:10.000Z","شرح كيفية تصميم تجربة فريدة تتيح للمستخدمين التبديل بسهولة بين الوضع الداكن والفاتح، مع تحقيق توازن مثالي بين الاستايل الجذاب والوظائف العملية.","md",{},"\u002Farticles\u002F6740a7eb4e9c5b5b417686ea",{"title":5,"description":820},"articles\u002F6740a7eb4e9c5b5b417686ea",[827,830],{"id":828,"label":829},"65bf3e32789ae522f33e3fee","سلسلة بناء التطبيقات",{"id":831,"label":832},"66029318e77dd47e3816665c","مكتبة Vuetify","2024-11-22T16:29:45.336Z","3QrH8HdvSfrC6RK7_LIvKkBVQrQkocSj0fsixhT4iQc",1788209571591]