[{"data":1,"prerenderedAt":34327},["ShallowReactive",2],{"category-development-ar":3,"category-posts-development-ar":22,"author-ar-رائد-البحري":34303,"category-ar-development":34321},{"id":4,"title":5,"description":6,"extension":7,"image":8,"locale":9,"meta":10,"slug":19,"stem":20,"__hash__":21},"categories_ar/ar/categories/التطوير.md","التطوير","مقالات ودروس تقنية للمطورين.","md","/images/development.avif","ar",{"path":11,"body":12},"/ar/categories/alttwyr",{"type":13,"value":14,"toc":15},"minimark",[],{"title":16,"searchDepth":17,"depth":17,"links":18},"",3,[],"development","ar/categories/التطوير","iAFLGiYfzEgt9hcfsLTBp6qi9RJQEO5DYBkdozNtZGQ",[23,1344,1647,2890,7295,8273,11997,16733,18912,22943,23880,24064,25608,28150,32633],{"id":24,"title":25,"author":26,"body":27,"category":19,"description":1302,"extension":7,"image":1303,"isDraft":1304,"isFeatured":1305,"locale":9,"meta":1306,"navigation":1305,"path":1331,"publishedAt":1332,"readingTime":1333,"seo":1334,"stem":1335,"tags":1336,"updatedAt":1342,"__hash__":1343},"articles_ar/mindset-النمو-في-التعلم.md","mindset النمو: السر لإتقان أي مهارة في 2025","رائد-البحري",{"type":13,"value":28,"toc":1257},[29,33,45,48,67,72,77,80,97,102,113,118,135,139,142,159,163,174,178,195,199,203,209,215,229,235,239,244,258,263,269,273,277,283,288,299,304,309,314,325,329,334,338,349,353,358,364,368,373,377,388,392,397,403,407,412,416,426,430,435,440,450,454,459,463,474,478,483,488,493,497,501,506,582,588,592,598,603,614,620,624,630,636,641,647,652,658,662,667,678,683,694,699,710,715,723,727,733,739,745,749,754,759,765,779,783,788,793,798,804,808,812,818,823,829,834,838,844,849,863,869,880,886,897,901,907,912,927,932,937,951,955,959,965,971,977,982,996,1002,1007,1012,1016,1021,1026,1032,1043,1048,1052,1057,1061,1066,1072,1078,1083,1097,1102,1106,1111,1115,1119,1125,1130,1136,1140,1145,1151,1155,1160,1166,1170,1175,1189,1193,1198,1209,1213,1216,1219,1223,1226,1232,1235,1240,1251],[30,31,32],"p",{},"mindset الخاص بك هو العامل الأكثر أهمية في تعلم أي شيء جديد - البرمجة، اللغات، التصميم، أو أي مهارة أخرى. ليس معدل ذكائك، عمرك، أو خلفيتك التعليمية. إنه كيف تفكر في قدرتك على التعلم والنمو.",[30,34,35,36,40,41,44],{},"هذا ليس حافزاً عاطفياً. عقود من البحث من قبل عالمة النفس كارول دويك وخبراء الأعصاب أثبتت أن معتقداتك حول ذكائك وقدراتك تؤثر مباشرة على نجاحك. الناس ذوو ",[37,38,39],"strong",{},"mindset النمو"," يتفوقون دائماً على أولئك ذوي الموهبة الأكبر لكن ",[37,42,43],{},"mindset الثابت",".",[30,46,47],{},"في هذا الدليل، ستتعلم:",[49,50,51,55,58,61,64],"ul",{},[52,53,54],"li",{},"العلم وراء mindset الثابت مقابل النمو",[52,56,57],{},"لماذا \"أنا لست جيداً في هذا\" يدمر تقدمك",[52,59,60],{},"استراتيجيات عملية لتطوير mindset نمو",[52,62,63],{},"كيف تتجاوز متلازمة المحتال والشك الذاتي",[52,65,66],{},"أمثلة حقيقية من مطورين ذاتيي التعلم ناجحين",[68,69,71],"h2",{"id":70},"mindset-الاثنان-الثابت-مقابل-النمو","Mindset الاثنان: الثابت مقابل النمو",[73,74,76],"h3",{"id":75},"mindset-الثابت-أنا-إما-جيد-في-هذا-أو-لست-كذلك","Mindset الثابت: \"أنا إما جيد في هذا أو لست كذلك\"",[30,78,79],{},"يعتقد الناس ذوو mindset الثابت:",[49,81,82,85,88,91,94],{},[52,83,84],{},"الذكاء والموهبة سمات ثابتة",[52,86,87],{},"أنت إما \"شخص رياضيات\" أو لست كذلك",[52,89,90],{},"الصراع يعني عدم امتلاك القدرة",[52,92,93],{},"الفشل يعرفك",[52,95,96],{},"الجهد عديم الفائدة إذا لم يكن لديك موهبة طبيعية",[30,98,99],{},[37,100,101],{},"أفكار نموذجية:",[49,103,104,107,110],{},[52,105,106],{},"\"أنا لست شخص برمجة\"",[52,108,109],{},"\"الآخرون يفهمون هذا بسهولة، يجب أن أكون غبياً\"",[52,111,112],{},"\"إذا كان عليّ أن أحاول بهذا القدر، أنا لست مصيراً لهذا\"",[30,114,115],{},[37,116,117],{},"النتائج:",[49,119,120,123,126,129,132],{},[52,121,122],{},"تجنب التحديات",[52,124,125],{},"الاستسلام بسهولة عند مواجهة العقبات",[52,127,128],{},"رؤية الجهد كعديم الفائدة",[52,130,131],{},"تجاهل التعليقات المفيدة",[52,133,134],{},"الشعور بالتهديد من نجاح الآخرين",[73,136,138],{"id":137},"mindset-النمو-يمكنني-تعلم-أي-شيء-بالجهد-والاستراتيجية","Mindset النمو: \"يمكنني تعلم أي شيء بالجهد والاستراتيجية\"",[30,140,141],{},"يعتقد الناس ذوو mindset النمو:",[49,143,144,147,150,153,156],{},[52,145,146],{},"يمكن تطوير الذكاء",[52,148,149],{},"تنمو القدرات من خلال الالتزام والعمل الجاد",[52,151,152],{},"الصراع جزء من التعلم",[52,154,155],{},"الفشل مؤقت ومفيد",[52,157,158],{},"الجهد هو طريق الإتقان",[30,160,161],{},[37,162,101],{},[49,164,165,168,171],{},[52,166,167],{},"\"أنا لا أفهم هذا بعد، لكنني سأفعل\"",[52,169,170],{},"\"هذا صعب، مما يعني أن دماغي يبني اتصالات جديدة\"",[52,172,173],{},"\"ما الذي يمكنني تعلمه من هذا الخطأ؟\"",[30,175,176],{},[37,177,117],{},[49,179,180,183,186,189,192],{},[52,181,182],{},"احتضان التحديات",[52,184,185],{},"المثابرة رغم الانتكاسات",[52,187,188],{},"رؤية الجهد كضروري للإتقان",[52,190,191],{},"التعلم من النقد",[52,193,194],{},"إيجاد الإلهام في نجاح الآخرين",[68,196,198],{"id":197},"العلم-لماذا-يهم-mindset","العلم: لماذا يهم Mindset",[73,200,202],{"id":201},"اللدونة-العصبية-دماغك-يمكن-أن-يتغير-فعلياً","اللدونة العصبية: دماغك يمكن أن يتغير فعلياً",[30,204,205,208],{},[37,206,207],{},"الاكتشاف الثوري:","\nلقرون، اعتقد العلماء أن الدماغ ثابت بعد الطفولة. الآن نعرف أن هذا خطأ.",[30,210,211,214],{},[37,212,213],{},"اللدونة العصبية"," تعني:",[49,216,217,220,223,226],{},[52,218,219],{},"دماغك يتغير فعلياً عند التعلم",[52,221,222],{},"تتشكل اتصالات عصبية جديدة بالممارسة",[52,224,225],{},"المهارات التي تكافح معها الآن يمكن أن تصبح تلقائية",[52,227,228],{},"العمر ليس عائقاً (يمكنك التعلم في 50 بنفس سهولة 20)",[30,230,231,234],{},[37,232,233],{},"مثال حقيقي:","\nدماغ سائقي سيارات الأجرة في لندن يتغير فعلياً أثناء حفظ المدينة. يزداد حجم الهيبوكامبوس (مركز الذاكرة) لديهم. إذا كان حفظ 25,000 شارع يمكن أن يعيد توصيل دماغك، فكذلك تعلم البرمجة.",[73,236,238],{"id":237},"دراسة-mindset-النمو","دراسة Mindset النمو",[30,240,241],{},[37,242,243],{},"بحث كارول دويك:",[49,245,246,249,252,255],{},[52,247,248],{},"درست آلاف الطلاب على عقود",[52,250,251],{},"وجدت أن mindset كان مؤشراً أفضل للنجاح من معدل الذكاء",[52,253,254],{},"تحسن الطلاب الذين تعلموا أن أدمغتهم يمكن أن تنمو وتتغير",[52,256,257],{},"انخفض طلاب mindset الثابت عند مواجهة التحديات",[30,259,260],{},[37,261,262],{},"النتيجة الرئيسية:",[264,265,266],"blockquote",{},[30,267,268],{},"\"عندما تعلم الطلاب أن أدمغتهم يمكن أن تنمو وتتغير بالجهد، أظهروا دافعاً أكبر وإنجازاً أعلى.\"",[68,270,272],{"id":271},"الفخاخ-الشائعة-لـ-mindset-الثابت-وكيفية-الهروب-منها","الفخاخ الشائعة لـ Mindset الثابت (وكيفية الهروب منها)",[73,274,276],{"id":275},"الفخ-1-أنا-كبير-جداً-للتعلم","الفخ #1: \"أنا كبير جداً للتعلم\"",[30,278,279,282],{},[37,280,281],{},"المعتقد:"," \"يجب أن أكون قد بدأت في العشرينيات. الآن أنا متأخر جداً.\"",[30,284,285],{},[37,286,287],{},"الواقع:",[49,289,290,293,296],{},[52,291,292],{},"اللدونة العصبية تعمل في أي عمر",[52,294,295],{},"الخبرة الحياتية تعطيك مزايا فريدة",[52,297,298],{},"العديد من المطورين الناجحين بدأوا بعد 30، 40، وحتى 50",[30,300,301],{},[37,302,303],{},"إعادة صياغة Mindset النمو:",[264,305,306],{},[30,307,308],{},"\"خبرتي الحياتية تساعدني في فهم المشكلات بعمق. أنا أجلب منظوراً قيماً لا يملكه المطورون الأصغر سنًا.\"",[30,310,311],{},[37,312,313],{},"أمثلة حقيقية:",[49,315,316,319,322],{},[52,317,318],{},"Tara Reed: بدأت البرمجة في 34، تدير الآن شركة تعليم تقني ناجحة",[52,320,321],{},"Wendy Zenone: تعلمت البرمجة في 36، مهندس برمجيات أول الآن",[52,323,324],{},"Bill Gates: لا يزال يتعلم لغات برمجة جديدة في 68",[73,326,328],{"id":327},"الفخ-2-أنا-لست-شخص-رياضياتمنطق","الفخ #2: \"أنا لست شخص رياضيات/منطق\"",[30,330,331,333],{},[37,332,281],{}," \"لم أكن جيداً في الرياضيات، لذا لا أستطيع البرمجة.\"",[30,335,336],{},[37,337,287],{},[49,339,340,343,346],{},[52,341,342],{},"معظم البرمجة تتطلب حسابات أساسية، لا رياضيات متقدمة",[52,344,345],{},"التفكير المنطقي مهارة، لا موهبة",[52,347,348],{},"يتحسن التعرف على الأنماط بالممارسة",[30,350,351],{},[37,352,303],{},[264,354,355],{},[30,356,357],{},"\"لم أمارس التفكير المنطقي كثيراً، لكنني يمكنني تطوير هذه المهارة.\"",[30,359,360,363],{},[37,361,362],{},"حقيقة قاسية:","\nالعديد من المطورين الناجحين كافحوا في الرياضيات في المدرسة. الفرق؟ مارسوا حل المشكلات باستمرار.",[73,365,367],{"id":366},"الفخ-3-يأتي-هذا-بسهولة-للآخرين","الفخ #3: \"يأتي هذا بسهولة للآخرين\"",[30,369,370,372],{},[37,371,281],{}," \"الجميع يفهم هذا فوراً. يجب أن أكون غبياً.\"",[30,374,375],{},[37,376,287],{},[49,378,379,382,385],{},[52,380,381],{},"أنت ترى نتائجهم النهائية فقط، لا صراعاتهم",[52,383,384],{},"وسائل التواصل الاجتماعي تضخم أسطورة \"العبقري\"",[52,386,387],{},"الجميع يكافح، لكنهم لا ينشرون عن ذلك",[30,389,390],{},[37,391,303],{},[264,393,394],{},[30,395,396],{},"\"هذا الشخص بذل مئات الساعات لم أرها. أنا على جدول زمني خاص بي.\"",[30,398,399,402],{},[37,400,401],{},"تذكر:","\nلكل منشور \"تعلم React في عطلة نهاية أسبوع!\"، هناك 1000 شخص يكافح بهدوء. الناس الذين \"يفهمون بسرعة\" غالباً ما لديهم مزايا مخفية (خبرة سابقة، وقت أكثر، موارد أفضل)",[73,404,406],{"id":405},"الفخ-4-لا-يجب-أن-أحاول-بهذا-القدر","الفخ #4: \"لا يجب أن أحاول بهذا القدر\"",[30,408,409,411],{},[37,410,281],{}," \"إذا كنت ذكياً، سيكون هذا أسهل.\"",[30,413,414],{},[37,415,287],{},[49,417,418,423],{},[52,419,420],{},[37,421,422],{},"الصراع = التعلم",[52,424,425],{},"المهام الصعبة تبني المهارات",[30,427,428],{},[37,429,303],{},[264,431,432],{},[30,433,434],{},"\"هذا صعب، مما يعني أن دماغي يبني اتصالات جديدة. هذا هو المكان الذي يجب أن أكون فيه بالضبط.\"",[30,436,437],{},[37,438,439],{},"تغيير Mindset:",[441,442,447],"pre",{"className":443,"code":445,"language":446},[444],"language-text","الثابت: \"لماذا هذا صعب جداً بالنسبة لي؟\"\nالنمو: \"هذا التحدي يجعلني أذكى.\"\n","text",[448,449,445],"code",{"__ignoreMap":16},[73,451,453],{"id":452},"الفخ-5-متلازمة-المحتال","الفخ #5: متلازمة المحتال",[30,455,456,458],{},[37,457,281],{}," \"أنا لا أنتمي إلى هنا. أنا محتال. الجميع يعرف أكثر مني.\"",[30,460,461],{},[37,462,287],{},[49,464,465,468,471],{},[52,466,467],{},"70% من الناس يعانون من متلازمة المحتال",[52,469,470],{},"يؤثر على المطورين الأول حتى",[52,472,473],{},"الشعور بالاحتيال غالباً يعني أنك تتعلم",[30,475,476],{},[37,477,303],{},[264,479,480],{},[30,481,482],{},"\"من المفترض أن أشعر بعدم الراحة - أنا أدفع حدودي. هذا نمو.\"",[30,484,485],{},[37,486,487],{},"اعتراف مطور أول:",[264,489,490],{},[30,491,492],{},"\"أبرمج منذ 15 عاماً. أبحث عن بناء جملة أساسية يومياً وأشعر بالاحتيال عند رؤية كود رائع. هذا لا يختفي أبداً - تتعلم فقط العمل معه.\"",[68,494,496],{"id":495},"بناء-mindset-النمو-استراتيجيات-عملية","بناء Mindset النمو: استراتيجيات عملية",[73,498,500],{"id":499},"_1-غير-حديثك-الذاتي","1. غير حديثك الذاتي",[30,502,503],{},[37,504,505],{},"ترجمات Mindset الثابت → النمو:",[507,508,509,522],"table",{},[510,511,512],"thead",{},[513,514,515,519],"tr",{},[516,517,518],"th",{},"Mindset الثابت",[516,520,521],{},"Mindset النمو",[523,524,525,534,542,550,558,566,574],"tbody",{},[513,526,527,531],{},[528,529,530],"td",{},"\"أنا لست جيداً في هذا\"",[528,532,533],{},"\"أنا لست جيداً في هذا بعد\"",[513,535,536,539],{},[528,537,538],{},"\"هذا صعب جداً\"",[528,540,541],{},"\"هذا يتطلب وقتاً وجهداً\"",[513,543,544,547],{},[528,545,546],{},"\"أستسلم\"",[528,548,549],{},"\"سأجرب نهجاً مختلفاً\"",[513,551,552,555],{},[528,553,554],{},"\"ارتكبت خطأ\"",[528,556,557],{},"\"الأخطاء تساعدني في التعلم\"",[513,559,560,563],{},[528,561,562],{},"\"هم أذكياء جداً\"",[528,564,565],{},"\"ما الاستراتيجية التي يستخدمونها يمكنني تعلمها؟\"",[513,567,568,571],{},[528,569,570],{},"\"هذا جيد بما فيه الكفاية\"",[528,572,573],{},"\"كيف يمكنني تحسين هذا؟\"",[513,575,576,579],{},[528,577,578],{},"\"لا أستطيع فعل هذا\"",[528,580,581],{},"\"لا أستطيع فعل هذا وحيداً - بعد. دعني أطلب المساعدة\"",[30,583,584,587],{},[37,585,586],{},"الممارسة اليومية:","\nاصطياد نفسك باستخدام لغة mindset الثابت وإعادة صياغتها واعياً.",[73,589,591],{"id":590},"_2-احتضن-كلمة-بعد","2. احتضن كلمة \"بعد\"",[30,593,594,595],{},"أقوى كلمة في التعلم: ",[37,596,597],{},"بعد",[30,599,600],{},[37,601,602],{},"أمثلة:",[49,604,605,608,611],{},[52,606,607],{},"\"أنا لا أفهم التكرار بعد\"",[52,609,610],{},"\"لا أستطيع بناء تطبيق ويب كامل بعد\"",[52,612,613],{},"\"لم أحصل على وظيفة بعد\"",[30,615,616,619],{},[37,617,618],{},"لماذا تعمل:","\n\"بعد\" يعني أن الوجهة موجودة، لم تصل إليها بعد.",[73,621,623],{"id":622},"_3-أعد-تعريف-الفشل","3. أعد تعريف الفشل",[30,625,626,629],{},[37,627,628],{},"Mindset الثابت:"," الفشل دليل على أنني لا أستطيع",[30,631,632,635],{},[37,633,634],{},"Mindset النمو:"," الفشل بيانات عن ما لا يعمل",[30,637,638],{},[37,639,640],{},"كيفية معالجة الفشل:",[441,642,645],{"className":643,"code":644,"language":446},[444],"عند فشلك في شيء:\n\n1. ما الذي تعلمته؟\n2. ما الذي سأفعله بشكل مختلف في المرة القادمة؟\n3. ما شيء واحد يمكنني تحسينه؟\n4. هل أنا أبعد مما كنت أمس؟\n",[448,646,644],{"__ignoreMap":16},[30,648,649],{},[37,650,651],{},"مثال:",[441,653,656],{"className":654,"code":655,"language":446},[444],"مقابلة فاشلة:\n❌ الثابت: \"أنا فاشل في البرمجة. لن أحصل على وظيفة أبداً.\"\n✅ النمو: \"كافحت مع أسئلة الخوارزميات. أحتاج ممارسة LeetCode 30 دقيقة يومياً لمدة شهرين.\"\n",[448,657,655],{"__ignoreMap":16},[73,659,661],{"id":660},"_4-العملية-على-النتيجة","4. العملية على النتيجة",[30,663,664],{},[37,665,666],{},"لا تركز على:",[49,668,669,672,675],{},[52,670,671],{},"\"هل أنا ذكي بما فيه الكفاية؟\"",[52,673,674],{},"\"سأحصل على الوظيفة؟\"",[52,676,677],{},"\"هل أستطيع بناء هذا؟\"",[30,679,680],{},[37,681,682],{},"ركز على:",[49,684,685,688,691],{},[52,686,687],{},"\"هل برمجت اليوم؟\"",[52,689,690],{},"\"هل تعلمت شيئاً جديداً؟\"",[52,692,693],{},"\"هل مشاريعي تحسنت في الجودة؟\"",[30,695,696],{},[37,697,698],{},"أهداف Mindset النمو:",[49,700,701,704,707],{},[52,702,703],{},"دراسة ساعة يومياً (عملية)",[52,705,706],{},"إكمال 100 تحدي برمجة (عملية)",[52,708,709],{},"بناء 5 مشاريع (عملية)",[30,711,712],{},[37,713,714],{},"ليس:",[49,716,717,720],{},[52,718,719],{},"\"أصبح مطوراً أول\" (نتيجة)",[52,721,722],{},"\"احصل على راتب 100 ألف دولار\" (نتيجة)",[73,724,726],{"id":725},"_5-احتفل-بالجهد-والاستراتيجية-لا-النتائج-فقط","5. احتفل بالجهد والاستراتيجية، لا النتائج فقط",[30,728,729,732],{},[37,730,731],{},"احتفال Mindset الثابت:","\n\"أنا ذكي جداً! حصلت عليه في المحاولة الأولى!\"",[30,734,735,738],{},[37,736,737],{},"احتفال Mindset النمو:","\n\"جربت 5 نهج مختلفة ووجدت واحداً يعمل. إصراري دفع ثمنه!\"",[30,740,741,744],{},[37,742,743],{},"لماذا يهم هذا:","\nالثناء على الذكاء يخلق ضغطاً لتكون مثالياً دائماً. الثناء على الجهد يشجع على المحاولة حتى عندما يكون صعباً.",[73,746,748],{"id":747},"_6-تعلم-من-نجاح-الآخرين","6. تعلم من نجاح الآخرين",[30,750,751,753],{},[37,752,628],{},"\n\"لديهم موهبة طبيعية. لا أستطيع أبداً أن أفعل ذلك.\"",[30,755,756,758],{},[37,757,634],{},"\n\"ما فعلوه؟ يمكنني تعلم استراتيجيتهم؟\"",[30,760,761,764],{},[37,762,763],{},"خطوة عمل:","\nعند رؤية شخص ناجح، اسأل:",[49,766,767,770,773,776],{},[52,768,769],{},"ما الموارد التي استخدموها؟",[52,771,772],{},"كم الوقت استغرقهم؟",[52,774,775],{},"ما العقبات التي تجاوزوها؟",[52,777,778],{},"هل يمكنني تكرار نهجهم؟",[73,780,782],{"id":781},"_7-رؤية-النقد-كهدية","7. رؤية النقد كهدية",[30,784,785,787],{},[37,786,628],{},"\n\"هذه التعليقات تعني أنني لست جيداً بما فيه الكفاية.\"",[30,789,790,792],{},[37,791,634],{},"\n\"هذه التعليقات تظهر لي بالضبط ما أحتاج تحسينه.\"",[30,794,795],{},[37,796,797],{},"كيفية معالجة النقد:",[441,799,802],{"className":800,"code":801,"language":446},[444],"1. تنفس (لا تتفاعل دفاعياً)\n2. اطلب توضيحات\n3. شكرهم على التعليقات\n4. حدد 1-2 تحسينات قابلة للتنفيذ\n5. طبقها\n",[448,803,801],{"__ignoreMap":16},[68,805,807],{"id":806},"التغلب-على-عقبات-التعلم-الشائعة","التغلب على عقبات التعلم الشائعة",[73,809,811],{"id":810},"عندما-تشعر-بالعالق","عندما تشعر بالعالق",[30,813,814,817],{},[37,815,816],{},"استجابة Mindset الثابت:","\n\"أنا لست ذكياً بما فيه الكفاية لهذا.\"",[30,819,820],{},[37,821,822],{},"استجابة Mindset النمو:",[441,824,827],{"className":825,"code":826,"language":446},[444],"1. قسم المشكلة إلى أجزاء أصغر\n2. ابحث عن دروس حول هذه المشكلة المحددة\n3. اطلب المساعدة (Discord، Reddit، Stack Overflow)\n4. خذ استراحة وعُد طازجاً\n5. جرب شرحها لشخص آخر (تصحيح البطة المطاطية)\n",[448,828,826],{"__ignoreMap":16},[30,830,831,833],{},[37,832,401],{},"\nالوقوف عالقاً ليس علامة على أنك يجب أن تتوقف. إنه علامة على أنك على حافة معرفتك الحالية - حيث يحدث التعلم.",[73,835,837],{"id":836},"عندما-تريد-المقارنة-مع-الآخرين","عندما تريد المقارنة مع الآخرين",[30,839,840,843],{},[37,841,842],{},"الفخ:","\n\"يتقدمون أسرع مني. يجب أن أتوقف.\"",[30,845,846],{},[37,847,848],{},"الواقع التحققي:",[49,850,851,854,857,860],{},[52,852,853],{},"أنت لا تعرف خلفيتهم",[52,855,856],{},"أنت لا ترى أيامهم الـ 16 ساعة",[52,858,859],{},"أنت لا ترى إخفاقاتهم السابقة",[52,861,862],{},"أنت على جدول زمني مختلف",[30,864,865,868],{},[37,866,867],{},"نهج Mindset النمو:","\nقارن نفسك بنفسك أمس:",[49,870,871,874,877],{},[52,872,873],{},"هل أستطيع فعل المزيد اليوم مما فعلت الشهر الماضي؟",[52,875,876],{},"هل أفهم المفاهيم التي أربكتني من قبل؟",[52,878,879],{},"هل مشاريعي تحسنت في الجودة؟",[30,881,882,885],{},[37,883,884],{},"ممارسة يومية:","\nاحتفظ بـ \"سجل الانتصارات\":",[49,887,888,891,894],{},[52,889,890],{},"اليوم أصلحت خطأ بشكل مستقل",[52,892,893],{},"فهمت الإغلاق لأول مرة",[52,895,896],{},"ساعدت شخصاً على Stack Overflow",[73,898,900],{"id":899},"عندما-تريد-الاستسلام","عندما تريد الاستسلام",[30,902,903,906],{},[37,904,905],{},"صوت Mindset الثابت:","\n\"هذا لا يعمل. يجب أن أتوقف وأجرب شيئاً أسهل.\"",[30,908,909],{},[37,910,911],{},"أسئلة تسألها:",[913,914,915,918,921,924],"ol",{},[52,916,917],{},"أتوقف لأنه صعب، أم لأنه خطأ بالنسبة لي؟",[52,919,920],{},"هل أعطيت هذا وقتاً وجهداً كافيين؟",[52,922,923],{},"ما الاستراتيجيات التي لم أجربها بعد؟",[52,925,926],{},"هل سأندم على التوقف بعد 6 أشهر؟",[30,928,929,931],{},[37,930,822],{},"\n\"أنا أكافح، وهذا طبيعي. دعني أجرب نهجاً مختلفاً قبل القرار.\"",[30,933,934],{},[37,935,936],{},"استراتيجيات عند إغراء الاستسلام:",[49,938,939,942,945,948],{},[52,940,941],{},"خذ استراحة 3 أيام (ليس دائماً)",[52,943,944],{},"غير مورد التعلم الخاص بك",[52,946,947],{},"بنِ شيئاً ممتعاً بدلاً من اتباع الدروس",[52,949,950],{},"تواصل مع آخرين كانوا حيث أنت",[68,952,954],{"id":953},"قصص-مطورين-حقيقية-mindset-النمو-في-العمل","قصص مطورين حقيقية: Mindset النمو في العمل",[73,956,958],{"id":957},"قصة-1-من-أنا-لست-ذكياً-بما-فيه-الكفاية-إلى-مهندس-برمجيات","قصة 1: من \"أنا لست ذكياً بما فيه الكفاية\" إلى مهندس برمجيات",[30,960,961,964],{},[37,962,963],{},"الخلفية:","\nسارة، 32، فشلت في الجبر الجامعي مرتين، اعتقدت أن ذكاءها ثابت.",[30,966,967,970],{},[37,968,969],{},"مرحلة Mindset الثابت:","\nتجنبت الوظائف التي تتطلب أي رياضيات. اعتقدت أن الذكاء ثابت.",[30,972,973,976],{},[37,974,975],{},"نقطة التحول:","\nاكتشفت بحث كارول دويك. أدركت أن معتقداتها كانت تعيقها.",[30,978,979],{},[37,980,981],{},"إجراءات Mindset النمو:",[49,983,984,987,990,993],{},[52,985,986],{},"أعادت صياغة: \"لم أتعلم الجبر بعد\"",[52,988,989],{},"قضت 6 أشهر على Khan Academy",[52,991,992],{},"وظفت معلماً، ركزت على الفهم لا الدرجات",[52,994,995],{},"مارست يومياً، حتى عندما كان الأمر سيئاً",[30,997,998,1001],{},[37,999,1000],{},"النتيجة:","\nنجحت في الجبر الجامعي، تعلمت Python، تعمل الآن كمحلل بيانات براتب 85 ألف دولار.",[30,1003,1004],{},[37,1005,1006],{},"اقتباس:",[264,1008,1009],{},[30,1010,1011],{},"\"ذكائي لم يتغير. معتقدي عن ذكائي غير كل شيء.\"",[73,1013,1015],{"id":1014},"قصة-2-المطور-الكبير-جداً-في-السن","قصة 2: المطور \"الكبير جداً في السن\"",[30,1017,1018,1020],{},[37,1019,963],{},"\nماركوس، 47، طُرد من وظيفة التسويق، اعتقد أنه كبير جداً للتكنولوجيا.",[30,1022,1023,1025],{},[37,1024,969],{},"\n\"جميع المطورين بدأوا صغاراً. أنا متأخر 20 عاماً.\"",[30,1027,1028,1031],{},[37,1029,1030],{},"تحول Mindset النمو:","\nركز على مزاياه:",[49,1033,1034,1037,1040],{},[52,1035,1036],{},"خبرة الأعمال = تفكير منتج أفضل",[52,1038,1039],{},"مهارات التواصل = قوة التعاون",[52,1041,1042],{},"خبرة الحياة = فهم مشاكل المستخدم",[30,1044,1045,1047],{},[37,1046,1000],{},"\nحصل على وظيفة مطور مبتدئ في 49، ترقى إلى متوسط المستوى في 18 شهراً.",[30,1049,1050],{},[37,1051,1006],{},[264,1053,1054],{},[30,1055,1056],{},"\"أنا لا أتنافس مع 25 عاماً على السرعة. أنا أجلب حكمة لا يملكونها بعد.\"",[73,1058,1060],{"id":1059},"قصة-3-من-جحيم-الدروس-إلى-مطور-أول","قصة 3: من جحيم الدروس إلى مطور أول",[30,1062,1063,1065],{},[37,1064,963],{},"\nأليكس قضى عامين مشاهدة دروس، لم يبنِ شيئاً.",[30,1067,1068,1071],{},[37,1069,1070],{},"فخ Mindset الثابت:","\n\"أحتاج تعلم كل شيء قبل البناء.\"",[30,1073,1074,1077],{},[37,1075,1076],{},"اختراق Mindset النمو:","\n\"أتعلم بالبناء، لا بالمشاهدة.\"",[30,1079,1080],{},[37,1081,1082],{},"الإجراءات:",[49,1084,1085,1088,1091,1094],{},[52,1086,1087],{},"توقف عن مشاهدة الدروس",[52,1089,1090],{},"بنى مشاريع سيئة (كانت سيئة جداً!)",[52,1092,1093],{},"كل مشروع أصبح أفضل قليلاً",[52,1095,1096],{},"احتضن عدم الراحة",[30,1098,1099,1101],{},[37,1100,1000],{},"\nمحفظة 15 مشروعاً، وظف كمتوسط المستوى بعد 18 شهراً.",[30,1103,1104],{},[37,1105,1006],{},[264,1107,1108],{},[30,1109,1110],{},"\"مشاريعي الخمسة الأولى كانت قمامة. لكن كل واحدة علمني أكثر من 100 درس.\"",[68,1112,1114],{"id":1113},"خطة-العمل-الخاصة-بك-تطوير-mindset-النمو","خطة العمل الخاصة بك: تطوير Mindset النمو",[73,1116,1118],{"id":1117},"الأسبوع-1-الوعي","الأسبوع 1: الوعي",[30,1120,1121,1124],{},[37,1122,1123],{},"المهمة اليومية:","\nاصطياد نفسك باستخدام لغة mindset الثابت. اكتبها. أعد صياغتها.",[30,1126,1127],{},[37,1128,1129],{},"مثال سجل:",[441,1131,1134],{"className":1132,"code":1133,"language":446},[444],"الثابت: \"أنا سيء في CSS\"\nالنمو: \"لم أمارس تخطيط CSS بما فيه الكفاية بعد\"\n\nالثابت: \"هذا الخطأ مستحيل\"\nالنمو: \"لم أجد النهج الصحيح بعد\"\n",[448,1135,1133],{"__ignoreMap":16},[73,1137,1139],{"id":1138},"الأسبوع-2-إعادة-صياغة-التحديات","الأسبوع 2: إعادة صياغة التحديات",[30,1141,1142],{},[37,1143,1144],{},"عند مواجهة الصعوبة:",[441,1146,1149],{"className":1147,"code":1148,"language":446},[444],"اسأل نفسك:\n- ما يمكنني تعلمه من هذا؟\n- ما الاستراتيجية التي لم أجربها؟\n- من يمكنني طلب المساعدة منه؟\n- كيف يجعلني هذا الصراع أفضل؟\n",[448,1150,1148],{"__ignoreMap":16},[73,1152,1154],{"id":1153},"الأسبوع-3-احتفل-بالعملية","الأسبوع 3: احتفل بالعملية",[30,1156,1157],{},[37,1158,1159],{},"تابع الجهد، لا النتائج فقط:",[441,1161,1164],{"className":1162,"code":1163,"language":446},[444],"انتصارات يومية:\n- برمجت لمدة ساعتين ✅\n- طلبت المساعدة عند العالق ✅\n- أصلحت خطأ بشكل مستقل ✅\n- تعلمت مفهوماً جديداً ✅\n",[448,1165,1163],{"__ignoreMap":16},[73,1167,1169],{"id":1168},"الأسبوع-4-احتضان-التعليقات","الأسبوع 4: احتضان التعليقات",[30,1171,1172],{},[37,1173,1174],{},"اطلب النقد:",[49,1176,1177,1180,1183,1186],{},[52,1178,1179],{},"شارك الكود للمراجعة",[52,1181,1182],{},"اسأل أسئلة محددة",[52,1184,1185],{},"شكر الناس على التعليقات",[52,1187,1188],{},"طبق الاقتراحات",[73,1190,1192],{"id":1191},"الشهر-2-3-بناء-العادات","الشهر 2-3: بناء العادات",[30,1194,1195],{},[37,1196,1197],{},"اجعل Mindset النمو تلقائياً:",[49,1199,1200,1203,1206],{},[52,1201,1202],{},"تأكيد الصباح: \"أتعلم وأنمو اليوم\"",[52,1204,1205],{},"انعكاس المساء: \"ما الذي تعلمته اليوم؟\"",[52,1207,1208],{},"مراجعة أسبوعية: \"هل أنا أفضل من الأسبوع الماضي؟\"",[68,1210,1212],{"id":1211},"الخاتمة-mindset-الخاص-بك-سقفك","الخاتمة: Mindset الخاص بك = سقفك",[30,1214,1215],{},"الخبر السار: يمكنك تغيير mindset الخاص بك بدءاً من اليوم.",[30,1217,1218],{},"الخبر السيء: يتطلب ممارسة مستمرة.",[30,1220,1221],{},[37,1222,401],{},[30,1224,1225],{},"✅ الذكاء ليس ثابتاً\n✅ الصراع يعني التعلم، لا الفشل\n✅ الجهد هو طريق الإتقان\n✅ \"بعد\" هي أقوى كلمة في التعلم\n✅ معتقداتك عن التعلم تشكل واقعك",[30,1227,1228,1231],{},[37,1229,1230],{},"القانون النهائي:","\nأنت لست \"سيئاً في البرمجة\" أو \"شخص غير تقني.\" أنت فقط لم تمارس بما فيه الكفاية بعد.",[30,1233,1234],{},"دماغك آلة تعلم حرفية. سيعيد توصيل نفسه بالجهد الثابت. السؤال ليس \"هل أستطيع تعلم هذا؟\" السؤال هو \"هل سأحضر باستمرار لتعلم هذا؟\"",[30,1236,1237],{},[37,1238,1239],{},"ابدأ اليوم:",[913,1241,1242,1245,1248],{},[52,1243,1244],{},"أضف \"بعد\" إلى قيودك",[52,1246,1247],{},"أعد صياغة فكرة mindset ثابتة واحدة",[52,1249,1250],{},"احتفل بالجهد، لا النتائج فقط",[30,1252,1253,1256],{},[37,1254,1255],{},"Mindset الخاص بك هو قوتك الخارقة. اختر النمو."," 🚀",{"title":16,"searchDepth":17,"depth":17,"links":1258},[1259,1264,1268,1275,1284,1289,1294,1301],{"id":70,"depth":1260,"text":71,"children":1261},2,[1262,1263],{"id":75,"depth":17,"text":76},{"id":137,"depth":17,"text":138},{"id":197,"depth":1260,"text":198,"children":1265},[1266,1267],{"id":201,"depth":17,"text":202},{"id":237,"depth":17,"text":238},{"id":271,"depth":1260,"text":272,"children":1269},[1270,1271,1272,1273,1274],{"id":275,"depth":17,"text":276},{"id":327,"depth":17,"text":328},{"id":366,"depth":17,"text":367},{"id":405,"depth":17,"text":406},{"id":452,"depth":17,"text":453},{"id":495,"depth":1260,"text":496,"children":1276},[1277,1278,1279,1280,1281,1282,1283],{"id":499,"depth":17,"text":500},{"id":590,"depth":17,"text":591},{"id":622,"depth":17,"text":623},{"id":660,"depth":17,"text":661},{"id":725,"depth":17,"text":726},{"id":747,"depth":17,"text":748},{"id":781,"depth":17,"text":782},{"id":806,"depth":1260,"text":807,"children":1285},[1286,1287,1288],{"id":810,"depth":17,"text":811},{"id":836,"depth":17,"text":837},{"id":899,"depth":17,"text":900},{"id":953,"depth":1260,"text":954,"children":1290},[1291,1292,1293],{"id":957,"depth":17,"text":958},{"id":1014,"depth":17,"text":1015},{"id":1059,"depth":17,"text":1060},{"id":1113,"depth":1260,"text":1114,"children":1295},[1296,1297,1298,1299,1300],{"id":1117,"depth":17,"text":1118},{"id":1138,"depth":17,"text":1139},{"id":1153,"depth":17,"text":1154},{"id":1168,"depth":17,"text":1169},{"id":1191,"depth":17,"text":1192},{"id":1211,"depth":1260,"text":1212},"لماذا يهم mindset أكثر من الموهبة أو معدل الذكاء عند تعلم البرمجة واللغات أو أي مهارة جديدة. استراتيجيات مدعومة بالعلم لتطوير mindset نمو وتجاوز الشك الذاتي.","https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?q=80&w=1200",false,true,{"excerpt":1307},{"type":13,"value":1308},[1309,1311,1317,1319],[30,1310,32],{},[30,1312,35,1313,40,1315,44],{},[37,1314,39],{},[37,1316,43],{},[30,1318,47],{},[49,1320,1321,1323,1325,1327,1329],{},[52,1322,54],{},[52,1324,57],{},[52,1326,60],{},[52,1328,63],{},[52,1330,66],{},"/mindset-alnmw-fy-altalm","2022-12-15",10,{"title":25,"description":1302},"mindset-النمو-في-التعلم",[1337,1338,1339,1340,1341],"learning","career","psychology","personal-development","growth-mindset","2025-10-10","eW21BZXR2d9oxn5_4q6K5VDzjZEab_TkSCZQEES72p8",{"id":1345,"title":1346,"author":26,"body":1347,"category":19,"description":1626,"extension":7,"image":1627,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":1628,"navigation":1305,"path":1633,"publishedAt":1634,"readingTime":1635,"seo":1636,"stem":1637,"tags":1638,"updatedAt":1634,"__hash__":1646},"articles_ar/أدوات-الذكاء-الاصطناعي-للمطورين-العرب.md","أدوات الذكاء الاصطناعي الأساسية للمطورين العرب: تعزيز الإنتاجية والابتكار",{"type":13,"value":1348,"toc":1616},[1349,1352,1356,1359,1387,1393,1397,1400,1420,1425,1429,1432,1452,1457,1461,1464,1484,1489,1493,1496,1516,1521,1525,1528,1548,1552,1555,1575,1578,1598,1601,1604],[30,1350,1351],{},"يشهد عالم تطوير البرمجيات تحولًا جذريًا بفضل التقدم المتسارع في مجال الذكاء الاصطناعي (AI). لم يعد الذكاء الاصطناعي مجرد مفهوم نظري، بل أصبح مجموعة من الأدوات العملية التي يمكن للمطورين، وخاصة المطورين العرب، الاستفادة منها لتعزيز إنتاجيتهم، تحسين جودة مشاريعهم، وابتكار حلول تقنية متطورة. في هذا المقال، نستعرض أبرز أدوات الذكاء الاصطناعي التي يجب على كل مطور عربي إضافتها إلى ترسانته التقنية.",[68,1353,1355],{"id":1354},"_1-أدوات-كتابة-الأكواد-الذكية-ai-powered-code-assistance","1. أدوات كتابة الأكواد الذكية (AI-Powered Code Assistance)",[30,1357,1358],{},"تعتبر أدوات المساعدة في كتابة الأكواد من أبرز تطبيقات الذكاء الاصطناعي التي أحدثت ثورة في كيفية كتابة المبرمجين للأكواد. هذه الأدوات لا تقتصر على الإكمال التلقائي البسيط، بل تقدم اقتراحات ذكية، تكتشف الأخطاء المحتملة، وتساعد في فهم الأكواد المعقدة.",[49,1360,1361,1375,1381],{},[52,1362,1363,1366,1367],{},[37,1364,1365],{},"GitHub Copilot:"," يعتبر GitHub Copilot، المدعوم من OpenAI Codex، بمثابة \"مساعد مبرمج افتراضي\". يقوم بتحليل السياق الحالي للكود الذي تكتبه ويقدم اقتراحات لأسطر كاملة أو حتى دوال برمجية. يدعم Copilot العديد من لغات البرمجة والمحررات الشهيرة مثل Visual Studio Code.\n",[49,1368,1369],{},[52,1370,1371,1374],{},[37,1372,1373],{},"مثال عملي:"," أثناء كتابة دالة لمعالجة بيانات المستخدمين في Python، يمكن لـ Copilot اقتراح هيكل الدالة بالكامل، بما في ذلك التحقق من صحة البيانات ومعالجة الاستثناءات.",[52,1376,1377,1380],{},[37,1378,1379],{},"Tabnine:"," يركز Tabnine على توفير إكمالات أكواد دقيقة وسريعة بناءً على نماذج تعلم الآلة المدربة على كميات هائلة من الأكواد مفتوحة المصدر. يتميز بقدرته على التكيف مع أسلوب كتابتك للكود وتقديم اقتراحات مخصصة.",[52,1382,1383,1386],{},[37,1384,1385],{},"Amazon CodeWhisperer:"," أداة مشابهة من أمازون، تساعد المطورين على كتابة الأكواد بسرعة وأمان أكبر. تتميز بقدرتها على فحص الأكواد بحثًا عن الثغرات الأمنية وتقديم اقتراحات لتحسينها.",[30,1388,1389,1392],{},[37,1390,1391],{},"نصيحة للمطورين العرب:"," استفد من هذه الأدوات لتسريع عملية كتابة الأكواد، خاصة في المهام الروتينية والمتكررة. تعلم كيفية توجيه هذه الأدوات بفعالية للحصول على أفضل النتائج، ولا تعتمد عليها بشكل كامل دون فهم الكود المقترح.",[68,1394,1396],{"id":1395},"_2-أتمتة-المهام-المتكررة-automation-of-repetitive-tasks","2. أتمتة المهام المتكررة (Automation of Repetitive Tasks)",[30,1398,1399],{},"يواجه المطورون العديد من المهام المتكررة التي تستهلك وقتًا وجهدًا يمكن توجيهه نحو مهام أكثر إبداعًا. أدوات الذكاء الاصطناعي يمكنها أتمتة العديد من هذه المهام.",[49,1401,1402,1408,1414],{},[52,1403,1404,1407],{},[37,1405,1406],{},"اختبار البرمجيات (Software Testing):"," أدوات مثل Applitools و Testim.io تستخدم الذكاء الاصطناعي لإنشاء وصيانة حالات الاختبار بشكل تلقائي، خاصة في اختبار واجهات المستخدم (UI testing). يمكنها اكتشاف التغييرات البصرية غير المقصودة وتنبيه المطورين.",[52,1409,1410,1413],{},[37,1411,1412],{},"النشر والتكامل المستمر (CI/CD):"," منصات مثل Jenkins X و GitLab CI/CD تدمج ميزات الذكاء الاصطناعي لتحسين عمليات التكامل والنشر المستمر، مثل التنبؤ بفشل عمليات البناء (build failures) وتحسين توزيع الموارد.",[52,1415,1416,1419],{},[37,1417,1418],{},"إدارة المشاريع وتتبع الأخطاء:"," أدوات مثل Jira و Asana بدأت في دمج ميزات الذكاء الاصطناعي لتحديد أولويات المهام، التنبؤ بالمواعيد النهائية، وتحديد الأنماط في تقارير الأخطاء.",[30,1421,1422,1424],{},[37,1423,1391],{}," ابحث عن الأدوات التي تتكامل مع بيئة عملك الحالية. ابدأ بأتمتة المهام الصغيرة والمتكررة ثم توسع تدريجيًا.",[68,1426,1428],{"id":1427},"_3-تحليل-البيانات-واستخلاص-الرؤى-data-analysis-and-insights","3. تحليل البيانات واستخلاص الرؤى (Data Analysis and Insights)",[30,1430,1431],{},"البيانات هي وقود العصر الرقمي، وأدوات الذكاء الاصطناعي توفر قدرات هائلة لتحليل هذه البيانات واستخلاص رؤى قيمة تساعد في اتخاذ قرارات مستنيرة.",[49,1433,1434,1440,1446],{},[52,1435,1436,1439],{},[37,1437,1438],{},"منصات تحليل البيانات:"," أدوات مثل Tableau و Power BI تدمج ميزات الذكاء الاصطناعي لتسهيل تحليل البيانات المعقدة وإنشاء تصورات تفاعلية (interactive visualizations).",[52,1441,1442,1445],{},[37,1443,1444],{},"نماذج تعلم الآلة المخصصة:"," يمكن للمطورين بناء نماذج تعلم آلة مخصصة باستخدام مكتبات مثل TensorFlow و PyTorch لتحليل أنواع معينة من البيانات، مثل تحليل سلوك المستخدمين، التنبؤ بالمبيعات، أو اكتشاف الاحتيال.",[52,1447,1448,1451],{},[37,1449,1450],{},"معالجة اللغة الطبيعية (NLP):"," أدوات NLP مثل spaCy و NLTK (بالإضافة إلى نماذج أحدث مثل BERT و GPT) تمكن المطورين من تحليل النصوص العربية، فهم المشاعر، استخلاص المعلومات، وبناء تطبيقات مثل روبوتات الدردشة الذكية.",[30,1453,1454,1456],{},[37,1455,1391],{}," استثمر في تعلم أساسيات تحليل البيانات وتعلم الآلة. هناك العديد من المصادر التعليمية المتاحة باللغة العربية. ابدأ بمشاريع صغيرة لتطبيق ما تعلمته على بيانات حقيقية.",[68,1458,1460],{"id":1459},"_4-دعم-العملاء-وتجربة-المستخدم-customer-support-and-user-experience","4. دعم العملاء وتجربة المستخدم (Customer Support and User Experience)",[30,1462,1463],{},"تحسين تجربة المستخدم وتقديم دعم فعال للعملاء أمر حيوي لنجاح أي منتج تقني. الذكاء الاصطناعي يقدم حلولاً مبتكرة في هذا المجال.",[49,1465,1466,1472,1478],{},[52,1467,1468,1471],{},[37,1469,1470],{},"روبوتات الدردشة الذكية (AI Chatbots):"," منصات مثل Dialogflow (Google), IBM Watson Assistant, و Rasa (مفتوح المصدر) تمكن المطورين من بناء روبوتات دردشة قادرة على فهم اللغة الطبيعية (بما في ذلك اللهجات العربية المختلفة بدرجات متفاوتة) وتقديم الدعم الفوري للعملاء على مدار الساعة.",[52,1473,1474,1477],{},[37,1475,1476],{},"تخصيص تجربة المستخدم (Personalization):"," يمكن استخدام خوارزميات الذكاء الاصطناعي لتحليل سلوك المستخدمين وتقديم محتوى وتوصيات مخصصة، مما يزيد من تفاعلهم ورضاهم.",[52,1479,1480,1483],{},[37,1481,1482],{},"تحليل ملاحظات العملاء:"," أدوات تحليل المشاعر (Sentiment Analysis) يمكنها معالجة كميات كبيرة من ملاحظات العملاء (من وسائل التواصل الاجتماعي، استطلاعات الرأي، إلخ) وتحديد المشاعر الإيجابية والسلبية تجاه المنتج أو الخدمة.",[30,1485,1486,1488],{},[37,1487,1391],{}," عند بناء روبوتات دردشة باللغة العربية، اهتم بتدريب النموذج على مجموعة بيانات متنوعة تشمل اللهجات المحلية المختلفة لضمان فهم دقيق.",[68,1490,1492],{"id":1491},"_5-توليد-المحتوى-والإبداع-content-generation-and-creativity","5. توليد المحتوى والإبداع (Content Generation and Creativity)",[30,1494,1495],{},"أدوات الذكاء الاصطناعي لا تقتصر على المهام التحليلية، بل تمتد أيضًا إلى المجالات الإبداعية.",[49,1497,1498,1504,1510],{},[52,1499,1500,1503],{},[37,1501,1502],{},"توليد النصوص (Text Generation):"," نماذج مثل GPT-3 وما بعدها (مثل ChatGPT) يمكنها توليد مقالات، أكواد، نصوص تسويقية، وحتى قصائد. يمكن استخدامها للمساعدة في كتابة الوثائق التقنية، إنشاء محتوى للمدونات، أو توليد أفكار جديدة.",[52,1505,1506,1509],{},[37,1507,1508],{},"توليد الصور والتصاميم (Image and Design Generation):"," أدوات مثل Midjourney و DALL-E 2 و Stable Diffusion تمكن المستخدمين من إنشاء صور فنية وتصاميم فريدة بناءً على أوصاف نصية. يمكن للمطورين استخدامها لإنشاء أيقونات، رسوم توضيحية، أو مواد مرئية لمشاريعهم.",[52,1511,1512,1515],{},[37,1513,1514],{},"توليد الموسيقى والصوت:"," هناك أدوات AI يمكنها تأليف مقطوعات موسيقية أو توليد تعليقات صوتية، مما يفتح آفاقًا جديدة في تطوير الألعاب والتطبيقات التفاعلية.",[30,1517,1518,1520],{},[37,1519,1391],{}," استخدم هذه الأدوات كمصدر إلهام ومساعد في العملية الإبداعية، وليس كبديل كامل للإبداع البشري. تحقق دائمًا من جودة وأصالة المحتوى المولد.",[68,1522,1524],{"id":1523},"_6-التعلم-المستمر-ومواكبة-التطورات","6. التعلم المستمر ومواكبة التطورات",[30,1526,1527],{},"مجال الذكاء الاصطناعي يتطور بسرعة مذهلة. لذا، من الضروري للمطورين العرب البقاء على اطلاع دائم بأحدث الأدوات، التقنيات، وأفضل الممارسات.",[49,1529,1530,1536,1542],{},[52,1531,1532,1535],{},[37,1533,1534],{},"الدورات التدريبية والشهادات:"," منصات مثل Coursera, edX, Udacity، بالإضافة إلى مبادرات محلية، تقدم دورات متخصصة في الذكاء الاصطناعي وتعلم الآلة.",[52,1537,1538,1541],{},[37,1539,1540],{},"المجتمعات التقنية والمؤتمرات:"," شارك في المجتمعات التقنية العربية والعالمية، واحضر المؤتمرات والندوات (عبر الإنترنت أو حضوريًا) لتبادل الخبرات والمعرفة.",[52,1543,1544,1547],{},[37,1545,1546],{},"المشاريع مفتوحة المصدر:"," المساهمة في مشاريع الذكاء الاصطناعي مفتوحة المصدر هي طريقة رائعة للتعلم وتطبيق المهارات.",[68,1549,1551],{"id":1550},"تحديات-وفرص-للمطورين-العرب-في-مجال-الذكاء-الاصطناعي","تحديات وفرص للمطورين العرب في مجال الذكاء الاصطناعي",[30,1553,1554],{},"رغم الإمكانيات الهائلة، يواجه المطورون العرب بعض التحديات عند تبني أدوات الذكاء الاصطناعي، مثل:",[49,1556,1557,1563,1569],{},[52,1558,1559,1562],{},[37,1560,1561],{},"ندرة البيانات العربية عالية الجودة:"," العديد من نماذج الذكاء الاصطناعي تتطلب كميات كبيرة من البيانات للتدريب. قد يكون هناك نقص في مجموعات البيانات العربية المتخصصة.",[52,1564,1565,1568],{},[37,1566,1567],{},"دعم اللغة العربية واللهجات المحلية:"," ليست كل الأدوات تدعم اللغة العربية بشكل كامل أو تتعامل بفعالية مع اللهجات المتعددة.",[52,1570,1571,1574],{},[37,1572,1573],{},"الحاجة إلى تطوير المهارات:"," يتطلب استخدام أدوات الذكاء الاصطناعي بفعالية فهمًا جيدًا لأساسيات تعلم الآلة وتحليل البيانات.",[30,1576,1577],{},"ومع ذلك، هناك فرص كبيرة للمطورين العرب:",[49,1579,1580,1586,1592],{},[52,1581,1582,1585],{},[37,1583,1584],{},"تطوير حلول مخصصة للسوق العربي:"," يمكن للمطورين العرب بناء أدوات وتطبيقات ذكاء اصطناعي تلبي الاحتياجات الفريدة للمستخدمين والشركات في المنطقة.",[52,1587,1588,1591],{},[37,1589,1590],{},"المساهمة في إثراء المحتوى العربي في مجال الذكاء الاصطناعي:"," من خلال تطوير نماذج ومجموعات بيانات عربية.",[52,1593,1594,1597],{},[37,1595,1596],{},"الاستفادة من الطلب المتزايد على مهارات الذكاء الاصطناعي:"," مما يفتح آفاقًا وظيفية واسعة.",[68,1599,1600],{"id":1600},"الخلاصة",[30,1602,1603],{},"إن تبني أدوات الذكاء الاصطناعي لم يعد خيارًا بل ضرورة للمطورين العرب الذين يسعون إلى التميز والابتكار. من خلال الاستفادة من هذه الأدوات في كتابة الأكواد، أتمتة المهام، تحليل البيانات، دعم العملاء، وحتى توليد المحتوى الإبداعي، يمكن للمطورين العرب تعزيز إنتاجيتهم بشكل كبير، تحسين جودة مشاريعهم، والمساهمة بفعالية في الثورة الرقمية. ابدأ اليوم باستكشاف هذه الأدوات ودمجها في سير عملك، وكن جزءًا من مستقبل التطوير المدعوم بالذكاء الاصطناعي.",[30,1605,1606,1607,1611,1612,1615],{},"SimilarPosts{:tags=\"",[1608,1609,1610],"span",{},"'الذكاء الاصطناعي', 'أدوات المطورين', 'arabic'","\" ",[1613,1614],"count",{},"=\"3\"}",{"title":16,"searchDepth":17,"depth":17,"links":1617},[1618,1619,1620,1621,1622,1623,1624,1625],{"id":1354,"depth":1260,"text":1355},{"id":1395,"depth":1260,"text":1396},{"id":1427,"depth":1260,"text":1428},{"id":1459,"depth":1260,"text":1460},{"id":1491,"depth":1260,"text":1492},{"id":1523,"depth":1260,"text":1524},{"id":1550,"depth":1260,"text":1551},{"id":1600,"depth":1260,"text":1600},"دليل شامل لأهم أدوات الذكاء الاصطناعي التي تمكّن المطورين العرب من تسريع وتيرة التطوير، تحسين جودة الكود، وابتكار حلول ذكية تلبي احتياجات السوق المحليي والعالمي.","https://images.unsplash.com/photo-1523961131990-5ea7c61b2107?q=80&w=1200&auto=format&fit=crop",{"excerpt":1629},{"type":13,"value":1630},[1631],[30,1632,1351],{},"/adwat-althkaa-alastnaay-llmtwryn-alarb","2025-05-16",15,{"title":1346,"description":1626},"أدوات-الذكاء-الاصطناعي-للمطورين-العرب",[1639,1640,1641,1642,1643,1644,1645],"الذكاء الاصطناعي","أدوات المطورين","إنتاجية المبرمجين","تطوير البرمجيات","arabic","ai-tools","developer-productivity","0Kg6HYvJ6rWyWBg4tctRl3lL-5vewPPVcm_fr3Ekdyc",{"id":1648,"title":1649,"author":26,"body":1650,"category":19,"description":2871,"extension":7,"image":2872,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":2873,"navigation":1305,"path":2880,"publishedAt":2881,"readingTime":2099,"seo":2882,"stem":2883,"tags":2884,"updatedAt":1342,"__hash__":2889},"articles_ar/أفضل-لغة-برمجة-للتعلم-في-2025.md","أفضل لغة برمجة للتعلم في 2025",{"type":13,"value":1651,"toc":2849},[1652,1655,1658,1662,1665,1671,1677,1683,1689,1695,1699,1703,1706,1711,1743,1748,1765,1771,1776,1835,1839,1842,1847,1873,1878,1904,1908,1925,1930,1934,2137,2141,2144,2149,2175,2179,2199,2204,2210,2214,2311,2315,2318,2323,2349,2353,2370,2375,2379,2461,2465,2468,2473,2498,2502,2515,2520,2524,2589,2593,2596,2601,2625,2629,2640,2645,2649,2653,2663,2667,2675,2679,2693,2697,2706,2710,2718,2722,2730,2734,2752,2756,2762,2768,2773,2787,2792,2806,2811,2831,2833,2836,2839,2842,2845],[30,1653,1654],{},"اختيار لغة البرمجة الأولى في 2025 يمكن أن يشعر بالإرهاق. مع الذكاء الاصطناعي الذي يعيد تشكيل الصناعة، الحوسبة السحابية التي تصبح ضرورية، ولغات جديدة تظهر، يبدو المشهد مختلفاً عما كان عليه قبل بضع سنوات فقط.",[30,1656,1657],{},"سوف يساعدك هذا الدليل في اتخاذ قرار مستنير بناءً على اتجاهات الصناعة الحالية، الطلب في سوق العمل، ومناطق التكنولوجيا التي تهتم بها أكثر. سواء كنت تهدف لتطوير الويب، الذكاء الاصطناعي/التعلم الآلي، تطبيقات الهاتف المحمول، أو البرمجة النظامية، هناك نقطة بداية مثالية لرحلتك.",[68,1659,1661],{"id":1660},"كيفية-اختيار-اللغة-المناسبة","كيفية اختيار اللغة المناسبة",[30,1663,1664],{},"قبل الغوص في لغات محددة، ضع في اعتبارك هذه العوامل الرئيسية:",[30,1666,1667,1670],{},[37,1668,1669],{},"أهدافك",": هل تبني مواقع إلكترونية؟ تطبيقات الهاتف المحمول؟ تعمل مع البيانات؟ كل مسار يستفيد من لغات مختلفة.",[30,1672,1673,1676],{},[37,1674,1675],{},"سوق العمل",": بعض اللغات لديها فرص عمل أكثر ورواتب أعلى من غيرها.",[30,1678,1679,1682],{},[37,1680,1681],{},"منحنى التعلم",": بعض اللغات صديقة للمبتدئين، بينما لدى غيرها منحنيات تعلم أكثر حدة.",[30,1684,1685,1688],{},[37,1686,1687],{},"دعم المجتمع",": المجتمعات النشطة تعني موارد أفضل، مكتبات، ومساعدة عندما تتعثر.",[30,1690,1691,1694],{},[37,1692,1693],{},"الحماية المستقبلية",": اختر لغات ستظل ذات صلة مع تطور التكنولوجيا.",[68,1696,1698],{"id":1697},"أفضل-لغات-البرمجة-لعام-2025","أفضل لغات البرمجة لعام 2025",[73,1700,1702],{"id":1701},"python-قائد-الذكاء-الاصطناعي-وعلم-البيانات","Python: قائد الذكاء الاصطناعي وعلم البيانات",[30,1704,1705],{},"يظل Python اللغة الأكثر شعبية للمبتدئين في 2025، ولأسباب وجيهة.",[30,1707,1708],{},[37,1709,1710],{},"لماذا Python؟",[49,1712,1713,1719,1725,1731,1737],{},[52,1714,1715,1718],{},[37,1716,1717],{},"بناء جملة واضح",": يقرأ تقريباً مثل الإنجليزية، مما يجعله مثالياً للمبتدئين",[52,1720,1721,1724],{},[37,1722,1723],{},"سيادة الذكاء الاصطناعي/التعلم الآلي",": يدعم معظم أطر العمل الذكاء الاصطناعي (TensorFlow، PyTorch، Hugging Face)",[52,1726,1727,1730],{},[37,1728,1729],{},"متعدد الاستخدامات",": تطوير الويب، علم البيانات، الأتمتة، البرمجة النصية، والمزيد",[52,1732,1733,1736],{},[37,1734,1735],{},"نظام بيئي هائل",": أكثر من 400,000 حزمة على PyPI",[52,1738,1739,1742],{},[37,1740,1741],{},"طلب عالي",": يستخدمها Google، Netflix، NASA، وعدد لا يحصى من الشركات الناشئة",[30,1744,1745],{},[37,1746,1747],{},"الأفضل لـ:",[49,1749,1750,1753,1756,1759,1762],{},[52,1751,1752],{},"علم البيانات والتحليلات",[52,1754,1755],{},"التعلم الآلي وتطوير الذكاء الاصطناعي",[52,1757,1758],{},"استخراج الويب والأتمتة",[52,1760,1761],{},"تطوير الويب الخلفي (Django، FastAPI)",[52,1763,1764],{},"الحوسبة العلمية",[30,1766,1767,1770],{},[37,1768,1769],{},"نظرة العمل:","\nمطورو Python في طلب عالي جداً، خاصة في أدوار الذكاء الاصطناعي/التعلم الآلي. تتراوح الرواتب المتوسطة من 80,000 إلى 150,000 دولار+ اعتماداً على الخبرة والتخصص.",[30,1772,1773],{},[37,1774,1775],{},"مثال حالة استخدام:",[441,1777,1781],{"className":1778,"code":1779,"language":1780,"meta":16,"style":16},"language-python shiki shiki-themes github-light dark-plus dark-plus","# استخراج ويب بسيط مع Beautiful Soup\nfrom bs4 import BeautifulSoup\nimport requests\n\nresponse = requests.get('https://example.com')\nsoup = BeautifulSoup(response.text, 'html.parser')\n\nfor headline in soup.find_all('h2'):\n    print(headline.text)\n","python",[448,1782,1783,1790,1795,1800,1806,1812,1818,1823,1829],{"__ignoreMap":16},[1608,1784,1787],{"class":1785,"line":1786},"line",1,[1608,1788,1789],{},"# استخراج ويب بسيط مع Beautiful Soup\n",[1608,1791,1792],{"class":1785,"line":1260},[1608,1793,1794],{},"from bs4 import BeautifulSoup\n",[1608,1796,1797],{"class":1785,"line":17},[1608,1798,1799],{},"import requests\n",[1608,1801,1803],{"class":1785,"line":1802},4,[1608,1804,1805],{"emptyLinePlaceholder":1305},"\n",[1608,1807,1809],{"class":1785,"line":1808},5,[1608,1810,1811],{},"response = requests.get('https://example.com')\n",[1608,1813,1815],{"class":1785,"line":1814},6,[1608,1816,1817],{},"soup = BeautifulSoup(response.text, 'html.parser')\n",[1608,1819,1821],{"class":1785,"line":1820},7,[1608,1822,1805],{"emptyLinePlaceholder":1305},[1608,1824,1826],{"class":1785,"line":1825},8,[1608,1827,1828],{},"for headline in soup.find_all('h2'):\n",[1608,1830,1832],{"class":1785,"line":1831},9,[1608,1833,1834],{},"    print(headline.text)\n",[73,1836,1838],{"id":1837},"javascripttypescript-ضرورية-لتطوير-الويب","JavaScript/TypeScript: ضرورية لتطوير الويب",[30,1840,1841],{},"JavaScript يدير الويب، وأصبح TypeScript المعيار الصناعي للتطبيقات الكبيرة.",[30,1843,1844],{},[37,1845,1846],{},"لماذا JavaScript؟",[49,1848,1849,1855,1861,1867],{},[52,1850,1851,1854],{},[37,1852,1853],{},"عالمية",": تعمل في المتصفحات، الخوادم (Node.js)، الهاتف المحمول (React Native)، والسطح المكتبي (Electron)",[52,1856,1857,1860],{},[37,1858,1859],{},"النظام البيئي",": أكبر نظام بيئي لحزم (npm) مع أكثر من 2 مليون حزمة",[52,1862,1863,1866],{},[37,1864,1865],{},"أطر العمل",": React، Vue، Next.js، Express تهيمن على تطوير الويب الحديث",[52,1868,1869,1872],{},[37,1870,1871],{},"نتائج فورية",": بنِ مواقع إلكترونية تفاعلية من اليوم الأول",[30,1874,1875],{},[37,1876,1877],{},"لماذا TypeScript؟",[49,1879,1880,1886,1892,1898],{},[52,1881,1882,1885],{},[37,1883,1884],{},"أمان الأنواع",": اكتشف الأخطاء قبل وقت التشغيل",[52,1887,1888,1891],{},[37,1889,1890],{},"أدوات أفضل",": دعم IDE محسن وإكمال تلقائي",[52,1893,1894,1897],{},[37,1895,1896],{},"المعيار الصناعي",": معظم مشاريع JavaScript الجديدة تستخدم TypeScript في 2025",[52,1899,1900,1903],{},[37,1901,1902],{},"القابلية للتوسع",": تجعل قواعد الكود الكبيرة قابلة للإدارة",[30,1905,1906],{},[37,1907,1747],{},[49,1909,1910,1913,1916,1919,1922],{},[52,1911,1912],{},"تطوير الويب الأمامي",[52,1914,1915],{},"التطوير الكامل المكدس",[52,1917,1918],{},"تطوير تطبيقات الهاتف المحمول (React Native)",[52,1920,1921],{},"التطبيقات السطح المكتبي",[52,1923,1924],{},"التطوير من جانب الخادم (Node.js، Deno، Bun)",[30,1926,1927,1929],{},[37,1928,1769],{},"\nمطورو JavaScript/TypeScript لديهم أعلى عدد من فرص العمل. تتراوح الرواتب من 70,000 إلى 140,000 دولار+ لمطوري المكدس الكامل.",[30,1931,1932],{},[37,1933,1775],{},[441,1935,1939],{"className":1936,"code":1937,"language":1938,"meta":16,"style":16},"language-typescript shiki shiki-themes github-light dark-plus dark-plus","// مكون React TypeScript\ninterface User {\n  id: number;\n  name: string;\n  email: string;\n}\n\nfunction UserCard({ user }: { user: User }) {\n  return (\n    \u003Cdiv className=\"user-card\">\n      \u003Ch2>{user.name}\u003C/h2>\n      \u003Cp>{user.email}\u003C/p>\n    \u003C/div>\n  );\n}\n","typescript",[448,1940,1941,1947,1961,1978,1990,2001,2006,2010,2042,2051,2073,2097,2117,2127,2133],{"__ignoreMap":16},[1608,1942,1943],{"class":1785,"line":1786},[1608,1944,1946],{"class":1945},"s56mj","// مكون React TypeScript\n",[1608,1948,1949,1953,1957],{"class":1785,"line":1260},[1608,1950,1952],{"class":1951},"s5uUr","interface",[1608,1954,1956],{"class":1955},"su_XB"," User",[1608,1958,1960],{"class":1959},"sG4b4"," {\n",[1608,1962,1963,1967,1971,1975],{"class":1785,"line":17},[1608,1964,1966],{"class":1965},"s9TRk","  id",[1608,1968,1970],{"class":1969},"s1p9p",":",[1608,1972,1974],{"class":1973},"s6-XD"," number",[1608,1976,1977],{"class":1959},";\n",[1608,1979,1980,1983,1985,1988],{"class":1785,"line":1802},[1608,1981,1982],{"class":1965},"  name",[1608,1984,1970],{"class":1969},[1608,1986,1987],{"class":1973}," string",[1608,1989,1977],{"class":1959},[1608,1991,1992,1995,1997,1999],{"class":1785,"line":1808},[1608,1993,1994],{"class":1965},"  email",[1608,1996,1970],{"class":1969},[1608,1998,1987],{"class":1973},[1608,2000,1977],{"class":1959},[1608,2002,2003],{"class":1785,"line":1814},[1608,2004,2005],{"class":1959},"}\n",[1608,2007,2008],{"class":1785,"line":1820},[1608,2009,1805],{"emptyLinePlaceholder":1305},[1608,2011,2012,2015,2019,2022,2025,2028,2030,2033,2035,2037,2039],{"class":1785,"line":1825},[1608,2013,2014],{"class":1951},"function",[1608,2016,2018],{"class":2017},"svuFb"," UserCard",[1608,2020,2021],{"class":1959},"({ ",[1608,2023,2024],{"class":1965},"user",[1608,2026,2027],{"class":1959}," }",[1608,2029,1970],{"class":1969},[1608,2031,2032],{"class":1959}," { ",[1608,2034,2024],{"class":1965},[1608,2036,1970],{"class":1969},[1608,2038,1956],{"class":1955},[1608,2040,2041],{"class":1959}," }) {\n",[1608,2043,2044,2048],{"class":1785,"line":1831},[1608,2045,2047],{"class":2046},"sEkCa","  return",[1608,2049,2050],{"class":1959}," (\n",[1608,2052,2053,2056,2060,2063,2066,2070],{"class":1785,"line":1333},[1608,2054,2055],{"class":1969},"    \u003C",[1608,2057,2059],{"class":2058},"sZiGn","div",[1608,2061,2062],{"class":2058}," className",[1608,2064,2065],{"class":1969},"=",[1608,2067,2069],{"class":2068},"sGDl4","\"user-card\"",[1608,2071,2072],{"class":1969},">\n",[1608,2074,2076,2079,2081,2084,2087,2090,2093,2095],{"class":1785,"line":2075},11,[1608,2077,2078],{"class":1959},"      \u003C",[1608,2080,68],{"class":1955},[1608,2082,2083],{"class":1959},">{user.",[1608,2085,2086],{"class":2058},"name",[1608,2088,2089],{"class":1959},"}",[1608,2091,2092],{"class":1969},"\u003C/",[1608,2094,68],{"class":2058},[1608,2096,2072],{"class":1969},[1608,2098,2100,2102,2104,2106,2109,2111,2113,2115],{"class":1785,"line":2099},12,[1608,2101,2078],{"class":1959},[1608,2103,30],{"class":1955},[1608,2105,2083],{"class":1959},[1608,2107,2108],{"class":2058},"email",[1608,2110,2089],{"class":1959},[1608,2112,2092],{"class":1969},[1608,2114,30],{"class":2058},[1608,2116,2072],{"class":1969},[1608,2118,2120,2123,2125],{"class":1785,"line":2119},13,[1608,2121,2122],{"class":1969},"    \u003C/",[1608,2124,2059],{"class":2058},[1608,2126,2072],{"class":1969},[1608,2128,2130],{"class":1785,"line":2129},14,[1608,2131,2132],{"class":1959},"  );\n",[1608,2134,2135],{"class":1785,"line":1635},[1608,2136,2005],{"class":1959},[73,2138,2140],{"id":2139},"rust-مستقبل-البرمجة-النظامية","Rust: مستقبل البرمجة النظامية",[30,2142,2143],{},"انفجر شعبية Rust ويستخدمه الآن شركات كبرى للتطبيقات ذات الأداء الحرج.",[30,2145,2146],{},[37,2147,2148],{},"لماذا Rust؟",[49,2150,2151,2157,2163,2169],{},[52,2152,2153,2156],{},[37,2154,2155],{},"أمان الذاكرة",": يمنع الأعطال والثغرات الأمنية بدون جمع القمامة",[52,2158,2159,2162],{},[37,2160,2161],{},"الأداء",": سريع مثل C/C++ لكنه أكثر أماناً بكثير",[52,2164,2165,2168],{},[37,2166,2167],{},"حديث",": مبني مع أفضل الممارسات اليوم في الاعتبار",[52,2170,2171,2174],{},[37,2172,2173],{},"اعتماد متزايد",": يستخدمه Microsoft، Amazon، Discord، Cloudflare، وMeta",[30,2176,2177],{},[37,2178,1747],{},[49,2180,2181,2184,2187,2190,2193,2196],{},[52,2182,2183],{},"البرمجة النظامية",[52,2185,2186],{},"تطوير WebAssembly",[52,2188,2189],{},"البلوكشين/العملات المشفرة",[52,2191,2192],{},"تطوير محركات الألعاب",[52,2194,2195],{},"أدوات سطر الأوامر",[52,2197,2198],{},"الأنظمة المدمجة",[30,2200,2201,2203],{},[37,2202,1769],{},"\nيطالب مطورو Rust برواتب مميزة (100,000 - 180,000 دولار+) بسبب الندرة والطلب العالي على الخبرة على مستوى الأنظمة.",[30,2205,2206,2209],{},[37,2207,2208],{},"منحنى التعلم:","\nأكثر حدة من Python أو JavaScript، لكن ضمانات الأمان تستحق العناء.",[30,2211,2212],{},[37,2213,1775],{},[441,2215,2219],{"className":2216,"code":2217,"language":2218,"meta":16,"style":16},"language-rust shiki shiki-themes github-light dark-plus dark-plus","// برمجة متزامنة آمنة\nuse std::thread;\n\nfn main() {\n    let data = vec![1, 2, 3, 4, 5];\n    \n    let handles: Vec\u003C_> = data.into_iter()\n        .map(|num| {\n            thread::spawn(move || {\n                println!(\"Processing: {}\", num * 2);\n            })\n        })\n        .collect();\n    \n    for handle in handles {\n        handle.join().unwrap();\n    }\n}\n","rust",[448,2220,2221,2226,2231,2235,2240,2245,2250,2255,2260,2265,2270,2275,2280,2285,2289,2294,2300,2306],{"__ignoreMap":16},[1608,2222,2223],{"class":1785,"line":1786},[1608,2224,2225],{},"// برمجة متزامنة آمنة\n",[1608,2227,2228],{"class":1785,"line":1260},[1608,2229,2230],{},"use std::thread;\n",[1608,2232,2233],{"class":1785,"line":17},[1608,2234,1805],{"emptyLinePlaceholder":1305},[1608,2236,2237],{"class":1785,"line":1802},[1608,2238,2239],{},"fn main() {\n",[1608,2241,2242],{"class":1785,"line":1808},[1608,2243,2244],{},"    let data = vec![1, 2, 3, 4, 5];\n",[1608,2246,2247],{"class":1785,"line":1814},[1608,2248,2249],{},"    \n",[1608,2251,2252],{"class":1785,"line":1820},[1608,2253,2254],{},"    let handles: Vec\u003C_> = data.into_iter()\n",[1608,2256,2257],{"class":1785,"line":1825},[1608,2258,2259],{},"        .map(|num| {\n",[1608,2261,2262],{"class":1785,"line":1831},[1608,2263,2264],{},"            thread::spawn(move || {\n",[1608,2266,2267],{"class":1785,"line":1333},[1608,2268,2269],{},"                println!(\"Processing: {}\", num * 2);\n",[1608,2271,2272],{"class":1785,"line":2075},[1608,2273,2274],{},"            })\n",[1608,2276,2277],{"class":1785,"line":2099},[1608,2278,2279],{},"        })\n",[1608,2281,2282],{"class":1785,"line":2119},[1608,2283,2284],{},"        .collect();\n",[1608,2286,2287],{"class":1785,"line":2129},[1608,2288,2249],{},[1608,2290,2291],{"class":1785,"line":1635},[1608,2292,2293],{},"    for handle in handles {\n",[1608,2295,2297],{"class":1785,"line":2296},16,[1608,2298,2299],{},"        handle.join().unwrap();\n",[1608,2301,2303],{"class":1785,"line":2302},17,[1608,2304,2305],{},"    }\n",[1608,2307,2309],{"class":1785,"line":2308},18,[1608,2310,2005],{},[73,2312,2314],{"id":2313},"go-بسيط-سريع-وأصلي-السحابة","Go: بسيط، سريع، وأصلي السحابة",[30,2316,2317],{},"أصبحت لغة Go من Google المعيار للبنية التحتية السحابية والخدمات المصغرة.",[30,2319,2320],{},[37,2321,2322],{},"لماذا Go؟",[49,2324,2325,2331,2337,2343],{},[52,2326,2327,2330],{},[37,2328,2329],{},"بسيط",": سهل التعلم، بناء جملة نظيف، تجميع سريع",[52,2332,2333,2336],{},[37,2334,2335],{},"متزامن",": تزامن مدمج مع goroutines",[52,2338,2339,2342],{},[37,2340,2341],{},"سريع",": أداء قريب من C++ مع جمع القمامة",[52,2344,2345,2348],{},[37,2346,2347],{},"المعيار السحابي",": يدعم Docker، Kubernetes، Terraform، ومعظم أدوات السحابة",[30,2350,2351],{},[37,2352,1747],{},[49,2354,2355,2358,2361,2364,2367],{},[52,2356,2357],{},"واجهات برمجة التطبيقات الخلفية والخدمات المصغرة",[52,2359,2360],{},"أدوات البنية التحتية السحابية",[52,2362,2363],{},"أتمتة DevOps",[52,2365,2366],{},"تطبيقات سطر الأوامر",[52,2368,2369],{},"الخدمات عالية الأداء",[30,2371,2372,2374],{},[37,2373,1769],{},"\nيكسب مطورو Go 95,000 - 160,000 دولار، خاصة في أدوار الحوسبة السحابية وDevOps.",[30,2376,2377],{},[37,2378,1775],{},[441,2380,2384],{"className":2381,"code":2382,"language":2383,"meta":16,"style":16},"language-go shiki shiki-themes github-light dark-plus dark-plus","// خادم HTTP بسيط مع التزامن\npackage main\n\nimport (\n    \"fmt\"\n    \"net/http\"\n)\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n    fmt.Fprintf(w, \"Hello from Go!\")\n}\n\nfunc main() {\n    http.HandleFunc(\"/\", handler)\n    http.ListenAndServe(\":8080\", nil)\n}\n","go",[448,2385,2386,2391,2396,2400,2405,2410,2415,2420,2424,2429,2434,2438,2442,2447,2452,2457],{"__ignoreMap":16},[1608,2387,2388],{"class":1785,"line":1786},[1608,2389,2390],{},"// خادم HTTP بسيط مع التزامن\n",[1608,2392,2393],{"class":1785,"line":1260},[1608,2394,2395],{},"package main\n",[1608,2397,2398],{"class":1785,"line":17},[1608,2399,1805],{"emptyLinePlaceholder":1305},[1608,2401,2402],{"class":1785,"line":1802},[1608,2403,2404],{},"import (\n",[1608,2406,2407],{"class":1785,"line":1808},[1608,2408,2409],{},"    \"fmt\"\n",[1608,2411,2412],{"class":1785,"line":1814},[1608,2413,2414],{},"    \"net/http\"\n",[1608,2416,2417],{"class":1785,"line":1820},[1608,2418,2419],{},")\n",[1608,2421,2422],{"class":1785,"line":1825},[1608,2423,1805],{"emptyLinePlaceholder":1305},[1608,2425,2426],{"class":1785,"line":1831},[1608,2427,2428],{},"func handler(w http.ResponseWriter, r *http.Request) {\n",[1608,2430,2431],{"class":1785,"line":1333},[1608,2432,2433],{},"    fmt.Fprintf(w, \"Hello from Go!\")\n",[1608,2435,2436],{"class":1785,"line":2075},[1608,2437,2005],{},[1608,2439,2440],{"class":1785,"line":2099},[1608,2441,1805],{"emptyLinePlaceholder":1305},[1608,2443,2444],{"class":1785,"line":2119},[1608,2445,2446],{},"func main() {\n",[1608,2448,2449],{"class":1785,"line":2129},[1608,2450,2451],{},"    http.HandleFunc(\"/\", handler)\n",[1608,2453,2454],{"class":1785,"line":1635},[1608,2455,2456],{},"    http.ListenAndServe(\":8080\", nil)\n",[1608,2458,2459],{"class":1785,"line":2296},[1608,2460,2005],{},[73,2462,2464],{"id":2463},"kotlin-android-الحديث-وما-بعده","Kotlin: Android الحديث وما بعده",[30,2466,2467],{},"Kotlin هي اللغة المفضلة لدى Google لتطوير Android وتنمو في التطوير الخلفي.",[30,2469,2470],{},[37,2471,2472],{},"لماذا Kotlin؟",[49,2474,2475,2480,2486,2492],{},[52,2476,2477,2479],{},[37,2478,2167],{},": يصلح نقاط ضعف Java مع بناء جملة أفضل",[52,2481,2482,2485],{},[37,2483,2484],{},"Android الرسمي",": اللغة الموصى بها من Google لـ Android",[52,2487,2488,2491],{},[37,2489,2490],{},"قابل للتشغيل المتبادل",": يعمل بسلاسة مع كود Java",[52,2493,2494,2497],{},[37,2495,2496],{},"متعدد المنصات",": بنِ iOS، Android، الويب، والسطح المكتبي من قاعدة كود واحدة",[30,2499,2500],{},[37,2501,1747],{},[49,2503,2504,2507,2510,2513],{},[52,2505,2506],{},"تطوير الهاتف المحمول Android",[52,2508,2509],{},"تطبيقات الهاتف المحمول متعددة المنصات (Kotlin Multiplatform)",[52,2511,2512],{},"التطوير الخلفي (مع Ktor، Spring Boot)",[52,2514,1921],{},[30,2516,2517,2519],{},[37,2518,1769],{},"\nيكسب مطورو Kotlin، خاصة لـ Android، 85,000 - 145,000 دولار.",[30,2521,2522],{},[37,2523,1775],{},[441,2525,2529],{"className":2526,"code":2527,"language":2528,"meta":16,"style":16},"language-kotlin shiki shiki-themes github-light dark-plus dark-plus","// واجهة مستخدم Android مع Jetpack Compose\n@Composable\nfun Greeting(name: String) {\n    Column(\n        modifier = Modifier.padding(16.dp)\n    ) {\n        Text(\"Hello, $name!\")\n        Button(onClick = { /* Handle click */ }) {\n            Text(\"Click me\")\n        }\n    }\n}\n","kotlin",[448,2530,2531,2536,2541,2546,2551,2556,2561,2566,2571,2576,2581,2585],{"__ignoreMap":16},[1608,2532,2533],{"class":1785,"line":1786},[1608,2534,2535],{},"// واجهة مستخدم Android مع Jetpack Compose\n",[1608,2537,2538],{"class":1785,"line":1260},[1608,2539,2540],{},"@Composable\n",[1608,2542,2543],{"class":1785,"line":17},[1608,2544,2545],{},"fun Greeting(name: String) {\n",[1608,2547,2548],{"class":1785,"line":1802},[1608,2549,2550],{},"    Column(\n",[1608,2552,2553],{"class":1785,"line":1808},[1608,2554,2555],{},"        modifier = Modifier.padding(16.dp)\n",[1608,2557,2558],{"class":1785,"line":1814},[1608,2559,2560],{},"    ) {\n",[1608,2562,2563],{"class":1785,"line":1820},[1608,2564,2565],{},"        Text(\"Hello, $name!\")\n",[1608,2567,2568],{"class":1785,"line":1825},[1608,2569,2570],{},"        Button(onClick = { /* Handle click */ }) {\n",[1608,2572,2573],{"class":1785,"line":1831},[1608,2574,2575],{},"            Text(\"Click me\")\n",[1608,2577,2578],{"class":1785,"line":1333},[1608,2579,2580],{},"        }\n",[1608,2582,2583],{"class":1785,"line":2075},[1608,2584,2305],{},[1608,2586,2587],{"class":1785,"line":2099},[1608,2588,2005],{},[73,2590,2592],{"id":2591},"swift-تطوير-نظام-apple","Swift: تطوير نظام Apple",[30,2594,2595],{},"Swift يدعم جميع تطوير منصات Apple الحديثة.",[30,2597,2598],{},[37,2599,2600],{},"لماذا Swift؟",[49,2602,2603,2608,2614,2619],{},[52,2604,2605,2607],{},[37,2606,2161],{},": سريع وفعال",[52,2609,2610,2613],{},[37,2611,2612],{},"الأمان",": نظام أنواع قوي يمنع الأعطال",[52,2615,2616,2618],{},[37,2617,2167],{},": بناء جملة نظيف مع ميزات قوية",[52,2620,2621,2624],{},[37,2622,2623],{},"نظام Apple",": iOS، macOS، watchOS، tvOS",[30,2626,2627],{},[37,2628,1747],{},[49,2630,2631,2634,2637],{},[52,2632,2633],{},"تطوير تطبيقات iOS وmacOS",[52,2635,2636],{},"تطبيقات Apple Watch وApple TV",[52,2638,2639],{},"التطوير من جانب الخادم (مع Vapor)",[30,2641,2642,2644],{},[37,2643,1769],{},"\nيكسب مطورو iOS مع مهارات Swift 90,000 - 150,000 دولار، مع طلب عالي في الشركات أولاً للهاتف المحمول.",[68,2646,2648],{"id":2647},"اللغات-حسب-مسار-المهنة","اللغات حسب مسار المهنة",[73,2650,2652],{"id":2651},"لتطوير-الويب","لتطوير الويب",[30,2654,2655,2658,2659,2662],{},[37,2656,2657],{},"ابدأ بـ:"," JavaScript/TypeScript\n",[37,2660,2661],{},"ثم أضف:"," Python (Django/FastAPI) أو Go للخلفية",[73,2664,2666],{"id":2665},"للذكاء-الاصطناعيالتعلم-الآلي","للذكاء الاصطناعي/التعلم الآلي",[30,2668,2669,2671,2672,2674],{},[37,2670,2657],{}," Python\n",[37,2673,2661],{}," R للإحصائيات، Julia للحوسبة عالية الأداء",[73,2676,2678],{"id":2677},"لتطوير-الهاتف-المحمول","لتطوير الهاتف المحمول",[30,2680,2681,2684,2685,2688,2689,2692],{},[37,2682,2683],{},"Android:"," Kotlin\n",[37,2686,2687],{},"iOS:"," Swift\n",[37,2690,2691],{},"متعدد المنصات:"," Flutter (Dart) أو React Native (JavaScript/TypeScript)",[73,2694,2696],{"id":2695},"لتطوير-الألعاب","لتطوير الألعاب",[30,2698,2699,2701,2702,2705],{},[37,2700,2657],{}," C# (Unity) أو C++ (Unreal Engine)\n",[37,2703,2704],{},"ألعاب مستقلة:"," Godot (GDScript) أو Rust",[73,2707,2709],{"id":2708},"لـ-devopsالسحابة","لـ DevOps/السحابة",[30,2711,2712,2714,2715,2717],{},[37,2713,2657],{}," Python للبرمجة النصية\n",[37,2716,2661],{}," Go للأدوات، Terraform للبنية التحتية",[73,2719,2721],{"id":2720},"للهندسة-البيانات","للهندسة البيانات",[30,2723,2724,2726,2727,2729],{},[37,2725,2657],{}," Python أو SQL\n",[37,2728,2661],{}," Scala (Apache Spark)، Go لخطوط أنابيب البيانات",[68,2731,2733],{"id":2732},"اللغات-المراقبة-في-2025","اللغات المراقبة في 2025",[30,2735,2736,2739,2740,2743,2744,2747,2748,2751],{},[37,2737,2738],{},"Mojo",": لغة متوافقة مع Python مع أداء C++، مثالية للذكاء الاصطناعي\n",[37,2741,2742],{},"Zig",": بديل C مع الأمان والبساطة\n",[37,2745,2746],{},"Elixir",": لغة وظيفية للتطبيقات في الوقت الفعلي وقابلة للتوسع\n",[37,2749,2750],{},"Dart",": يدعم Flutter، ينمو في تطوير الهاتف المحمول",[68,2753,2755],{"id":2754},"استراتيجيات-التعلم","استراتيجيات التعلم",[30,2757,2758,2761],{},[37,2759,2760],{},"1. اختر لغة واحدة والتزم بها","\nلا تقفز بين اللغات في الأشهر الـ 3-6 الأولى. أتقن الأساسيات أولاً.",[30,2763,2764,2767],{},[37,2765,2766],{},"2. بنِ مشاريع حقيقية","\nالنظرية مهمة، لكن بناء المشاريع يعزز تعلمك.",[30,2769,2770],{},[37,2771,2772],{},"3. انضم للمجتمعات",[49,2774,2775,2778,2781,2784],{},[52,2776,2777],{},"Python: r/learnpython، Python Discord",[52,2779,2780],{},"JavaScript: r/learnjavascript، Frontend Mentor",[52,2782,2783],{},"Rust: منتدى مستخدمي Rust، r/rust",[52,2785,2786],{},"Go: Gophers Slack، r/golang",[30,2788,2789],{},[37,2790,2791],{},"4. استخدم موارد التعلم الحديثة",[49,2793,2794,2797,2800,2803],{},[52,2795,2796],{},"منصات تفاعلية: FreeCodeCamp، Codecademy، Exercism",[52,2798,2799],{},"قائمة على المشاريع: Frontend Mentor، LeetCode، Project Euler",[52,2801,2802],{},"التوثيق: اقرأ دائماً التوثيق الرسمي",[52,2804,2805],{},"مساعدو الذكاء الاصطناعي: استخدم ChatGPT وGitHub Copilot لفهم الكود",[30,2807,2808],{},[37,2809,2810],{},"5. ركز على الأساسيات",[49,2812,2813,2816,2819,2822,2825,2828],{},[52,2814,2815],{},"المتغيرات وأنواع البيانات",[52,2817,2818],{},"تدفق التحكم (if/else، loops)",[52,2820,2821],{},"الوظائف والنطاق",[52,2823,2824],{},"هياكل البيانات (arrays، objects، إلخ)",[52,2826,2827],{},"معالجة الأخطاء",[52,2829,2830],{},"العمل مع APIs",[68,2832,1600],{"id":1600},[30,2834,2835],{},"\"أفضل\" لغة برمجة في 2025 تعتمد على أهدافك، لكن الخبر السار هو أن تعلم أي لغة سيعلمك مفاهيم البرمجة الأساسية التي تنتقل إلى الآخرين.",[30,2837,2838],{},"ابدأ بلغة واحدة، بنِ مشاريع تهمك، ولا تقلق بشأن اختيار \"خطأ\". كل لغة تتعلمها تجعل التالية أسهل. الخطوة الأهم هي البدء في البرمجة اليوم.",[30,2840,2841],{},"ما يهم أكثر ليس أي لغة تختار، بل أن تلتزم بها طويلاً بما يكفي لبناء مهارات حقيقية. اختر واحدة، التزم بها لمدة 3-6 أشهر على الأقل، وشاهد إمكانيات مهنتك تتوسع.",[30,2843,2844],{},"برمجة سعيدة! 🚀",[2846,2847,2848],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}",{"title":16,"searchDepth":17,"depth":17,"links":2850},[2851,2852,2860,2868,2869,2870],{"id":1660,"depth":1260,"text":1661},{"id":1697,"depth":1260,"text":1698,"children":2853},[2854,2855,2856,2857,2858,2859],{"id":1701,"depth":17,"text":1702},{"id":1837,"depth":17,"text":1838},{"id":2139,"depth":17,"text":2140},{"id":2313,"depth":17,"text":2314},{"id":2463,"depth":17,"text":2464},{"id":2591,"depth":17,"text":2592},{"id":2647,"depth":1260,"text":2648,"children":2861},[2862,2863,2864,2865,2866,2867],{"id":2651,"depth":17,"text":2652},{"id":2665,"depth":17,"text":2666},{"id":2677,"depth":17,"text":2678},{"id":2695,"depth":17,"text":2696},{"id":2708,"depth":17,"text":2709},{"id":2720,"depth":17,"text":2721},{"id":2732,"depth":1260,"text":2733},{"id":2754,"depth":1260,"text":2755},{"id":1600,"depth":1260,"text":1600},"دليل شامل لاختيار لغة البرمجة المناسبة في 2025. استكشف أفضل اللغات بناءً على الطلب الصناعي، الآفاق المهنية، والاتجاهات الناشئة في الذكاء الاصطناعي، تطوير الويب، والبرمجة النظامية.","https://images.unsplash.com/photo-1546410531-bb4caa6b424d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE4fHxwcm9ncmFtbWluZyUyMGxhbmd1YWdlfGVufDB8fHx8MTY3MTE1NDE5OQ&ixlib=rb-4.0.3&q=80&w=2000",{"excerpt":2874},{"type":13,"value":2875},[2876,2878],[30,2877,1654],{},[30,2879,1657],{},"/afdhl-lghh-brmjh-lltalm-fy-2025","2022-12-19T09:42:26.000Z",{"title":1649,"description":2871},"أفضل-لغة-برمجة-للتعلم-في-2025",[1780,2885,1938,2218,2383,2528,1337,2886,1338,2887,2888],"javascript","web-development","ai","cloud","cJ1WQ4GpsL3XEvYADyJFEeyJO6X8uChQwhL9F1tRf0c",{"id":2891,"title":2892,"author":26,"body":2893,"category":19,"description":7276,"extension":7,"image":7277,"isDraft":1304,"isFeatured":1305,"locale":9,"meta":7278,"navigation":1305,"path":7283,"publishedAt":1634,"readingTime":2308,"seo":7284,"stem":7285,"tags":7286,"updatedAt":1342,"__hash__":7294},"articles_ar/أنماط-vue3-أساسية-2025.md","أنماط Vue 3 الأساسية لبناء تطبيقات حديثة وقابلة للتوسع في 2025",{"type":13,"value":2894,"toc":7232},[2895,2898,2902,2905,2978,3419,3423,3426,3430,3743,3747,3999,4003,4007,4447,4451,4755,4759,4763,5051,5055,5213,5217,5227,5305,5312,5419,5426,5526,5530,5534,5743,5747,6038,6042,6046,6255,6259,6409,6413,6417,6423,6427,6433,6437,6441,6712,6716,7083,7087,7091,7094,7108,7112,7220,7223,7226,7229],[30,2896,2897],{},"ثور Vue 3 طريقة بناء المطورين للواجهات التفاعلية والأداء العالي. Composition API، دعم TypeScript المحسن، والميزات الجديدة مثل Teleport و Suspense مهدت الطريق لتطوير تطبيقات أكثر قابلية للتوسع، قابلية للصيانة، وكفاءة. إتقان أنماط Vue 3 الأساسية أمر حاسم لأي مطور يريد بناء تطبيقات ويب حديثة. يتعمق هذا الدليل في الأنماط والممارسات الأساسية الرئيسية.",[68,2899,2901],{"id":2900},"_1-إتقان-composition-api","1. إتقان Composition API",[30,2903,2904],{},"Composition API هو حجر الأساس لتطوير Vue 3 الحديث، حيث يوفر طريقة مرنة لتنظيم وإعادة استخدام المنطق.",[49,2906,2907,2916,2942,2952],{},[52,2908,2909,2915],{},[37,2910,2911,2912,1970],{},"دالة ",[448,2913,2914],{},"setup()"," نقطة الدخول لاستخدام Composition API داخل المكونات. هناك حيث تعلن الحالة التفاعلية، الخصائص المحسوبة، المراقبين، وخطافات دورة الحياة.",[52,2917,2918,2928],{},[37,2919,2920,2921,2924,2925,1970],{},"التفاعل مع ",[448,2922,2923],{},"ref"," و ",[448,2926,2927],{},"reactive",[49,2929,2930,2936],{},[52,2931,2932,2935],{},[448,2933,2934],{},"ref()",": يُستخدم لإنشاء مراجع تفاعلية للقيم البدائية (String، Number، Boolean) أو كائنات فردية.",[52,2937,2938,2941],{},[448,2939,2940],{},"reactive()",": يُستخدم لإنشاء وكلاء تفاعليين للكائنات. يتم تتبع التغييرات في خصائص الكائن.",[52,2943,2944,2951],{},[37,2945,2946,2947,2950],{},"الخصائص المحسوبة (",[448,2948,2949],{},"computed",")",": لاشتقاق الحالة بناءً على مصادر تفاعلية أخرى. يتم تخزينها مؤقتاً وإعادة تقييمها فقط عندما تتغير تبعياتها.",[52,2953,2954,2963,2964],{},[37,2955,2956,2957,2924,2960,2950],{},"المراقبون (",[448,2958,2959],{},"watch",[448,2961,2962],{},"watchEffect",":\n",[49,2965,2966,2972],{},[52,2967,2968,2971],{},[448,2969,2970],{},"watch()",": مراقبة مصدر تفاعلي محدد صراحة وتشغيل رد الاتصال عند تغييره. يوفر تحكماً أكبر في التبعيات والتوقيت.",[52,2973,2974,2977],{},[448,2975,2976],{},"watchEffect()",": يشغل دالة فوراً ويعيد تشغيلها كلما تغيرت أي من تبعياتها التفاعلية. أبسط للتأثيرات الجانبية المباشرة.",[441,2979,2983],{"className":2980,"code":2981,"language":2982,"meta":16,"style":16},"language-vue shiki shiki-themes github-light dark-plus dark-plus","\u003Cscript setup lang=\"ts\">\nimport { ref, reactive, computed, watch, watchEffect } from \"vue\";\n\n// الحالة التفاعلية\nconst count = ref(0);\nconst user = reactive({ name: \"John Doe\", age: 30 });\n\n// الخاصية المحسوبة\nconst doubledCount = computed(() => count.value * 2);\n\n// المراقب\nwatch(count, (newCount, oldCount) => {\n  console.log(`Count changed from ${oldCount} to ${newCount}`);\n});\n\n// مراقب التأثير\nwatchEffect(() => {\n  console.log(`Count is ${count.value}`);\n});\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cp>Count: {{ count }}\u003C/p>\n    \u003Cp>Doubled: {{ doubledCount }}\u003C/p>\n    \u003Cbutton @click=\"count++\">Increment\u003C/button>\n  \u003C/div>\n\u003C/template>\n","vue",[448,2984,2985,3009,3046,3050,3055,3080,3111,3115,3120,3153,3157,3162,3188,3225,3230,3234,3239,3249,3277,3282,3291,3296,3306,3316,3340,3363,3400,3410],{"__ignoreMap":16},[1608,2986,2987,2991,2995,2999,3002,3004,3007],{"class":1785,"line":1786},[1608,2988,2990],{"class":2989},"sffyN","\u003C",[1608,2992,2994],{"class":2993},"ssFZ1","script",[1608,2996,2998],{"class":2997},"sFcZJ"," setup",[1608,3000,3001],{"class":2997}," lang",[1608,3003,2065],{"class":1959},[1608,3005,3006],{"class":2068},"\"ts\"",[1608,3008,2072],{"class":2989},[1608,3010,3011,3014,3016,3018,3021,3023,3025,3027,3029,3031,3033,3035,3038,3041,3044],{"class":1785,"line":1260},[1608,3012,3013],{"class":2046},"import",[1608,3015,2032],{"class":1959},[1608,3017,2923],{"class":2058},[1608,3019,3020],{"class":1959},", ",[1608,3022,2927],{"class":2058},[1608,3024,3020],{"class":1959},[1608,3026,2949],{"class":2058},[1608,3028,3020],{"class":1959},[1608,3030,2959],{"class":2058},[1608,3032,3020],{"class":1959},[1608,3034,2962],{"class":2058},[1608,3036,3037],{"class":1959}," } ",[1608,3039,3040],{"class":2046},"from",[1608,3042,3043],{"class":2068}," \"vue\"",[1608,3045,1977],{"class":1959},[1608,3047,3048],{"class":1785,"line":17},[1608,3049,1805],{"emptyLinePlaceholder":1305},[1608,3051,3052],{"class":1785,"line":1802},[1608,3053,3054],{"class":1945},"// الحالة التفاعلية\n",[1608,3056,3057,3060,3064,3067,3070,3073,3077],{"class":1785,"line":1808},[1608,3058,3059],{"class":1951},"const",[1608,3061,3063],{"class":3062},"sToQf"," count",[1608,3065,3066],{"class":1969}," =",[1608,3068,3069],{"class":2017}," ref",[1608,3071,3072],{"class":1959},"(",[1608,3074,3076],{"class":3075},"seC34","0",[1608,3078,3079],{"class":1959},");\n",[1608,3081,3082,3084,3087,3089,3092,3094,3097,3100,3102,3105,3108],{"class":1785,"line":1814},[1608,3083,3059],{"class":1951},[1608,3085,3086],{"class":3062}," user",[1608,3088,3066],{"class":1969},[1608,3090,3091],{"class":2017}," reactive",[1608,3093,2021],{"class":1959},[1608,3095,3096],{"class":2058},"name:",[1608,3098,3099],{"class":2068}," \"John Doe\"",[1608,3101,3020],{"class":1959},[1608,3103,3104],{"class":2058},"age:",[1608,3106,3107],{"class":3075}," 30",[1608,3109,3110],{"class":1959}," });\n",[1608,3112,3113],{"class":1785,"line":1820},[1608,3114,1805],{"emptyLinePlaceholder":1305},[1608,3116,3117],{"class":1785,"line":1825},[1608,3118,3119],{"class":1945},"// الخاصية المحسوبة\n",[1608,3121,3122,3124,3127,3129,3132,3135,3138,3140,3142,3145,3148,3151],{"class":1785,"line":1831},[1608,3123,3059],{"class":1951},[1608,3125,3126],{"class":3062}," doubledCount",[1608,3128,3066],{"class":1969},[1608,3130,3131],{"class":2017}," computed",[1608,3133,3134],{"class":1959},"(() ",[1608,3136,3137],{"class":1951},"=>",[1608,3139,3063],{"class":2058},[1608,3141,44],{"class":1959},[1608,3143,3144],{"class":2058},"value",[1608,3146,3147],{"class":1969}," *",[1608,3149,3150],{"class":3075}," 2",[1608,3152,3079],{"class":1959},[1608,3154,3155],{"class":1785,"line":1333},[1608,3156,1805],{"emptyLinePlaceholder":1305},[1608,3158,3159],{"class":1785,"line":2075},[1608,3160,3161],{"class":1945},"// المراقب\n",[1608,3163,3164,3166,3168,3170,3173,3176,3178,3181,3184,3186],{"class":1785,"line":2099},[1608,3165,2959],{"class":2017},[1608,3167,3072],{"class":1959},[1608,3169,1613],{"class":2058},[1608,3171,3172],{"class":1959},", (",[1608,3174,3175],{"class":1965},"newCount",[1608,3177,3020],{"class":1959},[1608,3179,3180],{"class":1965},"oldCount",[1608,3182,3183],{"class":1959},") ",[1608,3185,3137],{"class":1951},[1608,3187,1960],{"class":1959},[1608,3189,3190,3193,3195,3198,3200,3203,3207,3209,3211,3214,3216,3218,3220,3223],{"class":1785,"line":2119},[1608,3191,3192],{"class":2058},"  console",[1608,3194,44],{"class":1959},[1608,3196,3197],{"class":2017},"log",[1608,3199,3072],{"class":1959},[1608,3201,3202],{"class":2068},"`Count changed from ",[1608,3204,3206],{"class":3205},"se2iQ","${",[1608,3208,3180],{"class":2058},[1608,3210,2089],{"class":3205},[1608,3212,3213],{"class":2068}," to ",[1608,3215,3206],{"class":3205},[1608,3217,3175],{"class":2058},[1608,3219,2089],{"class":3205},[1608,3221,3222],{"class":2068},"`",[1608,3224,3079],{"class":1959},[1608,3226,3227],{"class":1785,"line":2129},[1608,3228,3229],{"class":1959},"});\n",[1608,3231,3232],{"class":1785,"line":1635},[1608,3233,1805],{"emptyLinePlaceholder":1305},[1608,3235,3236],{"class":1785,"line":2296},[1608,3237,3238],{"class":1945},"// مراقب التأثير\n",[1608,3240,3241,3243,3245,3247],{"class":1785,"line":2302},[1608,3242,2962],{"class":2017},[1608,3244,3134],{"class":1959},[1608,3246,3137],{"class":1951},[1608,3248,1960],{"class":1959},[1608,3250,3251,3253,3255,3257,3259,3262,3264,3266,3269,3271,3273,3275],{"class":1785,"line":2308},[1608,3252,3192],{"class":2058},[1608,3254,44],{"class":1959},[1608,3256,3197],{"class":2017},[1608,3258,3072],{"class":1959},[1608,3260,3261],{"class":2068},"`Count is ",[1608,3263,3206],{"class":3205},[1608,3265,1613],{"class":2058},[1608,3267,44],{"class":3268},"s5T4v",[1608,3270,3144],{"class":2058},[1608,3272,2089],{"class":3205},[1608,3274,3222],{"class":2068},[1608,3276,3079],{"class":1959},[1608,3278,3280],{"class":1785,"line":3279},19,[1608,3281,3229],{"class":1959},[1608,3283,3285,3287,3289],{"class":1785,"line":3284},20,[1608,3286,2092],{"class":2989},[1608,3288,2994],{"class":2993},[1608,3290,2072],{"class":2989},[1608,3292,3294],{"class":1785,"line":3293},21,[1608,3295,1805],{"emptyLinePlaceholder":1305},[1608,3297,3299,3301,3304],{"class":1785,"line":3298},22,[1608,3300,2990],{"class":2989},[1608,3302,3303],{"class":2993},"template",[1608,3305,2072],{"class":2989},[1608,3307,3309,3312,3314],{"class":1785,"line":3308},23,[1608,3310,3311],{"class":2989},"  \u003C",[1608,3313,2059],{"class":2993},[1608,3315,2072],{"class":2989},[1608,3317,3319,3321,3323,3326,3329,3331,3334,3336,3338],{"class":1785,"line":3318},24,[1608,3320,2055],{"class":2989},[1608,3322,30],{"class":2993},[1608,3324,3325],{"class":2989},">",[1608,3327,3328],{"class":1959},"Count: {{ ",[1608,3330,1613],{"class":2058},[1608,3332,3333],{"class":1959}," }}",[1608,3335,2092],{"class":2989},[1608,3337,30],{"class":2993},[1608,3339,2072],{"class":2989},[1608,3341,3343,3345,3347,3349,3352,3355,3357,3359,3361],{"class":1785,"line":3342},25,[1608,3344,2055],{"class":2989},[1608,3346,30],{"class":2993},[1608,3348,3325],{"class":2989},[1608,3350,3351],{"class":1959},"Doubled: {{ ",[1608,3353,3354],{"class":2058},"doubledCount",[1608,3356,3333],{"class":1959},[1608,3358,2092],{"class":2989},[1608,3360,30],{"class":2993},[1608,3362,2072],{"class":2989},[1608,3364,3366,3368,3371,3374,3377,3379,3382,3384,3387,3389,3391,3394,3396,3398],{"class":1785,"line":3365},26,[1608,3367,2055],{"class":2989},[1608,3369,3370],{"class":2993},"button",[1608,3372,3373],{"class":1959}," @",[1608,3375,3376],{"class":2997},"click",[1608,3378,2065],{"class":1959},[1608,3380,3381],{"class":3268},"\"",[1608,3383,1613],{"class":2058},[1608,3385,3386],{"class":1969},"++",[1608,3388,3381],{"class":3268},[1608,3390,3325],{"class":2989},[1608,3392,3393],{"class":1959},"Increment",[1608,3395,2092],{"class":2989},[1608,3397,3370],{"class":2993},[1608,3399,2072],{"class":2989},[1608,3401,3403,3406,3408],{"class":1785,"line":3402},27,[1608,3404,3405],{"class":2989},"  \u003C/",[1608,3407,2059],{"class":2993},[1608,3409,2072],{"class":2989},[1608,3411,3413,3415,3417],{"class":1785,"line":3412},28,[1608,3414,2092],{"class":2989},[1608,3416,3303],{"class":2993},[1608,3418,2072],{"class":2989},[68,3420,3422],{"id":3421},"_2-إدارة-الحالة-مع-pinia","2. إدارة الحالة مع Pinia",[30,3424,3425],{},"Pinia هو حل إدارة الحالة الرسمي لـ Vue 3، ويوفر طريقة حديثة وبديهية لإدارة الحالة العامة.",[73,3427,3429],{"id":3428},"إنشاء-مخزن-pinia","إنشاء مخزن Pinia",[441,3431,3433],{"className":1936,"code":3432,"language":1938,"meta":16,"style":16},"// stores/counter.ts\nimport { defineStore } from 'pinia'\nimport { ref, computed } from 'vue'\n\nexport const useCounterStore = defineStore('counter', () => {\n  // الحالة\n  const count = ref(0)\n  const name = ref('Counter')\n\n  // الجيترات\n  const doubleCount = computed(() => count.value * 2)\n\n  // الإجراءات\n  function increment() {\n    count.value++\n  }\n\n  function decrement() {\n    count.value--\n  }\n\n  function reset() {\n    count.value = 0\n  }\n\n  return {\n    count,\n    name,\n    doubleCount,\n    increment,\n    decrement,\n    reset\n  }\n})\n",[448,3434,3435,3440,3456,3475,3479,3507,3512,3529,3547,3551,3556,3583,3587,3592,3603,3615,3620,3624,3633,3644,3648,3652,3661,3674,3678,3682,3688,3695,3702,3710,3718,3726,3732,3737],{"__ignoreMap":16},[1608,3436,3437],{"class":1785,"line":1786},[1608,3438,3439],{"class":1945},"// stores/counter.ts\n",[1608,3441,3442,3444,3446,3449,3451,3453],{"class":1785,"line":1260},[1608,3443,3013],{"class":2046},[1608,3445,2032],{"class":1959},[1608,3447,3448],{"class":2058},"defineStore",[1608,3450,3037],{"class":1959},[1608,3452,3040],{"class":2046},[1608,3454,3455],{"class":2068}," 'pinia'\n",[1608,3457,3458,3460,3462,3464,3466,3468,3470,3472],{"class":1785,"line":17},[1608,3459,3013],{"class":2046},[1608,3461,2032],{"class":1959},[1608,3463,2923],{"class":2058},[1608,3465,3020],{"class":1959},[1608,3467,2949],{"class":2058},[1608,3469,3037],{"class":1959},[1608,3471,3040],{"class":2046},[1608,3473,3474],{"class":2068}," 'vue'\n",[1608,3476,3477],{"class":1785,"line":1802},[1608,3478,1805],{"emptyLinePlaceholder":1305},[1608,3480,3481,3484,3487,3490,3492,3495,3497,3500,3503,3505],{"class":1785,"line":1808},[1608,3482,3483],{"class":2046},"export",[1608,3485,3486],{"class":1951}," const",[1608,3488,3489],{"class":3062}," useCounterStore",[1608,3491,3066],{"class":1969},[1608,3493,3494],{"class":2017}," defineStore",[1608,3496,3072],{"class":1959},[1608,3498,3499],{"class":2068},"'counter'",[1608,3501,3502],{"class":1959},", () ",[1608,3504,3137],{"class":1951},[1608,3506,1960],{"class":1959},[1608,3508,3509],{"class":1785,"line":1814},[1608,3510,3511],{"class":1945},"  // الحالة\n",[1608,3513,3514,3517,3519,3521,3523,3525,3527],{"class":1785,"line":1820},[1608,3515,3516],{"class":1951},"  const",[1608,3518,3063],{"class":3062},[1608,3520,3066],{"class":1969},[1608,3522,3069],{"class":2017},[1608,3524,3072],{"class":1959},[1608,3526,3076],{"class":3075},[1608,3528,2419],{"class":1959},[1608,3530,3531,3533,3536,3538,3540,3542,3545],{"class":1785,"line":1825},[1608,3532,3516],{"class":1951},[1608,3534,3535],{"class":3062}," name",[1608,3537,3066],{"class":1969},[1608,3539,3069],{"class":2017},[1608,3541,3072],{"class":1959},[1608,3543,3544],{"class":2068},"'Counter'",[1608,3546,2419],{"class":1959},[1608,3548,3549],{"class":1785,"line":1831},[1608,3550,1805],{"emptyLinePlaceholder":1305},[1608,3552,3553],{"class":1785,"line":1333},[1608,3554,3555],{"class":1945},"  // الجيترات\n",[1608,3557,3558,3560,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581],{"class":1785,"line":2075},[1608,3559,3516],{"class":1951},[1608,3561,3562],{"class":3062}," doubleCount",[1608,3564,3066],{"class":1969},[1608,3566,3131],{"class":2017},[1608,3568,3134],{"class":1959},[1608,3570,3137],{"class":1951},[1608,3572,3063],{"class":2058},[1608,3574,44],{"class":1959},[1608,3576,3144],{"class":2058},[1608,3578,3147],{"class":1969},[1608,3580,3150],{"class":3075},[1608,3582,2419],{"class":1959},[1608,3584,3585],{"class":1785,"line":2099},[1608,3586,1805],{"emptyLinePlaceholder":1305},[1608,3588,3589],{"class":1785,"line":2119},[1608,3590,3591],{"class":1945},"  // الإجراءات\n",[1608,3593,3594,3597,3600],{"class":1785,"line":2129},[1608,3595,3596],{"class":1951},"  function",[1608,3598,3599],{"class":2017}," increment",[1608,3601,3602],{"class":1959},"() {\n",[1608,3604,3605,3608,3610,3612],{"class":1785,"line":1635},[1608,3606,3607],{"class":2058},"    count",[1608,3609,44],{"class":1959},[1608,3611,3144],{"class":2058},[1608,3613,3614],{"class":1969},"++\n",[1608,3616,3617],{"class":1785,"line":2296},[1608,3618,3619],{"class":1959},"  }\n",[1608,3621,3622],{"class":1785,"line":2302},[1608,3623,1805],{"emptyLinePlaceholder":1305},[1608,3625,3626,3628,3631],{"class":1785,"line":2308},[1608,3627,3596],{"class":1951},[1608,3629,3630],{"class":2017}," decrement",[1608,3632,3602],{"class":1959},[1608,3634,3635,3637,3639,3641],{"class":1785,"line":3279},[1608,3636,3607],{"class":2058},[1608,3638,44],{"class":1959},[1608,3640,3144],{"class":2058},[1608,3642,3643],{"class":1969},"--\n",[1608,3645,3646],{"class":1785,"line":3284},[1608,3647,3619],{"class":1959},[1608,3649,3650],{"class":1785,"line":3293},[1608,3651,1805],{"emptyLinePlaceholder":1305},[1608,3653,3654,3656,3659],{"class":1785,"line":3298},[1608,3655,3596],{"class":1951},[1608,3657,3658],{"class":2017}," reset",[1608,3660,3602],{"class":1959},[1608,3662,3663,3665,3667,3669,3671],{"class":1785,"line":3308},[1608,3664,3607],{"class":2058},[1608,3666,44],{"class":1959},[1608,3668,3144],{"class":2058},[1608,3670,3066],{"class":1969},[1608,3672,3673],{"class":3075}," 0\n",[1608,3675,3676],{"class":1785,"line":3318},[1608,3677,3619],{"class":1959},[1608,3679,3680],{"class":1785,"line":3342},[1608,3681,1805],{"emptyLinePlaceholder":1305},[1608,3683,3684,3686],{"class":1785,"line":3365},[1608,3685,2047],{"class":2046},[1608,3687,1960],{"class":1959},[1608,3689,3690,3692],{"class":1785,"line":3402},[1608,3691,3607],{"class":2058},[1608,3693,3694],{"class":1959},",\n",[1608,3696,3697,3700],{"class":1785,"line":3412},[1608,3698,3699],{"class":2058},"    name",[1608,3701,3694],{"class":1959},[1608,3703,3705,3708],{"class":1785,"line":3704},29,[1608,3706,3707],{"class":2058},"    doubleCount",[1608,3709,3694],{"class":1959},[1608,3711,3713,3716],{"class":1785,"line":3712},30,[1608,3714,3715],{"class":2058},"    increment",[1608,3717,3694],{"class":1959},[1608,3719,3721,3724],{"class":1785,"line":3720},31,[1608,3722,3723],{"class":2058},"    decrement",[1608,3725,3694],{"class":1959},[1608,3727,3729],{"class":1785,"line":3728},32,[1608,3730,3731],{"class":2058},"    reset\n",[1608,3733,3735],{"class":1785,"line":3734},33,[1608,3736,3619],{"class":1959},[1608,3738,3740],{"class":1785,"line":3739},34,[1608,3741,3742],{"class":1959},"})\n",[73,3744,3746],{"id":3745},"استخدام-المخزن-في-المكونات","استخدام المخزن في المكونات",[441,3748,3750],{"className":2980,"code":3749,"language":2982,"meta":16,"style":16},"\u003Cscript setup lang=\"ts\">\nimport { useCounterStore } from '@/stores/counter'\n\nconst counterStore = useCounterStore()\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cp>Count: {{ counterStore.count }}\u003C/p>\n    \u003Cp>Double: {{ counterStore.doubleCount }}\u003C/p>\n    \u003Cbutton @click=\"counterStore.increment\">+\u003C/button>\n    \u003Cbutton @click=\"counterStore.decrement\">-\u003C/button>\n    \u003Cbutton @click=\"counterStore.reset\">Reset\u003C/button>\n  \u003C/div>\n\u003C/template>\n",[448,3751,3752,3768,3784,3788,3802,3810,3814,3822,3830,3855,3881,3915,3949,3983,3991],{"__ignoreMap":16},[1608,3753,3754,3756,3758,3760,3762,3764,3766],{"class":1785,"line":1786},[1608,3755,2990],{"class":2989},[1608,3757,2994],{"class":2993},[1608,3759,2998],{"class":2997},[1608,3761,3001],{"class":2997},[1608,3763,2065],{"class":1959},[1608,3765,3006],{"class":2068},[1608,3767,2072],{"class":2989},[1608,3769,3770,3772,3774,3777,3779,3781],{"class":1785,"line":1260},[1608,3771,3013],{"class":2046},[1608,3773,2032],{"class":1959},[1608,3775,3776],{"class":2058},"useCounterStore",[1608,3778,3037],{"class":1959},[1608,3780,3040],{"class":2046},[1608,3782,3783],{"class":2068}," '@/stores/counter'\n",[1608,3785,3786],{"class":1785,"line":17},[1608,3787,1805],{"emptyLinePlaceholder":1305},[1608,3789,3790,3792,3795,3797,3799],{"class":1785,"line":1802},[1608,3791,3059],{"class":1951},[1608,3793,3794],{"class":3062}," counterStore",[1608,3796,3066],{"class":1969},[1608,3798,3489],{"class":2017},[1608,3800,3801],{"class":1959},"()\n",[1608,3803,3804,3806,3808],{"class":1785,"line":1808},[1608,3805,2092],{"class":2989},[1608,3807,2994],{"class":2993},[1608,3809,2072],{"class":2989},[1608,3811,3812],{"class":1785,"line":1814},[1608,3813,1805],{"emptyLinePlaceholder":1305},[1608,3815,3816,3818,3820],{"class":1785,"line":1820},[1608,3817,2990],{"class":2989},[1608,3819,3303],{"class":2993},[1608,3821,2072],{"class":2989},[1608,3823,3824,3826,3828],{"class":1785,"line":1825},[1608,3825,3311],{"class":2989},[1608,3827,2059],{"class":2993},[1608,3829,2072],{"class":2989},[1608,3831,3832,3834,3836,3838,3840,3843,3845,3847,3849,3851,3853],{"class":1785,"line":1831},[1608,3833,2055],{"class":2989},[1608,3835,30],{"class":2993},[1608,3837,3325],{"class":2989},[1608,3839,3328],{"class":1959},[1608,3841,3842],{"class":2058},"counterStore",[1608,3844,44],{"class":1959},[1608,3846,1613],{"class":2058},[1608,3848,3333],{"class":1959},[1608,3850,2092],{"class":2989},[1608,3852,30],{"class":2993},[1608,3854,2072],{"class":2989},[1608,3856,3857,3859,3861,3863,3866,3868,3870,3873,3875,3877,3879],{"class":1785,"line":1333},[1608,3858,2055],{"class":2989},[1608,3860,30],{"class":2993},[1608,3862,3325],{"class":2989},[1608,3864,3865],{"class":1959},"Double: {{ ",[1608,3867,3842],{"class":2058},[1608,3869,44],{"class":1959},[1608,3871,3872],{"class":2058},"doubleCount",[1608,3874,3333],{"class":1959},[1608,3876,2092],{"class":2989},[1608,3878,30],{"class":2993},[1608,3880,2072],{"class":2989},[1608,3882,3883,3885,3887,3889,3891,3893,3895,3897,3899,3902,3904,3906,3909,3911,3913],{"class":1785,"line":2075},[1608,3884,2055],{"class":2989},[1608,3886,3370],{"class":2993},[1608,3888,3373],{"class":1959},[1608,3890,3376],{"class":2997},[1608,3892,2065],{"class":1959},[1608,3894,3381],{"class":3268},[1608,3896,3842],{"class":2058},[1608,3898,44],{"class":1959},[1608,3900,3901],{"class":2058},"increment",[1608,3903,3381],{"class":3268},[1608,3905,3325],{"class":2989},[1608,3907,3908],{"class":1959},"+",[1608,3910,2092],{"class":2989},[1608,3912,3370],{"class":2993},[1608,3914,2072],{"class":2989},[1608,3916,3917,3919,3921,3923,3925,3927,3929,3931,3933,3936,3938,3940,3943,3945,3947],{"class":1785,"line":2099},[1608,3918,2055],{"class":2989},[1608,3920,3370],{"class":2993},[1608,3922,3373],{"class":1959},[1608,3924,3376],{"class":2997},[1608,3926,2065],{"class":1959},[1608,3928,3381],{"class":3268},[1608,3930,3842],{"class":2058},[1608,3932,44],{"class":1959},[1608,3934,3935],{"class":2058},"decrement",[1608,3937,3381],{"class":3268},[1608,3939,3325],{"class":2989},[1608,3941,3942],{"class":1959},"-",[1608,3944,2092],{"class":2989},[1608,3946,3370],{"class":2993},[1608,3948,2072],{"class":2989},[1608,3950,3951,3953,3955,3957,3959,3961,3963,3965,3967,3970,3972,3974,3977,3979,3981],{"class":1785,"line":2119},[1608,3952,2055],{"class":2989},[1608,3954,3370],{"class":2993},[1608,3956,3373],{"class":1959},[1608,3958,3376],{"class":2997},[1608,3960,2065],{"class":1959},[1608,3962,3381],{"class":3268},[1608,3964,3842],{"class":2058},[1608,3966,44],{"class":1959},[1608,3968,3969],{"class":2058},"reset",[1608,3971,3381],{"class":3268},[1608,3973,3325],{"class":2989},[1608,3975,3976],{"class":1959},"Reset",[1608,3978,2092],{"class":2989},[1608,3980,3370],{"class":2993},[1608,3982,2072],{"class":2989},[1608,3984,3985,3987,3989],{"class":1785,"line":2129},[1608,3986,3405],{"class":2989},[1608,3988,2059],{"class":2993},[1608,3990,2072],{"class":2989},[1608,3992,3993,3995,3997],{"class":1785,"line":1635},[1608,3994,2092],{"class":2989},[1608,3996,3303],{"class":2993},[1608,3998,2072],{"class":2989},[68,4000,4002],{"id":4001},"_3-أنماط-المكونات-المتقدمة","3. أنماط المكونات المتقدمة",[73,4004,4006],{"id":4005},"نمط-المكونات-المركبة-composite-components","نمط المكونات المركبة (Composite Components)",[441,4008,4010],{"className":2980,"code":4009,"language":2982,"meta":16,"style":16},"\u003C!-- components/FormField.vue -->\n\u003Cscript setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n  label: string\n  modelValue: string\n  error?: string\n}\n\nconst props = defineProps\u003CProps>()\nconst emit = defineEmits\u003C{\n  'update:modelValue': [value: string]\n}>()\n\nconst inputClasses = computed(() => ({\n  'border-red-500': !!props.error,\n  'border-gray-300': !props.error\n}))\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"form-field\">\n    \u003Clabel class=\"block text-sm font-medium text-gray-700\">\n      {{ label }}\n    \u003C/label>\n    \u003Cinput\n      :value=\"modelValue\"\n      @input=\"$emit('update:modelValue', $event.target.value)\"\n      :class=\"inputClasses\"\n      class=\"mt-1 block w-full rounded-md border px-3 py-2 shadow-sm focus:border-indigo-500 focus:outline-none focus:ring-indigo-500\"\n    />\n    \u003Cp v-if=\"error\" class=\"mt-1 text-sm text-red-600\">\n      {{ error }}\n    \u003C/p>\n  \u003C/div>\n\u003C/template>\n",[448,4011,4012,4017,4033,4047,4051,4060,4070,4079,4089,4093,4097,4117,4132,4154,4159,4163,4181,4201,4218,4223,4231,4235,4243,4259,4275,4285,4293,4300,4317,4355,4371,4381,4386,4412,4420,4429,4438],{"__ignoreMap":16},[1608,4013,4014],{"class":1785,"line":1786},[1608,4015,4016],{"class":1945},"\u003C!-- components/FormField.vue -->\n",[1608,4018,4019,4021,4023,4025,4027,4029,4031],{"class":1785,"line":1260},[1608,4020,2990],{"class":2989},[1608,4022,2994],{"class":2993},[1608,4024,2998],{"class":2997},[1608,4026,3001],{"class":2997},[1608,4028,2065],{"class":1959},[1608,4030,3006],{"class":2068},[1608,4032,2072],{"class":2989},[1608,4034,4035,4037,4039,4041,4043,4045],{"class":1785,"line":17},[1608,4036,3013],{"class":2046},[1608,4038,2032],{"class":1959},[1608,4040,2949],{"class":2058},[1608,4042,3037],{"class":1959},[1608,4044,3040],{"class":2046},[1608,4046,3474],{"class":2068},[1608,4048,4049],{"class":1785,"line":1802},[1608,4050,1805],{"emptyLinePlaceholder":1305},[1608,4052,4053,4055,4058],{"class":1785,"line":1808},[1608,4054,1952],{"class":1951},[1608,4056,4057],{"class":1955}," Props",[1608,4059,1960],{"class":1959},[1608,4061,4062,4065,4067],{"class":1785,"line":1814},[1608,4063,4064],{"class":1965},"  label",[1608,4066,1970],{"class":1969},[1608,4068,4069],{"class":1973}," string\n",[1608,4071,4072,4075,4077],{"class":1785,"line":1820},[1608,4073,4074],{"class":1965},"  modelValue",[1608,4076,1970],{"class":1969},[1608,4078,4069],{"class":1973},[1608,4080,4081,4084,4087],{"class":1785,"line":1825},[1608,4082,4083],{"class":1965},"  error",[1608,4085,4086],{"class":1969},"?:",[1608,4088,4069],{"class":1973},[1608,4090,4091],{"class":1785,"line":1831},[1608,4092,2005],{"class":1959},[1608,4094,4095],{"class":1785,"line":1333},[1608,4096,1805],{"emptyLinePlaceholder":1305},[1608,4098,4099,4101,4104,4106,4109,4111,4114],{"class":1785,"line":2075},[1608,4100,3059],{"class":1951},[1608,4102,4103],{"class":3062}," props",[1608,4105,3066],{"class":1969},[1608,4107,4108],{"class":2017}," defineProps",[1608,4110,2990],{"class":1959},[1608,4112,4113],{"class":1955},"Props",[1608,4115,4116],{"class":1959},">()\n",[1608,4118,4119,4121,4124,4126,4129],{"class":1785,"line":2099},[1608,4120,3059],{"class":1951},[1608,4122,4123],{"class":3062}," emit",[1608,4125,3066],{"class":1969},[1608,4127,4128],{"class":2017}," defineEmits",[1608,4130,4131],{"class":1959},"\u003C{\n",[1608,4133,4134,4137,4139,4142,4145,4148,4151],{"class":1785,"line":2119},[1608,4135,4136],{"class":2068},"  'update:modelValue'",[1608,4138,1970],{"class":1969},[1608,4140,4141],{"class":1959}," [",[1608,4143,3144],{"class":4144},"sGRYn",[1608,4146,4147],{"class":1959},": ",[1608,4149,4150],{"class":1973},"string",[1608,4152,4153],{"class":1959},"]\n",[1608,4155,4156],{"class":1785,"line":2129},[1608,4157,4158],{"class":1959},"}>()\n",[1608,4160,4161],{"class":1785,"line":1635},[1608,4162,1805],{"emptyLinePlaceholder":1305},[1608,4164,4165,4167,4170,4172,4174,4176,4178],{"class":1785,"line":2296},[1608,4166,3059],{"class":1951},[1608,4168,4169],{"class":3062}," inputClasses",[1608,4171,3066],{"class":1969},[1608,4173,3131],{"class":2017},[1608,4175,3134],{"class":1959},[1608,4177,3137],{"class":1951},[1608,4179,4180],{"class":1959}," ({\n",[1608,4182,4183,4186,4188,4191,4194,4196,4199],{"class":1785,"line":2302},[1608,4184,4185],{"class":2068},"  'border-red-500'",[1608,4187,1970],{"class":2058},[1608,4189,4190],{"class":1969}," !!",[1608,4192,4193],{"class":2058},"props",[1608,4195,44],{"class":1959},[1608,4197,4198],{"class":2058},"error",[1608,4200,3694],{"class":1959},[1608,4202,4203,4206,4208,4211,4213,4215],{"class":1785,"line":2308},[1608,4204,4205],{"class":2068},"  'border-gray-300'",[1608,4207,1970],{"class":2058},[1608,4209,4210],{"class":1969}," !",[1608,4212,4193],{"class":2058},[1608,4214,44],{"class":1959},[1608,4216,4217],{"class":2058},"error\n",[1608,4219,4220],{"class":1785,"line":3279},[1608,4221,4222],{"class":1959},"}))\n",[1608,4224,4225,4227,4229],{"class":1785,"line":3284},[1608,4226,2092],{"class":2989},[1608,4228,2994],{"class":2993},[1608,4230,2072],{"class":2989},[1608,4232,4233],{"class":1785,"line":3293},[1608,4234,1805],{"emptyLinePlaceholder":1305},[1608,4236,4237,4239,4241],{"class":1785,"line":3298},[1608,4238,2990],{"class":2989},[1608,4240,3303],{"class":2993},[1608,4242,2072],{"class":2989},[1608,4244,4245,4247,4249,4252,4254,4257],{"class":1785,"line":3308},[1608,4246,3311],{"class":2989},[1608,4248,2059],{"class":2993},[1608,4250,4251],{"class":2997}," class",[1608,4253,2065],{"class":1959},[1608,4255,4256],{"class":2068},"\"form-field\"",[1608,4258,2072],{"class":2989},[1608,4260,4261,4263,4266,4268,4270,4273],{"class":1785,"line":3318},[1608,4262,2055],{"class":2989},[1608,4264,4265],{"class":2993},"label",[1608,4267,4251],{"class":2997},[1608,4269,2065],{"class":1959},[1608,4271,4272],{"class":2068},"\"block text-sm font-medium text-gray-700\"",[1608,4274,2072],{"class":2989},[1608,4276,4277,4280,4282],{"class":1785,"line":3342},[1608,4278,4279],{"class":1959},"      {{ ",[1608,4281,4265],{"class":2058},[1608,4283,4284],{"class":1959}," }}\n",[1608,4286,4287,4289,4291],{"class":1785,"line":3365},[1608,4288,2122],{"class":2989},[1608,4290,4265],{"class":2993},[1608,4292,2072],{"class":2989},[1608,4294,4295,4297],{"class":1785,"line":3402},[1608,4296,2055],{"class":2989},[1608,4298,4299],{"class":2993},"input\n",[1608,4301,4302,4305,4307,4309,4311,4314],{"class":1785,"line":3412},[1608,4303,4304],{"class":1959},"      :",[1608,4306,3144],{"class":2997},[1608,4308,2065],{"class":1959},[1608,4310,3381],{"class":3268},[1608,4312,4313],{"class":2058},"modelValue",[1608,4315,4316],{"class":3268},"\"\n",[1608,4318,4319,4322,4325,4327,4329,4332,4334,4337,4339,4342,4344,4347,4349,4351,4353],{"class":1785,"line":3704},[1608,4320,4321],{"class":1959},"      @",[1608,4323,4324],{"class":2997},"input",[1608,4326,2065],{"class":1959},[1608,4328,3381],{"class":3268},[1608,4330,4331],{"class":2017},"$emit",[1608,4333,3072],{"class":1959},[1608,4335,4336],{"class":2068},"'update:modelValue'",[1608,4338,3020],{"class":1959},[1608,4340,4341],{"class":2058},"$event",[1608,4343,44],{"class":1959},[1608,4345,4346],{"class":2058},"target",[1608,4348,44],{"class":1959},[1608,4350,3144],{"class":2058},[1608,4352,2950],{"class":1959},[1608,4354,4316],{"class":3268},[1608,4356,4357,4359,4362,4364,4366,4369],{"class":1785,"line":3712},[1608,4358,4304],{"class":1959},[1608,4360,4361],{"class":2997},"class",[1608,4363,2065],{"class":1959},[1608,4365,3381],{"class":3268},[1608,4367,4368],{"class":2058},"inputClasses",[1608,4370,4316],{"class":3268},[1608,4372,4373,4376,4378],{"class":1785,"line":3720},[1608,4374,4375],{"class":2997},"      class",[1608,4377,2065],{"class":1959},[1608,4379,4380],{"class":2068},"\"mt-1 block w-full rounded-md border px-3 py-2 shadow-sm focus:border-indigo-500 focus:outline-none focus:ring-indigo-500\"\n",[1608,4382,4383],{"class":1785,"line":3728},[1608,4384,4385],{"class":2989},"    />\n",[1608,4387,4388,4390,4392,4395,4397,4399,4401,4403,4405,4407,4410],{"class":1785,"line":3734},[1608,4389,2055],{"class":2989},[1608,4391,30],{"class":2993},[1608,4393,4394],{"class":2046}," v-if",[1608,4396,2065],{"class":1959},[1608,4398,3381],{"class":3268},[1608,4400,4198],{"class":2058},[1608,4402,3381],{"class":3268},[1608,4404,4251],{"class":2997},[1608,4406,2065],{"class":1959},[1608,4408,4409],{"class":2068},"\"mt-1 text-sm text-red-600\"",[1608,4411,2072],{"class":2989},[1608,4413,4414,4416,4418],{"class":1785,"line":3739},[1608,4415,4279],{"class":1959},[1608,4417,4198],{"class":2058},[1608,4419,4284],{"class":1959},[1608,4421,4423,4425,4427],{"class":1785,"line":4422},35,[1608,4424,2122],{"class":2989},[1608,4426,30],{"class":2993},[1608,4428,2072],{"class":2989},[1608,4430,4432,4434,4436],{"class":1785,"line":4431},36,[1608,4433,3405],{"class":2989},[1608,4435,2059],{"class":2993},[1608,4437,2072],{"class":2989},[1608,4439,4441,4443,4445],{"class":1785,"line":4440},37,[1608,4442,2092],{"class":2989},[1608,4444,3303],{"class":2993},[1608,4446,2072],{"class":2989},[73,4448,4450],{"id":4449},"نمط-renderless-components","نمط Renderless Components",[441,4452,4454],{"className":2980,"code":4453,"language":2982,"meta":16,"style":16},"\u003C!-- components/MouseTracker.vue -->\n\u003Cscript setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted } from 'vue'\n\nconst x = ref(0)\nconst y = ref(0)\n\nconst updateMouse = (event: MouseEvent) => {\n  x.value = event.clientX\n  y.value = event.clientY\n}\n\nonMounted(() => {\n  document.addEventListener('mousemove', updateMouse)\n})\n\nonUnmounted(() => {\n  document.removeEventListener('mousemove', updateMouse)\n})\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cslot :x=\"x\" :y=\"y\" />\n\u003C/template>\n",[448,4455,4456,4461,4477,4501,4505,4522,4539,4543,4569,4588,4606,4610,4614,4624,4646,4650,4654,4664,4683,4687,4695,4699,4707,4747],{"__ignoreMap":16},[1608,4457,4458],{"class":1785,"line":1786},[1608,4459,4460],{"class":1945},"\u003C!-- components/MouseTracker.vue -->\n",[1608,4462,4463,4465,4467,4469,4471,4473,4475],{"class":1785,"line":1260},[1608,4464,2990],{"class":2989},[1608,4466,2994],{"class":2993},[1608,4468,2998],{"class":2997},[1608,4470,3001],{"class":2997},[1608,4472,2065],{"class":1959},[1608,4474,3006],{"class":2068},[1608,4476,2072],{"class":2989},[1608,4478,4479,4481,4483,4485,4487,4490,4492,4495,4497,4499],{"class":1785,"line":17},[1608,4480,3013],{"class":2046},[1608,4482,2032],{"class":1959},[1608,4484,2923],{"class":2058},[1608,4486,3020],{"class":1959},[1608,4488,4489],{"class":2058},"onMounted",[1608,4491,3020],{"class":1959},[1608,4493,4494],{"class":2058},"onUnmounted",[1608,4496,3037],{"class":1959},[1608,4498,3040],{"class":2046},[1608,4500,3474],{"class":2068},[1608,4502,4503],{"class":1785,"line":1802},[1608,4504,1805],{"emptyLinePlaceholder":1305},[1608,4506,4507,4509,4512,4514,4516,4518,4520],{"class":1785,"line":1808},[1608,4508,3059],{"class":1951},[1608,4510,4511],{"class":3062}," x",[1608,4513,3066],{"class":1969},[1608,4515,3069],{"class":2017},[1608,4517,3072],{"class":1959},[1608,4519,3076],{"class":3075},[1608,4521,2419],{"class":1959},[1608,4523,4524,4526,4529,4531,4533,4535,4537],{"class":1785,"line":1814},[1608,4525,3059],{"class":1951},[1608,4527,4528],{"class":3062}," y",[1608,4530,3066],{"class":1969},[1608,4532,3069],{"class":2017},[1608,4534,3072],{"class":1959},[1608,4536,3076],{"class":3075},[1608,4538,2419],{"class":1959},[1608,4540,4541],{"class":1785,"line":1820},[1608,4542,1805],{"emptyLinePlaceholder":1305},[1608,4544,4545,4547,4550,4552,4555,4558,4560,4563,4565,4567],{"class":1785,"line":1825},[1608,4546,3059],{"class":1951},[1608,4548,4549],{"class":2017}," updateMouse",[1608,4551,3066],{"class":1969},[1608,4553,4554],{"class":1959}," (",[1608,4556,4557],{"class":1965},"event",[1608,4559,1970],{"class":1969},[1608,4561,4562],{"class":1955}," MouseEvent",[1608,4564,3183],{"class":1959},[1608,4566,3137],{"class":1951},[1608,4568,1960],{"class":1959},[1608,4570,4571,4574,4576,4578,4580,4583,4585],{"class":1785,"line":1831},[1608,4572,4573],{"class":2058},"  x",[1608,4575,44],{"class":1959},[1608,4577,3144],{"class":2058},[1608,4579,3066],{"class":1969},[1608,4581,4582],{"class":2058}," event",[1608,4584,44],{"class":1959},[1608,4586,4587],{"class":2058},"clientX\n",[1608,4589,4590,4593,4595,4597,4599,4601,4603],{"class":1785,"line":1333},[1608,4591,4592],{"class":2058},"  y",[1608,4594,44],{"class":1959},[1608,4596,3144],{"class":2058},[1608,4598,3066],{"class":1969},[1608,4600,4582],{"class":2058},[1608,4602,44],{"class":1959},[1608,4604,4605],{"class":2058},"clientY\n",[1608,4607,4608],{"class":1785,"line":2075},[1608,4609,2005],{"class":1959},[1608,4611,4612],{"class":1785,"line":2099},[1608,4613,1805],{"emptyLinePlaceholder":1305},[1608,4615,4616,4618,4620,4622],{"class":1785,"line":2119},[1608,4617,4489],{"class":2017},[1608,4619,3134],{"class":1959},[1608,4621,3137],{"class":1951},[1608,4623,1960],{"class":1959},[1608,4625,4626,4629,4631,4634,4636,4639,4641,4644],{"class":1785,"line":2129},[1608,4627,4628],{"class":2058},"  document",[1608,4630,44],{"class":1959},[1608,4632,4633],{"class":2017},"addEventListener",[1608,4635,3072],{"class":1959},[1608,4637,4638],{"class":2068},"'mousemove'",[1608,4640,3020],{"class":1959},[1608,4642,4643],{"class":2058},"updateMouse",[1608,4645,2419],{"class":1959},[1608,4647,4648],{"class":1785,"line":1635},[1608,4649,3742],{"class":1959},[1608,4651,4652],{"class":1785,"line":2296},[1608,4653,1805],{"emptyLinePlaceholder":1305},[1608,4655,4656,4658,4660,4662],{"class":1785,"line":2302},[1608,4657,4494],{"class":2017},[1608,4659,3134],{"class":1959},[1608,4661,3137],{"class":1951},[1608,4663,1960],{"class":1959},[1608,4665,4666,4668,4670,4673,4675,4677,4679,4681],{"class":1785,"line":2308},[1608,4667,4628],{"class":2058},[1608,4669,44],{"class":1959},[1608,4671,4672],{"class":2017},"removeEventListener",[1608,4674,3072],{"class":1959},[1608,4676,4638],{"class":2068},[1608,4678,3020],{"class":1959},[1608,4680,4643],{"class":2058},[1608,4682,2419],{"class":1959},[1608,4684,4685],{"class":1785,"line":3279},[1608,4686,3742],{"class":1959},[1608,4688,4689,4691,4693],{"class":1785,"line":3284},[1608,4690,2092],{"class":2989},[1608,4692,2994],{"class":2993},[1608,4694,2072],{"class":2989},[1608,4696,4697],{"class":1785,"line":3293},[1608,4698,1805],{"emptyLinePlaceholder":1305},[1608,4700,4701,4703,4705],{"class":1785,"line":3298},[1608,4702,2990],{"class":2989},[1608,4704,3303],{"class":2993},[1608,4706,2072],{"class":2989},[1608,4708,4709,4711,4714,4717,4720,4722,4724,4726,4728,4730,4733,4735,4737,4739,4741,4745],{"class":1785,"line":3308},[1608,4710,3311],{"class":2989},[1608,4712,4713],{"class":2993},"slot",[1608,4715,4716],{"class":1959}," :",[1608,4718,4719],{"class":2997},"x",[1608,4721,2065],{"class":1959},[1608,4723,3381],{"class":3268},[1608,4725,4719],{"class":2058},[1608,4727,3381],{"class":3268},[1608,4729,4716],{"class":1959},[1608,4731,4732],{"class":2997},"y",[1608,4734,2065],{"class":1959},[1608,4736,3381],{"class":3268},[1608,4738,4732],{"class":2058},[1608,4740,3381],{"class":3268},[1608,4742,4744],{"class":4743},"sUwQ0"," /",[1608,4746,2072],{"class":2989},[1608,4748,4749,4751,4753],{"class":1785,"line":3318},[1608,4750,2092],{"class":2989},[1608,4752,3303],{"class":2993},[1608,4754,2072],{"class":2989},[68,4756,4758],{"id":4757},"_4-إدارة-دورة-الحياة-المتقدمة","4. إدارة دورة الحياة المتقدمة",[73,4760,4762],{"id":4761},"استخدام-composition-functions","استخدام Composition Functions",[441,4764,4766],{"className":1936,"code":4765,"language":1938,"meta":16,"style":16},"// composables/useLocalStorage.ts\nimport { ref, watch } from 'vue'\n\nexport function useLocalStorage\u003CT>(key: string, defaultValue: T) {\n  const value = ref\u003CT>(defaultValue)\n\n  // تحميل من localStorage\n  const stored = localStorage.getItem(key)\n  if (stored) {\n    try {\n      value.value = JSON.parse(stored)\n    } catch {\n      value.value = defaultValue\n    }\n  }\n\n  // حفظ في localStorage\n  watch(value, (newValue) => {\n    localStorage.setItem(key, JSON.stringify(newValue))\n  }, { deep: true })\n\n  return value\n}\n",[448,4767,4768,4773,4791,4795,4833,4854,4858,4863,4886,4898,4905,4930,4940,4953,4957,4961,4965,4970,4990,5021,5036,5040,5047],{"__ignoreMap":16},[1608,4769,4770],{"class":1785,"line":1786},[1608,4771,4772],{"class":1945},"// composables/useLocalStorage.ts\n",[1608,4774,4775,4777,4779,4781,4783,4785,4787,4789],{"class":1785,"line":1260},[1608,4776,3013],{"class":2046},[1608,4778,2032],{"class":1959},[1608,4780,2923],{"class":2058},[1608,4782,3020],{"class":1959},[1608,4784,2959],{"class":2058},[1608,4786,3037],{"class":1959},[1608,4788,3040],{"class":2046},[1608,4790,3474],{"class":2068},[1608,4792,4793],{"class":1785,"line":17},[1608,4794,1805],{"emptyLinePlaceholder":1305},[1608,4796,4797,4799,4802,4805,4807,4810,4813,4816,4818,4820,4822,4825,4827,4830],{"class":1785,"line":1802},[1608,4798,3483],{"class":2046},[1608,4800,4801],{"class":1951}," function",[1608,4803,4804],{"class":2017}," useLocalStorage",[1608,4806,2990],{"class":1959},[1608,4808,4809],{"class":1955},"T",[1608,4811,4812],{"class":1959},">(",[1608,4814,4815],{"class":1965},"key",[1608,4817,1970],{"class":1969},[1608,4819,1987],{"class":1973},[1608,4821,3020],{"class":1959},[1608,4823,4824],{"class":1965},"defaultValue",[1608,4826,1970],{"class":1969},[1608,4828,4829],{"class":1955}," T",[1608,4831,4832],{"class":1959},") {\n",[1608,4834,4835,4837,4840,4842,4844,4846,4848,4850,4852],{"class":1785,"line":1808},[1608,4836,3516],{"class":1951},[1608,4838,4839],{"class":3062}," value",[1608,4841,3066],{"class":1969},[1608,4843,3069],{"class":2017},[1608,4845,2990],{"class":1959},[1608,4847,4809],{"class":1955},[1608,4849,4812],{"class":1959},[1608,4851,4824],{"class":2058},[1608,4853,2419],{"class":1959},[1608,4855,4856],{"class":1785,"line":1814},[1608,4857,1805],{"emptyLinePlaceholder":1305},[1608,4859,4860],{"class":1785,"line":1820},[1608,4861,4862],{"class":1945},"  // تحميل من localStorage\n",[1608,4864,4865,4867,4870,4872,4875,4877,4880,4882,4884],{"class":1785,"line":1825},[1608,4866,3516],{"class":1951},[1608,4868,4869],{"class":3062}," stored",[1608,4871,3066],{"class":1969},[1608,4873,4874],{"class":2058}," localStorage",[1608,4876,44],{"class":1959},[1608,4878,4879],{"class":2017},"getItem",[1608,4881,3072],{"class":1959},[1608,4883,4815],{"class":2058},[1608,4885,2419],{"class":1959},[1608,4887,4888,4891,4893,4896],{"class":1785,"line":1831},[1608,4889,4890],{"class":2046},"  if",[1608,4892,4554],{"class":1959},[1608,4894,4895],{"class":2058},"stored",[1608,4897,4832],{"class":1959},[1608,4899,4900,4903],{"class":1785,"line":1333},[1608,4901,4902],{"class":2046},"    try",[1608,4904,1960],{"class":1959},[1608,4906,4907,4910,4912,4914,4916,4919,4921,4924,4926,4928],{"class":1785,"line":2075},[1608,4908,4909],{"class":2058},"      value",[1608,4911,44],{"class":1959},[1608,4913,3144],{"class":2058},[1608,4915,3066],{"class":1969},[1608,4917,4918],{"class":3062}," JSON",[1608,4920,44],{"class":1959},[1608,4922,4923],{"class":2017},"parse",[1608,4925,3072],{"class":1959},[1608,4927,4895],{"class":2058},[1608,4929,2419],{"class":1959},[1608,4931,4932,4935,4938],{"class":1785,"line":2099},[1608,4933,4934],{"class":1959},"    } ",[1608,4936,4937],{"class":2046},"catch",[1608,4939,1960],{"class":1959},[1608,4941,4942,4944,4946,4948,4950],{"class":1785,"line":2119},[1608,4943,4909],{"class":2058},[1608,4945,44],{"class":1959},[1608,4947,3144],{"class":2058},[1608,4949,3066],{"class":1969},[1608,4951,4952],{"class":2058}," defaultValue\n",[1608,4954,4955],{"class":1785,"line":2129},[1608,4956,2305],{"class":1959},[1608,4958,4959],{"class":1785,"line":1635},[1608,4960,3619],{"class":1959},[1608,4962,4963],{"class":1785,"line":2296},[1608,4964,1805],{"emptyLinePlaceholder":1305},[1608,4966,4967],{"class":1785,"line":2302},[1608,4968,4969],{"class":1945},"  // حفظ في localStorage\n",[1608,4971,4972,4975,4977,4979,4981,4984,4986,4988],{"class":1785,"line":2308},[1608,4973,4974],{"class":2017},"  watch",[1608,4976,3072],{"class":1959},[1608,4978,3144],{"class":2058},[1608,4980,3172],{"class":1959},[1608,4982,4983],{"class":1965},"newValue",[1608,4985,3183],{"class":1959},[1608,4987,3137],{"class":1951},[1608,4989,1960],{"class":1959},[1608,4991,4992,4995,4997,5000,5002,5004,5006,5009,5011,5014,5016,5018],{"class":1785,"line":3279},[1608,4993,4994],{"class":2058},"    localStorage",[1608,4996,44],{"class":1959},[1608,4998,4999],{"class":2017},"setItem",[1608,5001,3072],{"class":1959},[1608,5003,4815],{"class":2058},[1608,5005,3020],{"class":1959},[1608,5007,5008],{"class":3062},"JSON",[1608,5010,44],{"class":1959},[1608,5012,5013],{"class":2017},"stringify",[1608,5015,3072],{"class":1959},[1608,5017,4983],{"class":2058},[1608,5019,5020],{"class":1959},"))\n",[1608,5022,5023,5026,5029,5033],{"class":1785,"line":3284},[1608,5024,5025],{"class":1959},"  }, { ",[1608,5027,5028],{"class":2058},"deep:",[1608,5030,5032],{"class":5031},"s7v1m"," true",[1608,5034,5035],{"class":1959}," })\n",[1608,5037,5038],{"class":1785,"line":3293},[1608,5039,1805],{"emptyLinePlaceholder":1305},[1608,5041,5042,5044],{"class":1785,"line":3298},[1608,5043,2047],{"class":2046},[1608,5045,5046],{"class":2058}," value\n",[1608,5048,5049],{"class":1785,"line":3308},[1608,5050,2005],{"class":1959},[73,5052,5054],{"id":5053},"إدارة-الذاكرة-والتنظيف","إدارة الذاكرة والتنظيف",[441,5056,5058],{"className":1936,"code":5057,"language":1938,"meta":16,"style":16},"// composables/useEventListener.ts\nimport { onMounted, onUnmounted } from 'vue'\n\nexport function useEventListener(\n  target: EventTarget,\n  event: string,\n  callback: EventListener\n) {\n  onMounted(() => {\n    target.addEventListener(event, callback)\n  })\n\n  onUnmounted(() => {\n    target.removeEventListener(event, callback)\n  })\n}\n",[448,5059,5060,5065,5083,5087,5099,5111,5122,5132,5136,5147,5167,5172,5176,5187,5205,5209],{"__ignoreMap":16},[1608,5061,5062],{"class":1785,"line":1786},[1608,5063,5064],{"class":1945},"// composables/useEventListener.ts\n",[1608,5066,5067,5069,5071,5073,5075,5077,5079,5081],{"class":1785,"line":1260},[1608,5068,3013],{"class":2046},[1608,5070,2032],{"class":1959},[1608,5072,4489],{"class":2058},[1608,5074,3020],{"class":1959},[1608,5076,4494],{"class":2058},[1608,5078,3037],{"class":1959},[1608,5080,3040],{"class":2046},[1608,5082,3474],{"class":2068},[1608,5084,5085],{"class":1785,"line":17},[1608,5086,1805],{"emptyLinePlaceholder":1305},[1608,5088,5089,5091,5093,5096],{"class":1785,"line":1802},[1608,5090,3483],{"class":2046},[1608,5092,4801],{"class":1951},[1608,5094,5095],{"class":2017}," useEventListener",[1608,5097,5098],{"class":1959},"(\n",[1608,5100,5101,5104,5106,5109],{"class":1785,"line":1808},[1608,5102,5103],{"class":1965},"  target",[1608,5105,1970],{"class":1969},[1608,5107,5108],{"class":1955}," EventTarget",[1608,5110,3694],{"class":1959},[1608,5112,5113,5116,5118,5120],{"class":1785,"line":1814},[1608,5114,5115],{"class":1965},"  event",[1608,5117,1970],{"class":1969},[1608,5119,1987],{"class":1973},[1608,5121,3694],{"class":1959},[1608,5123,5124,5127,5129],{"class":1785,"line":1820},[1608,5125,5126],{"class":1965},"  callback",[1608,5128,1970],{"class":1969},[1608,5130,5131],{"class":1955}," EventListener\n",[1608,5133,5134],{"class":1785,"line":1825},[1608,5135,4832],{"class":1959},[1608,5137,5138,5141,5143,5145],{"class":1785,"line":1831},[1608,5139,5140],{"class":2017},"  onMounted",[1608,5142,3134],{"class":1959},[1608,5144,3137],{"class":1951},[1608,5146,1960],{"class":1959},[1608,5148,5149,5152,5154,5156,5158,5160,5162,5165],{"class":1785,"line":1333},[1608,5150,5151],{"class":2058},"    target",[1608,5153,44],{"class":1959},[1608,5155,4633],{"class":2017},[1608,5157,3072],{"class":1959},[1608,5159,4557],{"class":2058},[1608,5161,3020],{"class":1959},[1608,5163,5164],{"class":2058},"callback",[1608,5166,2419],{"class":1959},[1608,5168,5169],{"class":1785,"line":2075},[1608,5170,5171],{"class":1959},"  })\n",[1608,5173,5174],{"class":1785,"line":2099},[1608,5175,1805],{"emptyLinePlaceholder":1305},[1608,5177,5178,5181,5183,5185],{"class":1785,"line":2119},[1608,5179,5180],{"class":2017},"  onUnmounted",[1608,5182,3134],{"class":1959},[1608,5184,3137],{"class":1951},[1608,5186,1960],{"class":1959},[1608,5188,5189,5191,5193,5195,5197,5199,5201,5203],{"class":1785,"line":2129},[1608,5190,5151],{"class":2058},[1608,5192,44],{"class":1959},[1608,5194,4672],{"class":2017},[1608,5196,3072],{"class":1959},[1608,5198,4557],{"class":2058},[1608,5200,3020],{"class":1959},[1608,5202,5164],{"class":2058},[1608,5204,2419],{"class":1959},[1608,5206,5207],{"class":1785,"line":1635},[1608,5208,5171],{"class":1959},[1608,5210,5211],{"class":1785,"line":2296},[1608,5212,2005],{"class":1959},[68,5214,5216],{"id":5215},"_5-تحسين-الأداء","5. تحسين الأداء",[73,5218,5220,5221,2924,5224],{"id":5219},"استخدام-shallowref-و-shallowreactive","استخدام ",[448,5222,5223],{},"shallowRef",[448,5225,5226],{},"shallowReactive",[441,5228,5230],{"className":1936,"code":5229,"language":1938,"meta":16,"style":16},"import { shallowRef, shallowReactive } from 'vue'\n\n// للكائنات الكبيرة التي لا تحتاج تفاعل عميق\nconst largeObject = shallowReactive({ /* ... */ })\n\n// للمراجع التي تحتوي على كائنات\nconst data = shallowRef({ /* ... */ })\n",[448,5231,5232,5250,5254,5259,5278,5282,5287],{"__ignoreMap":16},[1608,5233,5234,5236,5238,5240,5242,5244,5246,5248],{"class":1785,"line":1786},[1608,5235,3013],{"class":2046},[1608,5237,2032],{"class":1959},[1608,5239,5223],{"class":2058},[1608,5241,3020],{"class":1959},[1608,5243,5226],{"class":2058},[1608,5245,3037],{"class":1959},[1608,5247,3040],{"class":2046},[1608,5249,3474],{"class":2068},[1608,5251,5252],{"class":1785,"line":1260},[1608,5253,1805],{"emptyLinePlaceholder":1305},[1608,5255,5256],{"class":1785,"line":17},[1608,5257,5258],{"class":1945},"// للكائنات الكبيرة التي لا تحتاج تفاعل عميق\n",[1608,5260,5261,5263,5266,5268,5271,5273,5276],{"class":1785,"line":1802},[1608,5262,3059],{"class":1951},[1608,5264,5265],{"class":3062}," largeObject",[1608,5267,3066],{"class":1969},[1608,5269,5270],{"class":2017}," shallowReactive",[1608,5272,2021],{"class":1959},[1608,5274,5275],{"class":1945},"/* ... */",[1608,5277,5035],{"class":1959},[1608,5279,5280],{"class":1785,"line":1808},[1608,5281,1805],{"emptyLinePlaceholder":1305},[1608,5283,5284],{"class":1785,"line":1814},[1608,5285,5286],{"class":1945},"// للمراجع التي تحتوي على كائنات\n",[1608,5288,5289,5291,5294,5296,5299,5301,5303],{"class":1785,"line":1820},[1608,5290,3059],{"class":1951},[1608,5292,5293],{"class":3062}," data",[1608,5295,3066],{"class":1969},[1608,5297,5298],{"class":2017}," shallowRef",[1608,5300,2021],{"class":1959},[1608,5302,5275],{"class":1945},[1608,5304,5035],{"class":1959},[73,5306,5308,5309],{"id":5307},"تحسين-العرض-مع-v-memo","تحسين العرض مع ",[448,5310,5311],{},"v-memo",[441,5313,5315],{"className":2980,"code":5314,"language":2982,"meta":16,"style":16},"\u003Ctemplate>\n  \u003Cdiv v-for=\"item in items\" :key=\"item.id\" v-memo=\"[item.id, item.updatedAt]\">\n    \u003C!-- محتوى المكون -->\n  \u003C/div>\n\u003C/template>\n",[448,5316,5317,5325,5398,5403,5411],{"__ignoreMap":16},[1608,5318,5319,5321,5323],{"class":1785,"line":1786},[1608,5320,2990],{"class":2989},[1608,5322,3303],{"class":2993},[1608,5324,2072],{"class":2989},[1608,5326,5327,5329,5331,5334,5336,5338,5341,5344,5347,5349,5351,5353,5355,5357,5359,5361,5364,5366,5369,5371,5373,5376,5378,5380,5382,5384,5386,5388,5391,5394,5396],{"class":1785,"line":1260},[1608,5328,3311],{"class":2989},[1608,5330,2059],{"class":2993},[1608,5332,5333],{"class":2046}," v-for",[1608,5335,2065],{"class":1959},[1608,5337,3381],{"class":3268},[1608,5339,5340],{"class":2058},"item",[1608,5342,5343],{"class":1951}," in",[1608,5345,5346],{"class":2058}," items",[1608,5348,3381],{"class":3268},[1608,5350,4716],{"class":1959},[1608,5352,4815],{"class":2997},[1608,5354,2065],{"class":1959},[1608,5356,3381],{"class":3268},[1608,5358,5340],{"class":2058},[1608,5360,44],{"class":1959},[1608,5362,5363],{"class":2058},"id",[1608,5365,3381],{"class":3268},[1608,5367,5368],{"class":2997}," v-memo",[1608,5370,2065],{"class":1959},[1608,5372,3381],{"class":3268},[1608,5374,5375],{"class":1959},"[",[1608,5377,5340],{"class":2058},[1608,5379,44],{"class":1959},[1608,5381,5363],{"class":2058},[1608,5383,3020],{"class":1959},[1608,5385,5340],{"class":2058},[1608,5387,44],{"class":1959},[1608,5389,5390],{"class":2058},"updatedAt",[1608,5392,5393],{"class":1959},"]",[1608,5395,3381],{"class":3268},[1608,5397,2072],{"class":2989},[1608,5399,5400],{"class":1785,"line":17},[1608,5401,5402],{"class":1945},"    \u003C!-- محتوى المكون -->\n",[1608,5404,5405,5407,5409],{"class":1785,"line":1802},[1608,5406,3405],{"class":2989},[1608,5408,2059],{"class":2993},[1608,5410,2072],{"class":2989},[1608,5412,5413,5415,5417],{"class":1785,"line":1808},[1608,5414,2092],{"class":2989},[1608,5416,3303],{"class":2993},[1608,5418,2072],{"class":2989},[73,5420,5220,5422,5425],{"id":5421},"استخدام-nexttick-بحكمة",[448,5423,5424],{},"nextTick"," بحكمة",[441,5427,5429],{"className":1936,"code":5428,"language":1938,"meta":16,"style":16},"import { nextTick } from 'vue'\n\nconst updateUI = async () => {\n  // تحديث البيانات\n  data.value = newData\n\n  // انتظار العرض\n  await nextTick()\n\n  // الآن يمكن الوصول إلى DOM المحدث\n  scrollToElement()\n}\n",[448,5430,5431,5445,5449,5468,5473,5487,5491,5496,5506,5510,5515,5522],{"__ignoreMap":16},[1608,5432,5433,5435,5437,5439,5441,5443],{"class":1785,"line":1786},[1608,5434,3013],{"class":2046},[1608,5436,2032],{"class":1959},[1608,5438,5424],{"class":2058},[1608,5440,3037],{"class":1959},[1608,5442,3040],{"class":2046},[1608,5444,3474],{"class":2068},[1608,5446,5447],{"class":1785,"line":1260},[1608,5448,1805],{"emptyLinePlaceholder":1305},[1608,5450,5451,5453,5456,5458,5461,5464,5466],{"class":1785,"line":17},[1608,5452,3059],{"class":1951},[1608,5454,5455],{"class":2017}," updateUI",[1608,5457,3066],{"class":1969},[1608,5459,5460],{"class":1951}," async",[1608,5462,5463],{"class":1959}," () ",[1608,5465,3137],{"class":1951},[1608,5467,1960],{"class":1959},[1608,5469,5470],{"class":1785,"line":1802},[1608,5471,5472],{"class":1945},"  // تحديث البيانات\n",[1608,5474,5475,5478,5480,5482,5484],{"class":1785,"line":1808},[1608,5476,5477],{"class":2058},"  data",[1608,5479,44],{"class":1959},[1608,5481,3144],{"class":2058},[1608,5483,3066],{"class":1969},[1608,5485,5486],{"class":2058}," newData\n",[1608,5488,5489],{"class":1785,"line":1814},[1608,5490,1805],{"emptyLinePlaceholder":1305},[1608,5492,5493],{"class":1785,"line":1820},[1608,5494,5495],{"class":1945},"  // انتظار العرض\n",[1608,5497,5498,5501,5504],{"class":1785,"line":1825},[1608,5499,5500],{"class":2046},"  await",[1608,5502,5503],{"class":2017}," nextTick",[1608,5505,3801],{"class":1959},[1608,5507,5508],{"class":1785,"line":1831},[1608,5509,1805],{"emptyLinePlaceholder":1305},[1608,5511,5512],{"class":1785,"line":1333},[1608,5513,5514],{"class":1945},"  // الآن يمكن الوصول إلى DOM المحدث\n",[1608,5516,5517,5520],{"class":1785,"line":2075},[1608,5518,5519],{"class":2017},"  scrollToElement",[1608,5521,3801],{"class":1959},[1608,5523,5524],{"class":1785,"line":2099},[1608,5525,2005],{"class":1959},[68,5527,5529],{"id":5528},"_6-تكامل-typescript-المتقدم","6. تكامل TypeScript المتقدم",[73,5531,5533],{"id":5532},"واجهات-المكونات-المكتوبة","واجهات المكونات المكتوبة",[441,5535,5537],{"className":2980,"code":5536,"language":2982,"meta":16,"style":16},"\u003Cscript setup lang=\"ts\">\ninterface User {\n  id: number\n  name: string\n  email: string\n}\n\ninterface Props {\n  user: User\n  loading?: boolean\n}\n\ninterface Emits {\n  (e: 'update', user: User): void\n  (e: 'delete', id: number): void\n}\n\nconst props = defineProps\u003CProps>()\nconst emit = defineEmits\u003CEmits>()\n\u003C/script>\n",[448,5538,5539,5555,5563,5572,5580,5588,5592,5596,5604,5614,5624,5628,5632,5641,5669,5694,5698,5702,5718,5735],{"__ignoreMap":16},[1608,5540,5541,5543,5545,5547,5549,5551,5553],{"class":1785,"line":1786},[1608,5542,2990],{"class":2989},[1608,5544,2994],{"class":2993},[1608,5546,2998],{"class":2997},[1608,5548,3001],{"class":2997},[1608,5550,2065],{"class":1959},[1608,5552,3006],{"class":2068},[1608,5554,2072],{"class":2989},[1608,5556,5557,5559,5561],{"class":1785,"line":1260},[1608,5558,1952],{"class":1951},[1608,5560,1956],{"class":1955},[1608,5562,1960],{"class":1959},[1608,5564,5565,5567,5569],{"class":1785,"line":17},[1608,5566,1966],{"class":1965},[1608,5568,1970],{"class":1969},[1608,5570,5571],{"class":1973}," number\n",[1608,5573,5574,5576,5578],{"class":1785,"line":1802},[1608,5575,1982],{"class":1965},[1608,5577,1970],{"class":1969},[1608,5579,4069],{"class":1973},[1608,5581,5582,5584,5586],{"class":1785,"line":1808},[1608,5583,1994],{"class":1965},[1608,5585,1970],{"class":1969},[1608,5587,4069],{"class":1973},[1608,5589,5590],{"class":1785,"line":1814},[1608,5591,2005],{"class":1959},[1608,5593,5594],{"class":1785,"line":1820},[1608,5595,1805],{"emptyLinePlaceholder":1305},[1608,5597,5598,5600,5602],{"class":1785,"line":1825},[1608,5599,1952],{"class":1951},[1608,5601,4057],{"class":1955},[1608,5603,1960],{"class":1959},[1608,5605,5606,5609,5611],{"class":1785,"line":1831},[1608,5607,5608],{"class":1965},"  user",[1608,5610,1970],{"class":1969},[1608,5612,5613],{"class":1955}," User\n",[1608,5615,5616,5619,5621],{"class":1785,"line":1333},[1608,5617,5618],{"class":1965},"  loading",[1608,5620,4086],{"class":1969},[1608,5622,5623],{"class":1973}," boolean\n",[1608,5625,5626],{"class":1785,"line":2075},[1608,5627,2005],{"class":1959},[1608,5629,5630],{"class":1785,"line":2099},[1608,5631,1805],{"emptyLinePlaceholder":1305},[1608,5633,5634,5636,5639],{"class":1785,"line":2119},[1608,5635,1952],{"class":1951},[1608,5637,5638],{"class":1955}," Emits",[1608,5640,1960],{"class":1959},[1608,5642,5643,5646,5649,5651,5654,5656,5658,5660,5662,5664,5666],{"class":1785,"line":2129},[1608,5644,5645],{"class":1959},"  (",[1608,5647,5648],{"class":1965},"e",[1608,5650,1970],{"class":1969},[1608,5652,5653],{"class":2068}," 'update'",[1608,5655,3020],{"class":1959},[1608,5657,2024],{"class":1965},[1608,5659,1970],{"class":1969},[1608,5661,1956],{"class":1955},[1608,5663,2950],{"class":1959},[1608,5665,1970],{"class":1969},[1608,5667,5668],{"class":1973}," void\n",[1608,5670,5671,5673,5675,5677,5680,5682,5684,5686,5688,5690,5692],{"class":1785,"line":1635},[1608,5672,5645],{"class":1959},[1608,5674,5648],{"class":1965},[1608,5676,1970],{"class":1969},[1608,5678,5679],{"class":2068}," 'delete'",[1608,5681,3020],{"class":1959},[1608,5683,5363],{"class":1965},[1608,5685,1970],{"class":1969},[1608,5687,1974],{"class":1973},[1608,5689,2950],{"class":1959},[1608,5691,1970],{"class":1969},[1608,5693,5668],{"class":1973},[1608,5695,5696],{"class":1785,"line":2296},[1608,5697,2005],{"class":1959},[1608,5699,5700],{"class":1785,"line":2302},[1608,5701,1805],{"emptyLinePlaceholder":1305},[1608,5703,5704,5706,5708,5710,5712,5714,5716],{"class":1785,"line":2308},[1608,5705,3059],{"class":1951},[1608,5707,4103],{"class":3062},[1608,5709,3066],{"class":1969},[1608,5711,4108],{"class":2017},[1608,5713,2990],{"class":1959},[1608,5715,4113],{"class":1955},[1608,5717,4116],{"class":1959},[1608,5719,5720,5722,5724,5726,5728,5730,5733],{"class":1785,"line":3279},[1608,5721,3059],{"class":1951},[1608,5723,4123],{"class":3062},[1608,5725,3066],{"class":1969},[1608,5727,4128],{"class":2017},[1608,5729,2990],{"class":1959},[1608,5731,5732],{"class":1955},"Emits",[1608,5734,4116],{"class":1959},[1608,5736,5737,5739,5741],{"class":1785,"line":3284},[1608,5738,2092],{"class":2989},[1608,5740,2994],{"class":2993},[1608,5742,2072],{"class":2989},[73,5744,5746],{"id":5745},"أنواع-pinia-المكتوبة","أنواع Pinia المكتوبة",[441,5748,5750],{"className":1936,"code":5749,"language":1938,"meta":16,"style":16},"// stores/user.ts\nimport { defineStore } from 'pinia'\nimport { ref } from 'vue'\n\ninterface User {\n  id: number\n  name: string\n  email: string\n}\n\nexport const useUserStore = defineStore('user', () => {\n  const currentUser = ref\u003CUser | null>(null)\n  const users = ref\u003CUser[]>([])\n\n  const setCurrentUser = (user: User) => {\n    currentUser.value = user\n  }\n\n  const addUser = (user: User) => {\n    users.value.push(user)\n  }\n\n  return {\n    currentUser,\n    users,\n    setCurrentUser,\n    addUser\n  }\n})\n",[448,5751,5752,5757,5771,5785,5789,5797,5805,5813,5821,5825,5829,5853,5882,5900,5904,5927,5941,5945,5949,5972,5992,5996,6000,6006,6012,6018,6025,6030,6034],{"__ignoreMap":16},[1608,5753,5754],{"class":1785,"line":1786},[1608,5755,5756],{"class":1945},"// stores/user.ts\n",[1608,5758,5759,5761,5763,5765,5767,5769],{"class":1785,"line":1260},[1608,5760,3013],{"class":2046},[1608,5762,2032],{"class":1959},[1608,5764,3448],{"class":2058},[1608,5766,3037],{"class":1959},[1608,5768,3040],{"class":2046},[1608,5770,3455],{"class":2068},[1608,5772,5773,5775,5777,5779,5781,5783],{"class":1785,"line":17},[1608,5774,3013],{"class":2046},[1608,5776,2032],{"class":1959},[1608,5778,2923],{"class":2058},[1608,5780,3037],{"class":1959},[1608,5782,3040],{"class":2046},[1608,5784,3474],{"class":2068},[1608,5786,5787],{"class":1785,"line":1802},[1608,5788,1805],{"emptyLinePlaceholder":1305},[1608,5790,5791,5793,5795],{"class":1785,"line":1808},[1608,5792,1952],{"class":1951},[1608,5794,1956],{"class":1955},[1608,5796,1960],{"class":1959},[1608,5798,5799,5801,5803],{"class":1785,"line":1814},[1608,5800,1966],{"class":1965},[1608,5802,1970],{"class":1969},[1608,5804,5571],{"class":1973},[1608,5806,5807,5809,5811],{"class":1785,"line":1820},[1608,5808,1982],{"class":1965},[1608,5810,1970],{"class":1969},[1608,5812,4069],{"class":1973},[1608,5814,5815,5817,5819],{"class":1785,"line":1825},[1608,5816,1994],{"class":1965},[1608,5818,1970],{"class":1969},[1608,5820,4069],{"class":1973},[1608,5822,5823],{"class":1785,"line":1831},[1608,5824,2005],{"class":1959},[1608,5826,5827],{"class":1785,"line":1333},[1608,5828,1805],{"emptyLinePlaceholder":1305},[1608,5830,5831,5833,5835,5838,5840,5842,5844,5847,5849,5851],{"class":1785,"line":2075},[1608,5832,3483],{"class":2046},[1608,5834,3486],{"class":1951},[1608,5836,5837],{"class":3062}," useUserStore",[1608,5839,3066],{"class":1969},[1608,5841,3494],{"class":2017},[1608,5843,3072],{"class":1959},[1608,5845,5846],{"class":2068},"'user'",[1608,5848,3502],{"class":1959},[1608,5850,3137],{"class":1951},[1608,5852,1960],{"class":1959},[1608,5854,5855,5857,5860,5862,5864,5866,5869,5872,5875,5877,5880],{"class":1785,"line":2099},[1608,5856,3516],{"class":1951},[1608,5858,5859],{"class":3062}," currentUser",[1608,5861,3066],{"class":1969},[1608,5863,3069],{"class":2017},[1608,5865,2990],{"class":1959},[1608,5867,5868],{"class":1955},"User",[1608,5870,5871],{"class":1969}," |",[1608,5873,5874],{"class":1973}," null",[1608,5876,4812],{"class":1959},[1608,5878,5879],{"class":5031},"null",[1608,5881,2419],{"class":1959},[1608,5883,5884,5886,5889,5891,5893,5895,5897],{"class":1785,"line":2119},[1608,5885,3516],{"class":1951},[1608,5887,5888],{"class":3062}," users",[1608,5890,3066],{"class":1969},[1608,5892,3069],{"class":2017},[1608,5894,2990],{"class":1959},[1608,5896,5868],{"class":1955},[1608,5898,5899],{"class":1959},"[]>([])\n",[1608,5901,5902],{"class":1785,"line":2129},[1608,5903,1805],{"emptyLinePlaceholder":1305},[1608,5905,5906,5908,5911,5913,5915,5917,5919,5921,5923,5925],{"class":1785,"line":1635},[1608,5907,3516],{"class":1951},[1608,5909,5910],{"class":2017}," setCurrentUser",[1608,5912,3066],{"class":1969},[1608,5914,4554],{"class":1959},[1608,5916,2024],{"class":1965},[1608,5918,1970],{"class":1969},[1608,5920,1956],{"class":1955},[1608,5922,3183],{"class":1959},[1608,5924,3137],{"class":1951},[1608,5926,1960],{"class":1959},[1608,5928,5929,5932,5934,5936,5938],{"class":1785,"line":2296},[1608,5930,5931],{"class":2058},"    currentUser",[1608,5933,44],{"class":1959},[1608,5935,3144],{"class":2058},[1608,5937,3066],{"class":1969},[1608,5939,5940],{"class":2058}," user\n",[1608,5942,5943],{"class":1785,"line":2302},[1608,5944,3619],{"class":1959},[1608,5946,5947],{"class":1785,"line":2308},[1608,5948,1805],{"emptyLinePlaceholder":1305},[1608,5950,5951,5953,5956,5958,5960,5962,5964,5966,5968,5970],{"class":1785,"line":3279},[1608,5952,3516],{"class":1951},[1608,5954,5955],{"class":2017}," addUser",[1608,5957,3066],{"class":1969},[1608,5959,4554],{"class":1959},[1608,5961,2024],{"class":1965},[1608,5963,1970],{"class":1969},[1608,5965,1956],{"class":1955},[1608,5967,3183],{"class":1959},[1608,5969,3137],{"class":1951},[1608,5971,1960],{"class":1959},[1608,5973,5974,5977,5979,5981,5983,5986,5988,5990],{"class":1785,"line":3284},[1608,5975,5976],{"class":2058},"    users",[1608,5978,44],{"class":1959},[1608,5980,3144],{"class":2058},[1608,5982,44],{"class":1959},[1608,5984,5985],{"class":2017},"push",[1608,5987,3072],{"class":1959},[1608,5989,2024],{"class":2058},[1608,5991,2419],{"class":1959},[1608,5993,5994],{"class":1785,"line":3293},[1608,5995,3619],{"class":1959},[1608,5997,5998],{"class":1785,"line":3298},[1608,5999,1805],{"emptyLinePlaceholder":1305},[1608,6001,6002,6004],{"class":1785,"line":3308},[1608,6003,2047],{"class":2046},[1608,6005,1960],{"class":1959},[1608,6007,6008,6010],{"class":1785,"line":3318},[1608,6009,5931],{"class":2058},[1608,6011,3694],{"class":1959},[1608,6013,6014,6016],{"class":1785,"line":3342},[1608,6015,5976],{"class":2058},[1608,6017,3694],{"class":1959},[1608,6019,6020,6023],{"class":1785,"line":3365},[1608,6021,6022],{"class":2058},"    setCurrentUser",[1608,6024,3694],{"class":1959},[1608,6026,6027],{"class":1785,"line":3402},[1608,6028,6029],{"class":2058},"    addUser\n",[1608,6031,6032],{"class":1785,"line":3412},[1608,6033,3619],{"class":1959},[1608,6035,6036],{"class":1785,"line":3704},[1608,6037,3742],{"class":1959},[68,6039,6041],{"id":6040},"_7-أنماط-الاختبار","7. أنماط الاختبار",[73,6043,6045],{"id":6044},"اختبار-المكونات-مع-vue-test-utils","اختبار المكونات مع Vue Test Utils",[441,6047,6049],{"className":1936,"code":6048,"language":1938,"meta":16,"style":16},"// tests/components/Counter.test.ts\nimport { describe, it, expect } from 'vitest'\nimport { mount } from '@vue/test-utils'\nimport Counter from '@/components/Counter.vue'\n\ndescribe('Counter', () => {\n  it('increments count when button is clicked', async () => {\n    const wrapper = mount(Counter)\n    const button = wrapper.find('button')\n\n    await button.trigger('click')\n\n    expect(wrapper.text()).toContain('1')\n  })\n})\n",[448,6050,6051,6056,6082,6098,6111,6115,6129,6150,6170,6193,6197,6216,6220,6247,6251],{"__ignoreMap":16},[1608,6052,6053],{"class":1785,"line":1786},[1608,6054,6055],{"class":1945},"// tests/components/Counter.test.ts\n",[1608,6057,6058,6060,6062,6065,6067,6070,6072,6075,6077,6079],{"class":1785,"line":1260},[1608,6059,3013],{"class":2046},[1608,6061,2032],{"class":1959},[1608,6063,6064],{"class":2058},"describe",[1608,6066,3020],{"class":1959},[1608,6068,6069],{"class":2058},"it",[1608,6071,3020],{"class":1959},[1608,6073,6074],{"class":2058},"expect",[1608,6076,3037],{"class":1959},[1608,6078,3040],{"class":2046},[1608,6080,6081],{"class":2068}," 'vitest'\n",[1608,6083,6084,6086,6088,6091,6093,6095],{"class":1785,"line":17},[1608,6085,3013],{"class":2046},[1608,6087,2032],{"class":1959},[1608,6089,6090],{"class":2058},"mount",[1608,6092,3037],{"class":1959},[1608,6094,3040],{"class":2046},[1608,6096,6097],{"class":2068}," '@vue/test-utils'\n",[1608,6099,6100,6102,6105,6108],{"class":1785,"line":1802},[1608,6101,3013],{"class":2046},[1608,6103,6104],{"class":2058}," Counter",[1608,6106,6107],{"class":2046}," from",[1608,6109,6110],{"class":2068}," '@/components/Counter.vue'\n",[1608,6112,6113],{"class":1785,"line":1808},[1608,6114,1805],{"emptyLinePlaceholder":1305},[1608,6116,6117,6119,6121,6123,6125,6127],{"class":1785,"line":1814},[1608,6118,6064],{"class":2017},[1608,6120,3072],{"class":1959},[1608,6122,3544],{"class":2068},[1608,6124,3502],{"class":1959},[1608,6126,3137],{"class":1951},[1608,6128,1960],{"class":1959},[1608,6130,6131,6134,6136,6139,6141,6144,6146,6148],{"class":1785,"line":1820},[1608,6132,6133],{"class":2017},"  it",[1608,6135,3072],{"class":1959},[1608,6137,6138],{"class":2068},"'increments count when button is clicked'",[1608,6140,3020],{"class":1959},[1608,6142,6143],{"class":1951},"async",[1608,6145,5463],{"class":1959},[1608,6147,3137],{"class":1951},[1608,6149,1960],{"class":1959},[1608,6151,6152,6155,6158,6160,6163,6165,6168],{"class":1785,"line":1825},[1608,6153,6154],{"class":1951},"    const",[1608,6156,6157],{"class":3062}," wrapper",[1608,6159,3066],{"class":1969},[1608,6161,6162],{"class":2017}," mount",[1608,6164,3072],{"class":1959},[1608,6166,6167],{"class":2058},"Counter",[1608,6169,2419],{"class":1959},[1608,6171,6172,6174,6177,6179,6181,6183,6186,6188,6191],{"class":1785,"line":1831},[1608,6173,6154],{"class":1951},[1608,6175,6176],{"class":3062}," button",[1608,6178,3066],{"class":1969},[1608,6180,6157],{"class":2058},[1608,6182,44],{"class":1959},[1608,6184,6185],{"class":2017},"find",[1608,6187,3072],{"class":1959},[1608,6189,6190],{"class":2068},"'button'",[1608,6192,2419],{"class":1959},[1608,6194,6195],{"class":1785,"line":1333},[1608,6196,1805],{"emptyLinePlaceholder":1305},[1608,6198,6199,6202,6204,6206,6209,6211,6214],{"class":1785,"line":2075},[1608,6200,6201],{"class":2046},"    await",[1608,6203,6176],{"class":2058},[1608,6205,44],{"class":1959},[1608,6207,6208],{"class":2017},"trigger",[1608,6210,3072],{"class":1959},[1608,6212,6213],{"class":2068},"'click'",[1608,6215,2419],{"class":1959},[1608,6217,6218],{"class":1785,"line":2099},[1608,6219,1805],{"emptyLinePlaceholder":1305},[1608,6221,6222,6225,6227,6230,6232,6234,6237,6240,6242,6245],{"class":1785,"line":2119},[1608,6223,6224],{"class":2017},"    expect",[1608,6226,3072],{"class":1959},[1608,6228,6229],{"class":2058},"wrapper",[1608,6231,44],{"class":1959},[1608,6233,446],{"class":2017},[1608,6235,6236],{"class":1959},"()).",[1608,6238,6239],{"class":2017},"toContain",[1608,6241,3072],{"class":1959},[1608,6243,6244],{"class":2068},"'1'",[1608,6246,2419],{"class":1959},[1608,6248,6249],{"class":1785,"line":2129},[1608,6250,5171],{"class":1959},[1608,6252,6253],{"class":1785,"line":1635},[1608,6254,3742],{"class":1959},[73,6256,6258],{"id":6257},"اختبار-composables","اختبار Composables",[441,6260,6262],{"className":1936,"code":6261,"language":1938,"meta":16,"style":16},"// tests/composables/useCounter.test.ts\nimport { describe, it, expect } from 'vitest'\nimport { useCounter } from '@/composables/useCounter'\n\ndescribe('useCounter', () => {\n  it('increments count', () => {\n    const { count, increment } = useCounter()\n\n    increment()\n\n    expect(count.value).toBe(1)\n  })\n})\n",[448,6263,6264,6269,6291,6307,6311,6326,6341,6362,6366,6372,6376,6401,6405],{"__ignoreMap":16},[1608,6265,6266],{"class":1785,"line":1786},[1608,6267,6268],{"class":1945},"// tests/composables/useCounter.test.ts\n",[1608,6270,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289],{"class":1785,"line":1260},[1608,6272,3013],{"class":2046},[1608,6274,2032],{"class":1959},[1608,6276,6064],{"class":2058},[1608,6278,3020],{"class":1959},[1608,6280,6069],{"class":2058},[1608,6282,3020],{"class":1959},[1608,6284,6074],{"class":2058},[1608,6286,3037],{"class":1959},[1608,6288,3040],{"class":2046},[1608,6290,6081],{"class":2068},[1608,6292,6293,6295,6297,6300,6302,6304],{"class":1785,"line":17},[1608,6294,3013],{"class":2046},[1608,6296,2032],{"class":1959},[1608,6298,6299],{"class":2058},"useCounter",[1608,6301,3037],{"class":1959},[1608,6303,3040],{"class":2046},[1608,6305,6306],{"class":2068}," '@/composables/useCounter'\n",[1608,6308,6309],{"class":1785,"line":1802},[1608,6310,1805],{"emptyLinePlaceholder":1305},[1608,6312,6313,6315,6317,6320,6322,6324],{"class":1785,"line":1808},[1608,6314,6064],{"class":2017},[1608,6316,3072],{"class":1959},[1608,6318,6319],{"class":2068},"'useCounter'",[1608,6321,3502],{"class":1959},[1608,6323,3137],{"class":1951},[1608,6325,1960],{"class":1959},[1608,6327,6328,6330,6332,6335,6337,6339],{"class":1785,"line":1814},[1608,6329,6133],{"class":2017},[1608,6331,3072],{"class":1959},[1608,6333,6334],{"class":2068},"'increments count'",[1608,6336,3502],{"class":1959},[1608,6338,3137],{"class":1951},[1608,6340,1960],{"class":1959},[1608,6342,6343,6345,6347,6349,6351,6353,6355,6357,6360],{"class":1785,"line":1820},[1608,6344,6154],{"class":1951},[1608,6346,2032],{"class":1959},[1608,6348,1613],{"class":3062},[1608,6350,3020],{"class":1959},[1608,6352,3901],{"class":3062},[1608,6354,3037],{"class":1959},[1608,6356,2065],{"class":1969},[1608,6358,6359],{"class":2017}," useCounter",[1608,6361,3801],{"class":1959},[1608,6363,6364],{"class":1785,"line":1825},[1608,6365,1805],{"emptyLinePlaceholder":1305},[1608,6367,6368,6370],{"class":1785,"line":1831},[1608,6369,3715],{"class":2017},[1608,6371,3801],{"class":1959},[1608,6373,6374],{"class":1785,"line":1333},[1608,6375,1805],{"emptyLinePlaceholder":1305},[1608,6377,6378,6380,6382,6384,6386,6388,6391,6394,6396,6399],{"class":1785,"line":2075},[1608,6379,6224],{"class":2017},[1608,6381,3072],{"class":1959},[1608,6383,1613],{"class":2058},[1608,6385,44],{"class":1959},[1608,6387,3144],{"class":2058},[1608,6389,6390],{"class":1959},").",[1608,6392,6393],{"class":2017},"toBe",[1608,6395,3072],{"class":1959},[1608,6397,6398],{"class":3075},"1",[1608,6400,2419],{"class":1959},[1608,6402,6403],{"class":1785,"line":2099},[1608,6404,5171],{"class":1959},[1608,6406,6407],{"class":1785,"line":2119},[1608,6408,3742],{"class":1959},[68,6410,6412],{"id":6411},"_8-أنماط-الهيكلة","8. أنماط الهيكلة",[73,6414,6416],{"id":6415},"هيكل-المشروع-الموصى-به","هيكل المشروع الموصى به",[441,6418,6421],{"className":6419,"code":6420,"language":446},[444],"src/\n├── components/\n│   ├── ui/           # مكونات UI الأساسية\n│   ├── forms/        # مكونات النماذج\n│   └── layouts/      # مكونات التخطيط\n├── composables/      # دوال التكوين\n├── stores/          # مخازن Pinia\n├── types/           # أنواع TypeScript\n├── utils/           # دوال المساعدة\n└── views/           # صفحات التطبيق\n",[448,6422,6420],{"__ignoreMap":16},[73,6424,6426],{"id":6425},"نمط-الميزات-feature-based-structure","نمط الميزات (Feature-based structure)",[441,6428,6431],{"className":6429,"code":6430,"language":446},[444],"src/\n├── features/\n│   ├── auth/\n│   │   ├── components/\n│   │   ├── composables/\n│   │   ├── stores/\n│   │   └── types/\n│   └── dashboard/\n│       ├── components/\n│       ├── composables/\n│       ├── stores/\n│       └── types/\n",[448,6432,6430],{"__ignoreMap":16},[68,6434,6436],{"id":6435},"_9-معالجة-الأخطاء-والاستثناءات","9. معالجة الأخطاء والاستثناءات",[73,6438,6440],{"id":6439},"استخدام-error-boundaries","استخدام Error Boundaries",[441,6442,6444],{"className":2980,"code":6443,"language":2982,"meta":16,"style":16},"\u003C!-- components/ErrorBoundary.vue -->\n\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\n\nconst error = ref\u003CError | null>(null)\n\nconst handleError = (err: Error) => {\n  error.value = err\n  // تسجيل الخطأ أو إرساله إلى خدمة التتبع\n}\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"error\" class=\"error-boundary\">\n    \u003Ch2>حدث خطأ غير متوقع\u003C/h2>\n    \u003Cp>{{ error.message }}\u003C/p>\n    \u003Cbutton @click=\"error = null\">إعادة المحاولة\u003C/button>\n  \u003C/div>\n  \u003Cslot v-else />\n\u003C/template>\n",[448,6445,6446,6451,6467,6481,6485,6511,6515,6540,6553,6558,6562,6570,6574,6582,6607,6624,6650,6683,6691,6704],{"__ignoreMap":16},[1608,6447,6448],{"class":1785,"line":1786},[1608,6449,6450],{"class":1945},"\u003C!-- components/ErrorBoundary.vue -->\n",[1608,6452,6453,6455,6457,6459,6461,6463,6465],{"class":1785,"line":1260},[1608,6454,2990],{"class":2989},[1608,6456,2994],{"class":2993},[1608,6458,2998],{"class":2997},[1608,6460,3001],{"class":2997},[1608,6462,2065],{"class":1959},[1608,6464,3006],{"class":2068},[1608,6466,2072],{"class":2989},[1608,6468,6469,6471,6473,6475,6477,6479],{"class":1785,"line":17},[1608,6470,3013],{"class":2046},[1608,6472,2032],{"class":1959},[1608,6474,2923],{"class":2058},[1608,6476,3037],{"class":1959},[1608,6478,3040],{"class":2046},[1608,6480,3474],{"class":2068},[1608,6482,6483],{"class":1785,"line":1802},[1608,6484,1805],{"emptyLinePlaceholder":1305},[1608,6486,6487,6489,6492,6494,6496,6498,6501,6503,6505,6507,6509],{"class":1785,"line":1808},[1608,6488,3059],{"class":1951},[1608,6490,6491],{"class":3062}," error",[1608,6493,3066],{"class":1969},[1608,6495,3069],{"class":2017},[1608,6497,2990],{"class":1959},[1608,6499,6500],{"class":1955},"Error",[1608,6502,5871],{"class":1969},[1608,6504,5874],{"class":1973},[1608,6506,4812],{"class":1959},[1608,6508,5879],{"class":5031},[1608,6510,2419],{"class":1959},[1608,6512,6513],{"class":1785,"line":1814},[1608,6514,1805],{"emptyLinePlaceholder":1305},[1608,6516,6517,6519,6522,6524,6526,6529,6531,6534,6536,6538],{"class":1785,"line":1820},[1608,6518,3059],{"class":1951},[1608,6520,6521],{"class":2017}," handleError",[1608,6523,3066],{"class":1969},[1608,6525,4554],{"class":1959},[1608,6527,6528],{"class":1965},"err",[1608,6530,1970],{"class":1969},[1608,6532,6533],{"class":1955}," Error",[1608,6535,3183],{"class":1959},[1608,6537,3137],{"class":1951},[1608,6539,1960],{"class":1959},[1608,6541,6542,6544,6546,6548,6550],{"class":1785,"line":1825},[1608,6543,4083],{"class":2058},[1608,6545,44],{"class":1959},[1608,6547,3144],{"class":2058},[1608,6549,3066],{"class":1969},[1608,6551,6552],{"class":2058}," err\n",[1608,6554,6555],{"class":1785,"line":1831},[1608,6556,6557],{"class":1945},"  // تسجيل الخطأ أو إرساله إلى خدمة التتبع\n",[1608,6559,6560],{"class":1785,"line":1333},[1608,6561,2005],{"class":1959},[1608,6563,6564,6566,6568],{"class":1785,"line":2075},[1608,6565,2092],{"class":2989},[1608,6567,2994],{"class":2993},[1608,6569,2072],{"class":2989},[1608,6571,6572],{"class":1785,"line":2099},[1608,6573,1805],{"emptyLinePlaceholder":1305},[1608,6575,6576,6578,6580],{"class":1785,"line":2119},[1608,6577,2990],{"class":2989},[1608,6579,3303],{"class":2993},[1608,6581,2072],{"class":2989},[1608,6583,6584,6586,6588,6590,6592,6594,6596,6598,6600,6602,6605],{"class":1785,"line":2129},[1608,6585,3311],{"class":2989},[1608,6587,2059],{"class":2993},[1608,6589,4394],{"class":2046},[1608,6591,2065],{"class":1959},[1608,6593,3381],{"class":3268},[1608,6595,4198],{"class":2058},[1608,6597,3381],{"class":3268},[1608,6599,4251],{"class":2997},[1608,6601,2065],{"class":1959},[1608,6603,6604],{"class":2068},"\"error-boundary\"",[1608,6606,2072],{"class":2989},[1608,6608,6609,6611,6613,6615,6618,6620,6622],{"class":1785,"line":1635},[1608,6610,2055],{"class":2989},[1608,6612,68],{"class":2993},[1608,6614,3325],{"class":2989},[1608,6616,6617],{"class":1959},"حدث خطأ غير متوقع",[1608,6619,2092],{"class":2989},[1608,6621,68],{"class":2993},[1608,6623,2072],{"class":2989},[1608,6625,6626,6628,6630,6632,6635,6637,6639,6642,6644,6646,6648],{"class":1785,"line":2296},[1608,6627,2055],{"class":2989},[1608,6629,30],{"class":2993},[1608,6631,3325],{"class":2989},[1608,6633,6634],{"class":1959},"{{ ",[1608,6636,4198],{"class":2058},[1608,6638,44],{"class":1959},[1608,6640,6641],{"class":2058},"message",[1608,6643,3333],{"class":1959},[1608,6645,2092],{"class":2989},[1608,6647,30],{"class":2993},[1608,6649,2072],{"class":2989},[1608,6651,6652,6654,6656,6658,6660,6662,6664,6666,6668,6670,6672,6674,6677,6679,6681],{"class":1785,"line":2302},[1608,6653,2055],{"class":2989},[1608,6655,3370],{"class":2993},[1608,6657,3373],{"class":1959},[1608,6659,3376],{"class":2997},[1608,6661,2065],{"class":1959},[1608,6663,3381],{"class":3268},[1608,6665,4198],{"class":2058},[1608,6667,3066],{"class":1969},[1608,6669,5874],{"class":5031},[1608,6671,3381],{"class":3268},[1608,6673,3325],{"class":2989},[1608,6675,6676],{"class":1959},"إعادة المحاولة",[1608,6678,2092],{"class":2989},[1608,6680,3370],{"class":2993},[1608,6682,2072],{"class":2989},[1608,6684,6685,6687,6689],{"class":1785,"line":2308},[1608,6686,3405],{"class":2989},[1608,6688,2059],{"class":2993},[1608,6690,2072],{"class":2989},[1608,6692,6693,6695,6697,6700,6702],{"class":1785,"line":3279},[1608,6694,3311],{"class":2989},[1608,6696,4713],{"class":2993},[1608,6698,6699],{"class":2046}," v-else",[1608,6701,4744],{"class":4743},[1608,6703,2072],{"class":2989},[1608,6705,6706,6708,6710],{"class":1785,"line":3284},[1608,6707,2092],{"class":2989},[1608,6709,3303],{"class":2993},[1608,6711,2072],{"class":2989},[73,6713,6715],{"id":6714},"معالجة-الأخطاء-في-composables","معالجة الأخطاء في Composables",[441,6717,6719],{"className":1936,"code":6718,"language":1938,"meta":16,"style":16},"// composables/useAsyncData.ts\nimport { ref, computed } from 'vue'\n\nexport function useAsyncData\u003CT>(fetcher: () => Promise\u003CT>) {\n  const data = ref\u003CT | null>(null)\n  const loading = ref(false)\n  const error = ref\u003Cstring | null>(null)\n\n  const execute = async () => {\n    loading.value = true\n    error.value = null\n\n    try {\n      data.value = await fetcher()\n    } catch (err) {\n      error.value = err instanceof Error ? err.message : 'حدث خطأ غير معروف'\n    } finally {\n      loading.value = false\n    }\n  }\n\n  return {\n    data: computed(() => data.value),\n    loading: computed(() => loading.value),\n    error: computed(() => error.value),\n    execute\n  }\n}\n",[448,6720,6721,6726,6744,6748,6782,6806,6824,6848,6852,6869,6883,6897,6901,6907,6926,6938,6971,6980,6994,6998,7002,7006,7012,7032,7051,7070,7075,7079],{"__ignoreMap":16},[1608,6722,6723],{"class":1785,"line":1786},[1608,6724,6725],{"class":1945},"// composables/useAsyncData.ts\n",[1608,6727,6728,6730,6732,6734,6736,6738,6740,6742],{"class":1785,"line":1260},[1608,6729,3013],{"class":2046},[1608,6731,2032],{"class":1959},[1608,6733,2923],{"class":2058},[1608,6735,3020],{"class":1959},[1608,6737,2949],{"class":2058},[1608,6739,3037],{"class":1959},[1608,6741,3040],{"class":2046},[1608,6743,3474],{"class":2068},[1608,6745,6746],{"class":1785,"line":17},[1608,6747,1805],{"emptyLinePlaceholder":1305},[1608,6749,6750,6752,6754,6757,6759,6761,6763,6766,6768,6770,6772,6775,6777,6779],{"class":1785,"line":1802},[1608,6751,3483],{"class":2046},[1608,6753,4801],{"class":1951},[1608,6755,6756],{"class":2017}," useAsyncData",[1608,6758,2990],{"class":1959},[1608,6760,4809],{"class":1955},[1608,6762,4812],{"class":1959},[1608,6764,6765],{"class":2017},"fetcher",[1608,6767,1970],{"class":1969},[1608,6769,5463],{"class":1959},[1608,6771,3137],{"class":1951},[1608,6773,6774],{"class":1955}," Promise",[1608,6776,2990],{"class":1959},[1608,6778,4809],{"class":1955},[1608,6780,6781],{"class":1959},">) {\n",[1608,6783,6784,6786,6788,6790,6792,6794,6796,6798,6800,6802,6804],{"class":1785,"line":1808},[1608,6785,3516],{"class":1951},[1608,6787,5293],{"class":3062},[1608,6789,3066],{"class":1969},[1608,6791,3069],{"class":2017},[1608,6793,2990],{"class":1959},[1608,6795,4809],{"class":1955},[1608,6797,5871],{"class":1969},[1608,6799,5874],{"class":1973},[1608,6801,4812],{"class":1959},[1608,6803,5879],{"class":5031},[1608,6805,2419],{"class":1959},[1608,6807,6808,6810,6813,6815,6817,6819,6822],{"class":1785,"line":1814},[1608,6809,3516],{"class":1951},[1608,6811,6812],{"class":3062}," loading",[1608,6814,3066],{"class":1969},[1608,6816,3069],{"class":2017},[1608,6818,3072],{"class":1959},[1608,6820,6821],{"class":5031},"false",[1608,6823,2419],{"class":1959},[1608,6825,6826,6828,6830,6832,6834,6836,6838,6840,6842,6844,6846],{"class":1785,"line":1820},[1608,6827,3516],{"class":1951},[1608,6829,6491],{"class":3062},[1608,6831,3066],{"class":1969},[1608,6833,3069],{"class":2017},[1608,6835,2990],{"class":1959},[1608,6837,4150],{"class":1973},[1608,6839,5871],{"class":1969},[1608,6841,5874],{"class":1973},[1608,6843,4812],{"class":1959},[1608,6845,5879],{"class":5031},[1608,6847,2419],{"class":1959},[1608,6849,6850],{"class":1785,"line":1825},[1608,6851,1805],{"emptyLinePlaceholder":1305},[1608,6853,6854,6856,6859,6861,6863,6865,6867],{"class":1785,"line":1831},[1608,6855,3516],{"class":1951},[1608,6857,6858],{"class":2017}," execute",[1608,6860,3066],{"class":1969},[1608,6862,5460],{"class":1951},[1608,6864,5463],{"class":1959},[1608,6866,3137],{"class":1951},[1608,6868,1960],{"class":1959},[1608,6870,6871,6874,6876,6878,6880],{"class":1785,"line":1333},[1608,6872,6873],{"class":2058},"    loading",[1608,6875,44],{"class":1959},[1608,6877,3144],{"class":2058},[1608,6879,3066],{"class":1969},[1608,6881,6882],{"class":5031}," true\n",[1608,6884,6885,6888,6890,6892,6894],{"class":1785,"line":2075},[1608,6886,6887],{"class":2058},"    error",[1608,6889,44],{"class":1959},[1608,6891,3144],{"class":2058},[1608,6893,3066],{"class":1969},[1608,6895,6896],{"class":5031}," null\n",[1608,6898,6899],{"class":1785,"line":2099},[1608,6900,1805],{"emptyLinePlaceholder":1305},[1608,6902,6903,6905],{"class":1785,"line":2119},[1608,6904,4902],{"class":2046},[1608,6906,1960],{"class":1959},[1608,6908,6909,6912,6914,6916,6918,6921,6924],{"class":1785,"line":2129},[1608,6910,6911],{"class":2058},"      data",[1608,6913,44],{"class":1959},[1608,6915,3144],{"class":2058},[1608,6917,3066],{"class":1969},[1608,6919,6920],{"class":2046}," await",[1608,6922,6923],{"class":2017}," fetcher",[1608,6925,3801],{"class":1959},[1608,6927,6928,6930,6932,6934,6936],{"class":1785,"line":1635},[1608,6929,4934],{"class":1959},[1608,6931,4937],{"class":2046},[1608,6933,4554],{"class":1959},[1608,6935,6528],{"class":2058},[1608,6937,4832],{"class":1959},[1608,6939,6940,6943,6945,6947,6949,6952,6955,6957,6960,6962,6964,6966,6968],{"class":1785,"line":2296},[1608,6941,6942],{"class":2058},"      error",[1608,6944,44],{"class":1959},[1608,6946,3144],{"class":2058},[1608,6948,3066],{"class":1969},[1608,6950,6951],{"class":2058}," err",[1608,6953,6954],{"class":1951}," instanceof",[1608,6956,6533],{"class":1955},[1608,6958,6959],{"class":1969}," ?",[1608,6961,6951],{"class":2058},[1608,6963,44],{"class":1959},[1608,6965,6641],{"class":2058},[1608,6967,4716],{"class":1969},[1608,6969,6970],{"class":2068}," 'حدث خطأ غير معروف'\n",[1608,6972,6973,6975,6978],{"class":1785,"line":2302},[1608,6974,4934],{"class":1959},[1608,6976,6977],{"class":2046},"finally",[1608,6979,1960],{"class":1959},[1608,6981,6982,6985,6987,6989,6991],{"class":1785,"line":2308},[1608,6983,6984],{"class":2058},"      loading",[1608,6986,44],{"class":1959},[1608,6988,3144],{"class":2058},[1608,6990,3066],{"class":1969},[1608,6992,6993],{"class":5031}," false\n",[1608,6995,6996],{"class":1785,"line":3279},[1608,6997,2305],{"class":1959},[1608,6999,7000],{"class":1785,"line":3284},[1608,7001,3619],{"class":1959},[1608,7003,7004],{"class":1785,"line":3293},[1608,7005,1805],{"emptyLinePlaceholder":1305},[1608,7007,7008,7010],{"class":1785,"line":3298},[1608,7009,2047],{"class":2046},[1608,7011,1960],{"class":1959},[1608,7013,7014,7017,7019,7021,7023,7025,7027,7029],{"class":1785,"line":3308},[1608,7015,7016],{"class":2058},"    data:",[1608,7018,3131],{"class":2017},[1608,7020,3134],{"class":1959},[1608,7022,3137],{"class":1951},[1608,7024,5293],{"class":2058},[1608,7026,44],{"class":1959},[1608,7028,3144],{"class":2058},[1608,7030,7031],{"class":1959},"),\n",[1608,7033,7034,7037,7039,7041,7043,7045,7047,7049],{"class":1785,"line":3318},[1608,7035,7036],{"class":2058},"    loading:",[1608,7038,3131],{"class":2017},[1608,7040,3134],{"class":1959},[1608,7042,3137],{"class":1951},[1608,7044,6812],{"class":2058},[1608,7046,44],{"class":1959},[1608,7048,3144],{"class":2058},[1608,7050,7031],{"class":1959},[1608,7052,7053,7056,7058,7060,7062,7064,7066,7068],{"class":1785,"line":3342},[1608,7054,7055],{"class":2058},"    error:",[1608,7057,3131],{"class":2017},[1608,7059,3134],{"class":1959},[1608,7061,3137],{"class":1951},[1608,7063,6491],{"class":2058},[1608,7065,44],{"class":1959},[1608,7067,3144],{"class":2058},[1608,7069,7031],{"class":1959},[1608,7071,7072],{"class":1785,"line":3365},[1608,7073,7074],{"class":2058},"    execute\n",[1608,7076,7077],{"class":1785,"line":3402},[1608,7078,3619],{"class":1959},[1608,7080,7081],{"class":1785,"line":3412},[1608,7082,2005],{"class":1959},[68,7084,7086],{"id":7085},"_10-تحسين-تجربة-المطور","10. تحسين تجربة المطور",[73,7088,7090],{"id":7089},"استخدام-vue-devtools","استخدام Vue DevTools",[30,7092,7093],{},"Vue DevTools هو أداة أساسية لتصحيح أخطاء تطبيقات Vue 3:",[49,7095,7096,7099,7102,7105],{},[52,7097,7098],{},"فحص شجرة المكونات",[52,7100,7101],{},"مراقبة الحالة التفاعلية",[52,7103,7104],{},"تتبع أحداث المكونات",[52,7106,7107],{},"تحليل أداء العرض",[73,7109,7111],{"id":7110},"إعداد-التطوير-الفعال","إعداد التطوير الفعال",[441,7113,7115],{"className":1936,"code":7114,"language":1938,"meta":16,"style":16},"// vite.config.ts\nimport { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\n\nexport default defineConfig({\n  plugins: [vue()],\n  server: {\n    hmr: true\n  },\n  build: {\n    sourcemap: true\n  }\n})\n",[448,7116,7117,7122,7138,7150,7154,7167,7179,7186,7193,7198,7205,7212,7216],{"__ignoreMap":16},[1608,7118,7119],{"class":1785,"line":1786},[1608,7120,7121],{"class":1945},"// vite.config.ts\n",[1608,7123,7124,7126,7128,7131,7133,7135],{"class":1785,"line":1260},[1608,7125,3013],{"class":2046},[1608,7127,2032],{"class":1959},[1608,7129,7130],{"class":2058},"defineConfig",[1608,7132,3037],{"class":1959},[1608,7134,3040],{"class":2046},[1608,7136,7137],{"class":2068}," 'vite'\n",[1608,7139,7140,7142,7145,7147],{"class":1785,"line":17},[1608,7141,3013],{"class":2046},[1608,7143,7144],{"class":2058}," vue",[1608,7146,6107],{"class":2046},[1608,7148,7149],{"class":2068}," '@vitejs/plugin-vue'\n",[1608,7151,7152],{"class":1785,"line":1802},[1608,7153,1805],{"emptyLinePlaceholder":1305},[1608,7155,7156,7158,7161,7164],{"class":1785,"line":1808},[1608,7157,3483],{"class":2046},[1608,7159,7160],{"class":2046}," default",[1608,7162,7163],{"class":2017}," defineConfig",[1608,7165,7166],{"class":1959},"({\n",[1608,7168,7169,7172,7174,7176],{"class":1785,"line":1814},[1608,7170,7171],{"class":2058},"  plugins:",[1608,7173,4141],{"class":1959},[1608,7175,2982],{"class":2017},[1608,7177,7178],{"class":1959},"()],\n",[1608,7180,7181,7184],{"class":1785,"line":1820},[1608,7182,7183],{"class":2058},"  server:",[1608,7185,1960],{"class":1959},[1608,7187,7188,7191],{"class":1785,"line":1825},[1608,7189,7190],{"class":2058},"    hmr:",[1608,7192,6882],{"class":5031},[1608,7194,7195],{"class":1785,"line":1831},[1608,7196,7197],{"class":1959},"  },\n",[1608,7199,7200,7203],{"class":1785,"line":1333},[1608,7201,7202],{"class":2058},"  build:",[1608,7204,1960],{"class":1959},[1608,7206,7207,7210],{"class":1785,"line":2075},[1608,7208,7209],{"class":2058},"    sourcemap:",[1608,7211,6882],{"class":5031},[1608,7213,7214],{"class":1785,"line":2099},[1608,7215,3619],{"class":1959},[1608,7217,7218],{"class":1785,"line":2119},[1608,7219,3742],{"class":1959},[68,7221,7222],{"id":7222},"الخاتمة",[30,7224,7225],{},"Vue 3 يوفر مجموعة قوية من الأدوات والأنماط لبناء تطبيقات ويب حديثة وقابلة للتوسع. من خلال إتقان Composition API، Pinia لإدارة الحالة، والأنماط المتقدمة، يمكنك بناء تطبيقات أكثر صيانة، أداءً، وتجربة مطور أفضل.",[30,7227,7228],{},"تذكر أن أفضل الممارسات تتطور مع الإطار. ابق على اطلاع دائم بأحدث التطورات في مجتمع Vue، وطبق هذه الأنماط تدريجياً في مشاريعك. التوازن بين الكود النظيف، الأداء، وقابلية الصيانة هو مفتاح بناء تطبيقات Vue 3 ناجحة في 2025. 🚀",[2846,7230,7231],{},"html pre.shiki code .sffyN, html code.shiki .sffyN{--shiki-light:#24292E;--shiki-default:#808080;--shiki-dark:#808080}html pre.shiki code .ssFZ1, html code.shiki .ssFZ1{--shiki-light:#22863A;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sFcZJ, html code.shiki .sFcZJ{--shiki-light:#6F42C1;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .se2iQ, html code.shiki .se2iQ{--shiki-light:#032F62;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s5T4v, html code.shiki .s5T4v{--shiki-light:#032F62;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .sGRYn, html code.shiki .sGRYn{--shiki-light:#6F42C1;--shiki-default:#C8C8C8;--shiki-dark:#C8C8C8}html pre.shiki code .sUwQ0, html code.shiki .sUwQ0{--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-default:#F44747;--shiki-default-font-style:inherit;--shiki-dark:#F44747;--shiki-dark-font-style:inherit}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}",{"title":16,"searchDepth":17,"depth":17,"links":7233},[7234,7235,7239,7243,7247,7255,7259,7263,7267,7271,7275],{"id":2900,"depth":1260,"text":2901},{"id":3421,"depth":1260,"text":3422,"children":7236},[7237,7238],{"id":3428,"depth":17,"text":3429},{"id":3745,"depth":17,"text":3746},{"id":4001,"depth":1260,"text":4002,"children":7240},[7241,7242],{"id":4005,"depth":17,"text":4006},{"id":4449,"depth":17,"text":4450},{"id":4757,"depth":1260,"text":4758,"children":7244},[7245,7246],{"id":4761,"depth":17,"text":4762},{"id":5053,"depth":17,"text":5054},{"id":5215,"depth":1260,"text":5216,"children":7248},[7249,7251,7253],{"id":5219,"depth":17,"text":7250},"استخدام shallowRef و shallowReactive",{"id":5307,"depth":17,"text":7252},"تحسين العرض مع v-memo",{"id":5421,"depth":17,"text":7254},"استخدام nextTick بحكمة",{"id":5528,"depth":1260,"text":5529,"children":7256},[7257,7258],{"id":5532,"depth":17,"text":5533},{"id":5745,"depth":17,"text":5746},{"id":6040,"depth":1260,"text":6041,"children":7260},[7261,7262],{"id":6044,"depth":17,"text":6045},{"id":6257,"depth":17,"text":6258},{"id":6411,"depth":1260,"text":6412,"children":7264},[7265,7266],{"id":6415,"depth":17,"text":6416},{"id":6425,"depth":17,"text":6426},{"id":6435,"depth":1260,"text":6436,"children":7268},[7269,7270],{"id":6439,"depth":17,"text":6440},{"id":6714,"depth":17,"text":6715},{"id":7085,"depth":1260,"text":7086,"children":7272},[7273,7274],{"id":7089,"depth":17,"text":7090},{"id":7110,"depth":17,"text":7111},{"id":7222,"depth":1260,"text":7222},"إتقان Composition API في Vue 3، إدارة الحالة مع Pinia، والأنماط المتقدمة لبناء تطبيقات جاهزة للإنتاج. يشمل أمثلة حقيقية، تكامل TypeScript، وتقنيات تحسين الأداء.","https://images.unsplash.com/photo-1563986768494-4dee2763ff3f?auto=format&fit=crop&w=1200&q=80",{"excerpt":7279},{"type":13,"value":7280},[7281],[30,7282,2897],{},"/anmat-vue3-asasyh-2025",{"title":2892,"description":7276},"أنماط-vue3-أساسية-2025",[7287,7288,7289,2885,1938,7290,7291,7292,7293],"vue3","patterns","best-practices","frontend","architecture","composition-api","pinia","tht73YaMWIQMMjZltncrGUeZ_DggZpgiRrEcko0BOC4",{"id":7296,"title":7297,"author":26,"body":7298,"category":19,"description":8252,"extension":7,"image":8253,"isDraft":1304,"isFeatured":1305,"locale":9,"meta":8254,"navigation":1305,"path":8261,"publishedAt":8262,"readingTime":3284,"seo":8263,"stem":8264,"tags":8265,"updatedAt":1342,"__hash__":8272},"articles_ar/إنتاجية-المطور-2025.md","الدليل الشامل لإنتاجية المطور في 2025: الأدوات والتقنيات والعادات",{"type":13,"value":7299,"toc":8214},[7300,7303,7306,7310,7314,7319,7322,7362,7367,7461,7465,7470,7490,7495,7515,7519,7524,7544,7549,7569,7573,7577,7583,7588,7599,7604,7615,7619,7624,7656,7661,7681,7685,7690,7704,7709,7729,7733,7737,7742,7753,7758,7769,7774,7785,7789,7794,7805,7810,7836,7840,7845,7859,7864,7878,7882,7886,7906,7910,7918,7922,7942,7946,7957,7961,7965,7970,7990,7995,8006,8010,8015,8035,8040,8051,8055,8059,8069,8073,8081,8085,8093,8097,8105,8109,8113,8118,8128,8133,8144,8149,8160,8164,8169,8187,8192,8203,8205,8208,8211],[30,7301,7302],{},"في عالم تطوير البرمجيات السريع التطور، الإنتاجية ليست مجرد العمل ساعات أطول - بل العمل بذكاء أكبر باستخدام الأدوات المناسبة، التقنيات، والعادات. كمطورين في 2025، لدينا إمكانية الوصول إلى مساعدين مدعومين بالذكاء الاصطناعي، أدوات الأتمتة المتقدمة، والمنهجيات المثبتة التي يمكن أن تحول سير عملنا.",[30,7304,7305],{},"يغطي هذا الدليل الشامل كل ما تحتاجه لتعظيم إنتاجيتك: من أدوات التطوير الحديثة إلى تقنيات العمل العميق، من مساعدي الذكاء الاصطناعي إلى عادات الصحة. سواء كنت مطوراً مبتدئاً أو مهندساً محترفاً، ستجد استراتيجيات قابلة للتنفيذ تعمل فعلاً.",[68,7307,7309],{"id":7308},"مجموعة-أدوات-المطور-الحديث-2025","مجموعة أدوات المطور الحديث (2025)",[73,7311,7313],{"id":7312},"الأدوات-الأساسية-للتطوير","الأدوات الأساسية للتطوير",[30,7315,7316],{},[37,7317,7318],{},"محررات الكود والبيئات التطويرية",[30,7320,7321],{},"يمكن للمحرر المناسب أن يحدث فرقاً هائلاً في سير عملك اليومي:",[49,7323,7324,7350,7356],{},[52,7325,7326,7329,7330],{},[37,7327,7328],{},"Visual Studio Code"," (مجاني) - ما زال الملك في 2025. الإضافات الأساسية:",[49,7331,7332,7335,7338,7341,7344,7347],{},[52,7333,7334],{},"GitHub Copilot (10 دولار/شهر) - مبرمج زوج مدعوم بالذكاء الاصطناعي",[52,7336,7337],{},"Prettier - تنسيق الكود",[52,7339,7340],{},"ESLint - فحص الكود وجودته",[52,7342,7343],{},"GitLens - تصور محسن لـ Git",[52,7345,7346],{},"Thunder Client - اختبار REST API",[52,7348,7349],{},"Error Lens - تمييز الأخطاء المضمنة",[52,7351,7352,7355],{},[37,7353,7354],{},"Cursor"," (20 دولار/شهر) - نسخة من VS Code مع دردشة ذكاء اصطناعي مدمجة وفهم قاعدة الكود. الأفضل للتطوير المعتمد على الذكاء الاصطناعي.",[52,7357,7358,7361],{},[37,7359,7360],{},"JetBrains IDEs"," (149 دولار/سنة) - IntelliJ IDEA، WebStorm، PyCharm. أدوات إعادة هيكلة وتصحيح أفضل.",[30,7363,7364],{},[37,7365,7366],{},"اختصارات المفاتيح الأساسية لإتقانها (VS Code)",[507,7368,7369,7379],{},[510,7370,7371],{},[513,7372,7373,7376],{},[516,7374,7375],{},"الاختصار",[516,7377,7378],{},"الوظيفة",[523,7380,7381,7391,7401,7411,7421,7431,7441,7451],{},[513,7382,7383,7388],{},[528,7384,7385],{},[448,7386,7387],{},"Ctrl+Shift+P",[528,7389,7390],{},"لوحة الأوامر",[513,7392,7393,7398],{},[528,7394,7395],{},[448,7396,7397],{},"Ctrl+P",[528,7399,7400],{},"البحث السريع في الملفات",[513,7402,7403,7408],{},[528,7404,7405],{},[448,7406,7407],{},"Ctrl+Shift+F",[528,7409,7410],{},"البحث في المشروع",[513,7412,7413,7418],{},[528,7414,7415],{},[448,7416,7417],{},"Ctrl+D",[528,7419,7420],{},"تحديد التكرار التالي",[513,7422,7423,7428],{},[528,7424,7425],{},[448,7426,7427],{},"Alt+Shift+أسفل",[528,7429,7430],{},"نسخ السطر",[513,7432,7433,7438],{},[528,7434,7435],{},[448,7436,7437],{},"Ctrl+Shift+K",[528,7439,7440],{},"حذف السطر",[513,7442,7443,7448],{},[528,7444,7445],{},[448,7446,7447],{},"Ctrl+Shift+\\",[528,7449,7450],{},"الانتقال إلى القوس المقابل",[513,7452,7453,7458],{},[528,7454,7455],{},[448,7456,7457],{},"Ctrl+K Ctrl+C",[528,7459,7460],{},"تعطيل السطر",[73,7462,7464],{"id":7463},"أدوات-الإنتاجية-المدعومة-بالذكاء-الاصطناعي","أدوات الإنتاجية المدعومة بالذكاء الاصطناعي",[30,7466,7467],{},[37,7468,7469],{},"مساعدو البرمجة:",[49,7471,7472,7478,7484],{},[52,7473,7474,7477],{},[37,7475,7476],{},"GitHub Copilot"," - يكتب الكود، يقترح الإكمال، يولد الاختبارات",[52,7479,7480,7483],{},[37,7481,7482],{},"CodeWhisperer"," (أمازون) - مجاني، يدعم 15 لغة",[52,7485,7486,7489],{},[37,7487,7488],{},"Tabnine"," - يتعلم من قاعدة كودك الخاصة",[30,7491,7492],{},[37,7493,7494],{},"أدوات الأتمتة:",[49,7496,7497,7503,7509],{},[52,7498,7499,7502],{},[37,7500,7501],{},"Zapier"," - ربط التطبيقات بدون كود",[52,7504,7505,7508],{},[37,7506,7507],{},"Make (Integromat)"," - سير العمل المعقد",[52,7510,7511,7514],{},[37,7512,7513],{},"Hugging Face"," - نماذج الذكاء الاصطناعي المفتوحة المصدر",[73,7516,7518],{"id":7517},"أدوات-إدارة-المهام-والوقت","أدوات إدارة المهام والوقت",[30,7520,7521],{},[37,7522,7523],{},"مديري المهام:",[49,7525,7526,7532,7538],{},[52,7527,7528,7531],{},[37,7529,7530],{},"Linear"," - للفرق التقنية، سريع ومركز",[52,7533,7534,7537],{},[37,7535,7536],{},"Notion"," - مرن، يمكن تخصيصه لأي سير عمل",[52,7539,7540,7543],{},[37,7541,7542],{},"Todoist"," - بسيط وفعال",[30,7545,7546],{},[37,7547,7548],{},"تتبع الوقت:",[49,7550,7551,7557,7563],{},[52,7552,7553,7556],{},[37,7554,7555],{},"Toggl Track"," - تتبع الوقت الدقيق",[52,7558,7559,7562],{},[37,7560,7561],{},"RescueTime"," - تحليل كيفية قضاء وقتك",[52,7564,7565,7568],{},[37,7566,7567],{},"Timely"," - تتبع تلقائي للوقت",[68,7570,7572],{"id":7571},"تقنيات-العمل-الفعالة","تقنيات العمل الفعالة",[73,7574,7576],{"id":7575},"تقنية-pomodoro-المحسنة","تقنية Pomodoro المحسنة",[30,7578,7579,7582],{},[37,7580,7581],{},"الطريقة التقليدية:"," 25 دقيقة عمل، 5 دقائق استراحة",[30,7584,7585],{},[37,7586,7587],{},"الإصدار 2025:",[49,7589,7590,7593,7596],{},[52,7591,7592],{},"50 دقيقة عميقة + 10 دقائق استراحة نشطة",[52,7594,7595],{},"استخدم تطبيقات مثل Focus Booster أو Forest",[52,7597,7598],{},"قم بجدولة الاجتماعات في أوقات الاستراحة",[30,7600,7601],{},[37,7602,7603],{},"نصائح للتنفيذ:",[49,7605,7606,7609,7612],{},[52,7607,7608],{},"حدد المهام مسبقاً لكل جلسة",[52,7610,7611],{},"استخدم وضع \"لا إزعاج\" على هاتفك",[52,7613,7614],{},"راقب تقدمك وعدل حسب الحاجة",[73,7616,7618],{"id":7617},"تقنية-getting-things-done-gtd","تقنية Getting Things Done (GTD)",[30,7620,7621],{},[37,7622,7623],{},"الخطوات الأساسية:",[913,7625,7626,7632,7638,7644,7650],{},[52,7627,7628,7631],{},[37,7629,7630],{},"التقاط"," - جميع الأفكار والمهام في نظام واحد",[52,7633,7634,7637],{},[37,7635,7636],{},"توضيح"," - حدد ما إذا كانت قابلة للتنفيذ",[52,7639,7640,7643],{},[37,7641,7642],{},"تنظيم"," - ضعها في فئات مناسبة",[52,7645,7646,7649],{},[37,7647,7648],{},"عكس"," - راجع بانتظام",[52,7651,7652,7655],{},[37,7653,7654],{},"القيام"," - نفذ المهام",[30,7657,7658],{},[37,7659,7660],{},"أدوات GTD في 2025:",[49,7662,7663,7669,7675],{},[52,7664,7665,7668],{},[37,7666,7667],{},"Obsidian"," - للملاحظات والمعرفة",[52,7670,7671,7674],{},[37,7672,7673],{},"Roam Research"," - قواعد بيانات مترابطة",[52,7676,7677,7680],{},[37,7678,7679],{},"Things 3"," - تنفيذ GTD النقي",[73,7682,7684],{"id":7683},"تقنية-deep-work","تقنية Deep Work",[30,7686,7687],{},[37,7688,7689],{},"مبادئ كاله نيوبرت:",[49,7691,7692,7695,7698,7701],{},[52,7693,7694],{},"جدولة وقت العمل العميق مسبقاً",[52,7696,7697],{},"إزالة المشتتات (إشعارات، وسائل التواصل الاجتماعي)",[52,7699,7700],{},"العمل على مهمة واحدة في كل مرة",[52,7702,7703],{},"تحديد جلسات 90 دقيقة",[30,7705,7706],{},[37,7707,7708],{},"أدوات التركيز:",[49,7710,7711,7717,7723],{},[52,7712,7713,7716],{},[37,7714,7715],{},"Freedom"," - حظر المواقع المشتتة",[52,7718,7719,7722],{},[37,7720,7721],{},"Cold Turkey"," - قفل التطبيقات",[52,7724,7725,7728],{},[37,7726,7727],{},"Brain.fm"," - موسيقى للتركيز",[68,7730,7732],{"id":7731},"عادات-المطور-الناجح","عادات المطور الناجح",[73,7734,7736],{"id":7735},"إدارة-الطاقة-والصحة","إدارة الطاقة والصحة",[30,7738,7739],{},[37,7740,7741],{},"النوم:",[49,7743,7744,7747,7750],{},[52,7745,7746],{},"7-9 ساعات يومياً",[52,7748,7749],{},"جدولة ثابتة للنوم والاستيقاظ",[52,7751,7752],{},"تجنب الشاشات قبل النوم بساعة",[30,7754,7755],{},[37,7756,7757],{},"التمارين:",[49,7759,7760,7763,7766],{},[52,7761,7762],{},"30 دقيقة يومياً من التمارين الهوائية",[52,7764,7765],{},"تمارين القوة 3 مرات أسبوعياً",[52,7767,7768],{},"المشي أثناء التفكير في المشاكل المعقدة",[30,7770,7771],{},[37,7772,7773],{},"التغذية:",[49,7775,7776,7779,7782],{},[52,7777,7778],{},"وجبات متوازنة مع بروتين عالي",[52,7780,7781],{},"هيدرات كافية (3-4 لتر ماء يومياً)",[52,7783,7784],{},"وجبات خفيفة صحية للحفاظ على الطاقة",[73,7786,7788],{"id":7787},"التعلم-المستمر","التعلم المستمر",[30,7790,7791],{},[37,7792,7793],{},"الطريقة الفعالة:",[49,7795,7796,7799,7802],{},[52,7797,7798],{},"تخصيص ساعة يومياً للتعلم",[52,7800,7801],{},"التركيز على مهارة واحدة في كل مرة",[52,7803,7804],{},"تطبيق ما تعلمته فوراً في مشاريع حقيقية",[30,7806,7807],{},[37,7808,7809],{},"موارد التعلم في 2025:",[49,7811,7812,7818,7824,7830],{},[52,7813,7814,7817],{},[37,7815,7816],{},"Exercism"," - تمارين برمجة تفاعلية",[52,7819,7820,7823],{},[37,7821,7822],{},"LeetCode"," - تحضير المقابلات التقنية",[52,7825,7826,7829],{},[37,7827,7828],{},"Frontend Masters"," - دورات متقدمة",[52,7831,7832,7835],{},[37,7833,7834],{},"Egghead"," - دروس قصيرة عملية",[73,7837,7839],{"id":7838},"إدارة-التوتر-والاحتراق","إدارة التوتر والاحتراق",[30,7841,7842],{},[37,7843,7844],{},"علامات الاحتراق:",[49,7846,7847,7850,7853,7856],{},[52,7848,7849],{},"إرهاق مستمر",[52,7851,7852],{},"نقص الإنتاجية",[52,7854,7855],{},"فقدان الاهتمام بالعمل",[52,7857,7858],{},"مشاكل النوم",[30,7860,7861],{},[37,7862,7863],{},"استراتيجيات الوقاية:",[49,7865,7866,7869,7872,7875],{},[52,7867,7868],{},"أخذ إجازات منتظمة",[52,7870,7871],{},"تحديد حدود واضحة بين العمل والحياة الشخصية",[52,7873,7874],{},"ممارسة التأمل أو اليوغا",[52,7876,7877],{},"بناء شبكة دعم من الزملاء",[68,7879,7881],{"id":7880},"سير-العمل-اليومي-المثالي","سير العمل اليومي المثالي",[73,7883,7885],{"id":7884},"الصباح-800-1200","الصباح (8:00 - 12:00)",[49,7887,7888,7894,7900],{},[52,7889,7890,7893],{},[37,7891,7892],{},"8:00-9:00",": مراجعة المهام والتخطيط",[52,7895,7896,7899],{},[37,7897,7898],{},"9:00-11:00",": جلسة عمل عميق أولى (Pomodoro)",[52,7901,7902,7905],{},[37,7903,7904],{},"11:00-12:00",": مراجعة التقدم وتعديل الخطة",[73,7907,7909],{"id":7908},"الظهر-1200-1300","الظهر (12:00 - 13:00)",[49,7911,7912,7915],{},[52,7913,7914],{},"وجبة صحية ومشي قصير",[52,7916,7917],{},"استراحة ذهنية (تأمل أو قراءة)",[73,7919,7921],{"id":7920},"بعد-الظهر-1300-1700","بعد الظهر (13:00 - 17:00)",[49,7923,7924,7930,7936],{},[52,7925,7926,7929],{},[37,7927,7928],{},"13:00-15:00",": جلسة عمل عميق ثانية",[52,7931,7932,7935],{},[37,7933,7934],{},"15:00-16:00",": اجتماعات وتواصل",[52,7937,7938,7941],{},[37,7939,7940],{},"16:00-17:00",": مهام إدارية ومتابعة",[73,7943,7945],{"id":7944},"المساء-1700-2200","المساء (17:00 - 22:00)",[49,7947,7948,7951,7954],{},[52,7949,7950],{},"مراجعة اليوم وتخطيط الغد",[52,7952,7953],{},"وقت عائلي وهوايات",[52,7955,7956],{},"وقت مبكر للنوم",[68,7958,7960],{"id":7959},"الأدوات-المتقدمة-للإنتاجية","الأدوات المتقدمة للإنتاجية",[73,7962,7964],{"id":7963},"أتمتة-سير-العمل","أتمتة سير العمل",[30,7966,7967],{},[37,7968,7969],{},"أدوات الأتمتة الشائعة:",[49,7971,7972,7978,7984],{},[52,7973,7974,7977],{},[37,7975,7976],{},"Alfred"," (Mac) - مشغل التطبيقات والاختصارات",[52,7979,7980,7983],{},[37,7981,7982],{},"AutoHotkey"," (Windows) - سكريبتات الأتمتة",[52,7985,7986,7989],{},[37,7987,7988],{},"Keyboard Maestro"," (Mac) - أتمتة معقدة",[30,7991,7992],{},[37,7993,7994],{},"أمثلة على الأتمتة:",[49,7996,7997,8000,8003],{},[52,7998,7999],{},"إنشاء مشاريع جديدة بأمر واحد",[52,8001,8002],{},"نشر الكود إلى الإنتاج تلقائياً",[52,8004,8005],{},"إنشاء تقارير يومية",[73,8007,8009],{"id":8008},"مراقبة-الإنتاجية","مراقبة الإنتاجية",[30,8011,8012],{},[37,8013,8014],{},"أدوات التتبع:",[49,8016,8017,8023,8029],{},[52,8018,8019,8022],{},[37,8020,8021],{},"Wakatime"," - تتبع الوقت المقضي في الكود",[52,8024,8025,8028],{},[37,8026,8027],{},"GitHub Insights"," - تحليل نشاط Git",[52,8030,8031,8034],{},[37,8032,8033],{},"CodeStream"," - تعليقات الكود ومراجعات",[30,8036,8037],{},[37,8038,8039],{},"المقاييس المهمة:",[49,8041,8042,8045,8048],{},[52,8043,8044],{},"ساعات الترميز الفعالة",[52,8046,8047],{},"عدد الالتزامات اليومية",[52,8049,8050],{},"جودة الكود (تغطية الاختبارات، الأخطاء)",[68,8052,8054],{"id":8053},"تجنب-الفخاخ-الشائعة","تجنب الفخاخ الشائعة",[73,8056,8058],{"id":8057},"الفخ-1-التبديل-المتعدد-للمهام","الفخ 1: التبديل المتعدد للمهام",[30,8060,8061,8064,8065,8068],{},[37,8062,8063],{},"المشكلة:"," يقلل من الإنتاجية بنسبة 40%\n",[37,8066,8067],{},"الحل:"," ركز على مهمة واحدة في كل مرة",[73,8070,8072],{"id":8071},"الفخ-2-الإشعارات-المستمرة","الفخ 2: الإشعارات المستمرة",[30,8074,8075,8077,8078,8080],{},[37,8076,8063],{}," يقاطع التدفق\n",[37,8079,8067],{}," وضع \"لا إزعاج\" أثناء العمل العميق",[73,8082,8084],{"id":8083},"الفخ-3-عدم-وجود-حدود","الفخ 3: عدم وجود حدود",[30,8086,8087,8089,8090,8092],{},[37,8088,8063],{}," يؤدي إلى الاحتراق\n",[37,8091,8067],{}," حدد أوقات نهاية العمل بوضوح",[73,8094,8096],{"id":8095},"الفخ-4-عدم-التعلم-المستمر","الفخ 4: عدم التعلم المستمر",[30,8098,8099,8101,8102,8104],{},[37,8100,8063],{}," التخلف عن التقنيات الجديدة\n",[37,8103,8067],{}," خصص وقتاً يومياً للتعلم",[68,8106,8108],{"id":8107},"قياس-وتحسين-الإنتاجية","قياس وتحسين الإنتاجية",[73,8110,8112],{"id":8111},"المقاييس-الرئيسية","المقاييس الرئيسية",[30,8114,8115],{},[37,8116,8117],{},"مقاييس الكمية:",[49,8119,8120,8122,8125],{},[52,8121,8047],{},[52,8123,8124],{},"عدد المهام المكتملة",[52,8126,8127],{},"وقت الاستجابة للطلبات",[30,8129,8130],{},[37,8131,8132],{},"مقاييس الجودة:",[49,8134,8135,8138,8141],{},[52,8136,8137],{},"تغطية الاختبارات",[52,8139,8140],{},"عدد الأخطاء في الإنتاج",[52,8142,8143],{},"رضا العملاء",[30,8145,8146],{},[37,8147,8148],{},"مقاييس الرضا:",[49,8150,8151,8154,8157],{},[52,8152,8153],{},"مستوى التوتر",[52,8155,8156],{},"الرضا الوظيفي",[52,8158,8159],{},"التوازن بين العمل والحياة",[73,8161,8163],{"id":8162},"أدوات-القياس","أدوات القياس",[30,8165,8166],{},[37,8167,8168],{},"تطبيقات التتبع:",[49,8170,8171,8176,8181],{},[52,8172,8173,8175],{},[37,8174,7567],{}," - تتبع تلقائي",[52,8177,8178,8180],{},[37,8179,7561],{}," - تحليل مفصل",[52,8182,8183,8186],{},[37,8184,8185],{},"Trello/Jira"," - تتبع المهام",[30,8188,8189],{},[37,8190,8191],{},"المراجعة الأسبوعية:",[49,8193,8194,8197,8200],{},[52,8195,8196],{},"ما الذي سار جيداً؟",[52,8198,8199],{},"ما الذي يمكن تحسينه؟",[52,8201,8202],{},"أهداف الأسبوع القادم",[68,8204,7222],{"id":7222},[30,8206,8207],{},"الإنتاجية في التطوير ليست عن العمل الأكثر، بل العمل الأذكى. في 2025، لدينا أدوات مذهلة - من مساعدي الذكاء الاصطناعي إلى أدوات الأتمتة - لكن النجاح يعتمد على بناء عادات مستدامة وتقنيات عمل فعالة.",[30,8209,8210],{},"ابدأ بتطبيق تغيير واحد اليوم. سواء كان إعداد جدول زمني أفضل، أو تعلم اختصار جديد، أو تجربة تقنية جديدة - كل خطوة صغيرة تؤدي إلى تحسن كبير في إنتاجيتك.",[30,8212,8213],{},"تذكر: المطور الأكثر إنتاجية ليس الذي يعمل أكثر، بل الذي يعمل بذكاء أكبر مع الطاقة والإبداع المناسبين. 🚀",{"title":16,"searchDepth":17,"depth":17,"links":8215},[8216,8221,8226,8231,8237,8241,8247,8251],{"id":7308,"depth":1260,"text":7309,"children":8217},[8218,8219,8220],{"id":7312,"depth":17,"text":7313},{"id":7463,"depth":17,"text":7464},{"id":7517,"depth":17,"text":7518},{"id":7571,"depth":1260,"text":7572,"children":8222},[8223,8224,8225],{"id":7575,"depth":17,"text":7576},{"id":7617,"depth":17,"text":7618},{"id":7683,"depth":17,"text":7684},{"id":7731,"depth":1260,"text":7732,"children":8227},[8228,8229,8230],{"id":7735,"depth":17,"text":7736},{"id":7787,"depth":17,"text":7788},{"id":7838,"depth":17,"text":7839},{"id":7880,"depth":1260,"text":7881,"children":8232},[8233,8234,8235,8236],{"id":7884,"depth":17,"text":7885},{"id":7908,"depth":17,"text":7909},{"id":7920,"depth":17,"text":7921},{"id":7944,"depth":17,"text":7945},{"id":7959,"depth":1260,"text":7960,"children":8238},[8239,8240],{"id":7963,"depth":17,"text":7964},{"id":8008,"depth":17,"text":8009},{"id":8053,"depth":1260,"text":8054,"children":8242},[8243,8244,8245,8246],{"id":8057,"depth":17,"text":8058},{"id":8071,"depth":17,"text":8072},{"id":8083,"depth":17,"text":8084},{"id":8095,"depth":17,"text":8096},{"id":8107,"depth":1260,"text":8108,"children":8248},[8249,8250],{"id":8111,"depth":17,"text":8112},{"id":8162,"depth":17,"text":8163},{"id":7222,"depth":1260,"text":7222},"دليل شامل لتعظيم إنتاجيتك كمطور في 2025 باستخدام الأدوات الحديثة، التقنيات المثبتة، والعادات المستدامة التي تعمل فعلاً.","https://images.unsplash.com/photo-1552664730-d307ca884978?q=80&w=1200",{"excerpt":8255},{"type":13,"value":8256},[8257,8259],[30,8258,7302],{},[30,8260,7305],{},"/intajyh-almtwr-2025","2025-05-05",{"title":7297,"description":8252},"إنتاجية-المطور-2025",[19,8266,8267,8268,8269,1644,8270,8271],"productivity","workflow","efficiency","developer-tips","vscode","automation","jNsksv11xbOme2hvbqvBB41-nRoLwXfr0b12-NI26C0",{"id":8274,"title":8275,"author":26,"body":8276,"category":19,"description":11976,"extension":7,"image":11977,"isDraft":1304,"isFeatured":1305,"locale":9,"meta":11978,"navigation":1305,"path":11989,"publishedAt":11990,"readingTime":1635,"seo":11991,"stem":11992,"tags":11993,"updatedAt":1342,"__hash__":11996},"articles_ar/البدء-مع-nuxt.md","البدء مع Nuxt: دليل شامل لتطوير الويب الحديث",{"type":13,"value":8277,"toc":11931},[8278,8281,8284,8288,8291,8295,8301,8312,8322,8328,8334,8400,8405,8432,8438,8452,8456,8460,8463,8478,8482,8485,8504,8507,8515,8518,8549,8556,8560,8563,8569,8573,8577,8582,8587,8700,8705,8708,8717,8911,8915,8918,8923,9147,9150,9191,9195,9202,9207,9415,9418,9466,9470,9473,9478,9719,9724,9845,9850,9904,9908,9914,9919,9982,9985,10075,10080,10088,10184,10188,10191,10196,10358,10361,10526,10530,10533,10537,10552,10557,10589,10593,10607,10610,10728,10732,10746,10749,10803,10807,10809,10822,10826,10840,10846,10850,10864,10868,10871,10885,10889,10892,10897,10915,10920,10954,10963,10968,10988,10992,10996,10999,11050,11054,11065,11069,11072,11077,11290,11294,11301,11371,11375,11395,11399,11402,11605,11609,11703,11706,11747,11751,11756,11779,11784,11808,11813,11830,11834,11837,11854,11857,11861,11864,11918,11920,11923,11926,11928],[30,8279,8280],{},"أصبح Nuxt أحد أكثر الأطر شيوعاً لبناء تطبيقات الويب الحديثة مع Vue.js. سواء كنت تقوم بإنشاء مدونة، موقع تجارة إلكترونية، أو تطبيق ويب معقد، يوفر Nuxt الأدوات والهيكل الذي تحتاجه لبناء مشاريع سريعة ومتوافقة مع SEO وسهلة الصيانة.",[30,8282,8283],{},"سيأخذك هذا الدليل الشامل من الصفر إلى الإنتاجية مع Nuxt، تغطية كل شيء من الإعداد الأساسي إلى الميزات المتقدمة وأفضل الممارسات.",[68,8285,8287],{"id":8286},"ما-هو-nuxt-ولماذا-يجب-استخدامه","ما هو Nuxt ولماذا يجب استخدامه؟",[30,8289,8290],{},"Nuxt هو إطار عمل مبني على Vue.js يضيف ميزات قوية للتطبيقات الجاهزة للإنتاج. فكر فيه كـ Vue.js مع قوى خارقة لبناء تطبيقات الويب الكاملة.",[73,8292,8294],{"id":8293},"الفوائد-الرئيسية","الفوائد الرئيسية",[30,8296,8297,8300],{},[37,8298,8299],{},"1. الرسم من جانب الخادم (SSR) جاهز","\nعلى عكس تطبيقات Vue التقليدية التي ترسم على العميل، يمكن لـ Nuxt رسم صفحاتك على الخادم، تسليم HTML مكتمل للمتصفح. هذا يعني:",[49,8302,8303,8306,8309],{},[52,8304,8305],{},"SEO أفضل (محركات البحث ترى محتواك الكامل فوراً)",[52,8307,8308],{},"تحميل صفحات أولي أسرع",[52,8310,8311],{},"أداء أفضل على الأجهزة البطيئة",[30,8313,8314,8317,8318,8321],{},[37,8315,8316],{},"2. التوجيه المبني على الملفات","\nلا حاجة لتكوين المسارات يدوياً. أنشئ ملف في مجلد ",[448,8319,8320],{},"pages","، وNuxt ينشئ مسار له تلقائياً:",[441,8323,8326],{"className":8324,"code":8325,"language":446},[444],"pages/\n  index.vue          → /\n  about.vue          → /about\n  blog/\n    index.vue        → /blog\n    [slug].vue       → /blog/:slug\n",[448,8327,8325],{"__ignoreMap":16},[30,8329,8330,8333],{},[37,8331,8332],{},"3. الاستيراد التلقائي","\nيستورد Nuxt تلقائياً المكونات والوظائف والأدوات. اكتب كود أقل:",[441,8335,8337],{"className":2980,"code":8336,"language":2982,"meta":16,"style":16},"\u003C!-- لا حاجة للاستيراد! -->\n\u003Cscript setup>\nconst count = ref(0)  // ref مستورد تلقائياً\nconst route = useRoute()  // useRoute مستورد تلقائياً\n\u003C/script>\n",[448,8338,8339,8344,8354,8374,8392],{"__ignoreMap":16},[1608,8340,8341],{"class":1785,"line":1786},[1608,8342,8343],{"class":1945},"\u003C!-- لا حاجة للاستيراد! -->\n",[1608,8345,8346,8348,8350,8352],{"class":1785,"line":1260},[1608,8347,2990],{"class":2989},[1608,8349,2994],{"class":2993},[1608,8351,2998],{"class":2997},[1608,8353,2072],{"class":2989},[1608,8355,8356,8358,8360,8362,8364,8366,8368,8371],{"class":1785,"line":17},[1608,8357,3059],{"class":1951},[1608,8359,3063],{"class":3062},[1608,8361,3066],{"class":1969},[1608,8363,3069],{"class":2017},[1608,8365,3072],{"class":1959},[1608,8367,3076],{"class":3075},[1608,8369,8370],{"class":1959},")  ",[1608,8372,8373],{"class":1945},"// ref مستورد تلقائياً\n",[1608,8375,8376,8378,8381,8383,8386,8389],{"class":1785,"line":1802},[1608,8377,3059],{"class":1951},[1608,8379,8380],{"class":3062}," route",[1608,8382,3066],{"class":1969},[1608,8384,8385],{"class":2017}," useRoute",[1608,8387,8388],{"class":1959},"()  ",[1608,8390,8391],{"class":1945},"// useRoute مستورد تلقائياً\n",[1608,8393,8394,8396,8398],{"class":1785,"line":1808},[1608,8395,2092],{"class":2989},[1608,8397,2994],{"class":2993},[1608,8399,2072],{"class":2989},[30,8401,8402],{},[37,8403,8404],{},"4. مبني على أدوات حديثة",[49,8406,8407,8413,8419,8426],{},[52,8408,8409,8412],{},[37,8410,8411],{},"Vite"," للتطوير السريع وإعادة التحميل الساخن (HMR)",[52,8414,8415,8418],{},[37,8416,8417],{},"Nitro"," لمحرك خادم قوي ومحمول",[52,8420,8421,8422,8425],{},"دعم ",[37,8423,8424],{},"TypeScript"," جاهز",[52,8427,8428,8431],{},[37,8429,8430],{},"Vue 3"," مع Composition API",[30,8433,8434,8437],{},[37,8435,8436],{},"5. أوضاع رسم مرنة","\nاختر النهج الأفضل لكل صفحة:",[49,8439,8440,8443,8446,8449],{},[52,8441,8442],{},"SSR (الرسم من جانب الخادم)",[52,8444,8445],{},"SPA (تطبيق صفحة واحدة)",[52,8447,8448],{},"SSG (توليد الموقع الثابت)",[52,8450,8451],{},"ISR (التجديد الثابت التدريجي)",[68,8453,8455],{"id":8454},"تثبيت-nuxt","تثبيت Nuxt",[73,8457,8459],{"id":8458},"المتطلبات-الأساسية","المتطلبات الأساسية",[30,8461,8462],{},"تأكد من تثبيت Node.js (الإصدار 18.0.0 أو أعلى). تحقق من إصدارك:",[441,8464,8468],{"className":8465,"code":8466,"language":8467,"meta":16,"style":16},"language-bash shiki shiki-themes github-light dark-plus dark-plus","node --version\n","bash",[448,8469,8470],{"__ignoreMap":16},[1608,8471,8472,8475],{"class":1785,"line":1786},[1608,8473,8474],{"class":2017},"node",[1608,8476,8477],{"class":5031}," --version\n",[73,8479,8481],{"id":8480},"إنشاء-مشروعك-الأول","إنشاء مشروعك الأول",[30,8483,8484],{},"افتح الطرفية وشغل:",[441,8486,8488],{"className":8465,"code":8487,"language":8467,"meta":16,"style":16},"npx nuxi@latest init my-app\n",[448,8489,8490],{"__ignoreMap":16},[1608,8491,8492,8495,8498,8501],{"class":1785,"line":1786},[1608,8493,8494],{"class":2017},"npx",[1608,8496,8497],{"class":2068}," nuxi@latest",[1608,8499,8500],{"class":2068}," init",[1608,8502,8503],{"class":2068}," my-app\n",[30,8505,8506],{},"سيتم سؤالك عن بعض الأسئلة:",[49,8508,8509,8512],{},[52,8510,8511],{},"مدير الحزم: اختر npm، yarn، pnpm، أو bun",[52,8513,8514],{},"تهيئة مستودع git: نعم/لا",[30,8516,8517],{},"بعد الإنشاء، انتقل إلى مشروعك وابدأ خادم التطوير:",[441,8519,8521],{"className":8465,"code":8520,"language":8467,"meta":16,"style":16},"cd my-app\nnpm install\nnpm run dev\n",[448,8522,8523,8531,8539],{"__ignoreMap":16},[1608,8524,8525,8529],{"class":1785,"line":1786},[1608,8526,8528],{"class":8527},"sNX3-","cd",[1608,8530,8503],{"class":2068},[1608,8532,8533,8536],{"class":1785,"line":1260},[1608,8534,8535],{"class":2017},"npm",[1608,8537,8538],{"class":2068}," install\n",[1608,8540,8541,8543,8546],{"class":1785,"line":17},[1608,8542,8535],{"class":2017},[1608,8544,8545],{"class":2068}," run",[1608,8547,8548],{"class":2068}," dev\n",[30,8550,8551,8552,8555],{},"افتح متصفحك على ",[448,8553,8554],{},"http://localhost:3000"," وسترى تطبيق Nuxt الجديد!",[73,8557,8559],{"id":8558},"هيكل-المشروع","هيكل المشروع",[30,8561,8562],{},"إليك ما ينشئه Nuxt لك:",[441,8564,8567],{"className":8565,"code":8566,"language":446},[444],"my-app/\n├── .nuxt/              # الملفات المولدة (لا تحرر)\n├── node_modules/       # التبعيات\n├── pages/              # صفحات التطبيق\n│   └── index.vue       # الصفحة الرئيسية (/)\n├── public/             # الملفات الثابتة\n├── server/             # مسارات API الخلفية\n├── app.vue             # المكون الجذر\n├── nuxt.config.ts      # تكوين Nuxt\n└── package.json        # بيانات المشروع\n",[448,8568,8566],{"__ignoreMap":16},[68,8570,8572],{"id":8571},"المفاهيم-الأساسية","المفاهيم الأساسية",[73,8574,8576],{"id":8575},"_1-الصفحات-والتوجيه","1. الصفحات والتوجيه",[30,8578,8579,8580,1970],{},"أنشئ ملف جديد في مجلد ",[448,8581,8320],{},[30,8583,8584],{},[37,8585,8586],{},"pages/about.vue",[441,8588,8590],{"className":2980,"code":8589,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\ndefinePageMeta({\n  title: 'من نحن'\n})\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>عن شركتنا\u003C/h1>\n    \u003Cp>نبني منتجات رائعة...\u003C/p>\n  \u003C/div>\n\u003C/template>\n",[448,8591,8592,8602,8609,8617,8621,8629,8633,8641,8649,8667,8684,8692],{"__ignoreMap":16},[1608,8593,8594,8596,8598,8600],{"class":1785,"line":1786},[1608,8595,2990],{"class":2989},[1608,8597,2994],{"class":2993},[1608,8599,2998],{"class":2997},[1608,8601,2072],{"class":2989},[1608,8603,8604,8607],{"class":1785,"line":1260},[1608,8605,8606],{"class":2017},"definePageMeta",[1608,8608,7166],{"class":1959},[1608,8610,8611,8614],{"class":1785,"line":17},[1608,8612,8613],{"class":2058},"  title:",[1608,8615,8616],{"class":2068}," 'من نحن'\n",[1608,8618,8619],{"class":1785,"line":1802},[1608,8620,3742],{"class":1959},[1608,8622,8623,8625,8627],{"class":1785,"line":1808},[1608,8624,2092],{"class":2989},[1608,8626,2994],{"class":2993},[1608,8628,2072],{"class":2989},[1608,8630,8631],{"class":1785,"line":1814},[1608,8632,1805],{"emptyLinePlaceholder":1305},[1608,8634,8635,8637,8639],{"class":1785,"line":1820},[1608,8636,2990],{"class":2989},[1608,8638,3303],{"class":2993},[1608,8640,2072],{"class":2989},[1608,8642,8643,8645,8647],{"class":1785,"line":1825},[1608,8644,3311],{"class":2989},[1608,8646,2059],{"class":2993},[1608,8648,2072],{"class":2989},[1608,8650,8651,8653,8656,8658,8661,8663,8665],{"class":1785,"line":1831},[1608,8652,2055],{"class":2989},[1608,8654,8655],{"class":2993},"h1",[1608,8657,3325],{"class":2989},[1608,8659,8660],{"class":1959},"عن شركتنا",[1608,8662,2092],{"class":2989},[1608,8664,8655],{"class":2993},[1608,8666,2072],{"class":2989},[1608,8668,8669,8671,8673,8675,8678,8680,8682],{"class":1785,"line":1333},[1608,8670,2055],{"class":2989},[1608,8672,30],{"class":2993},[1608,8674,3325],{"class":2989},[1608,8676,8677],{"class":1959},"نبني منتجات رائعة...",[1608,8679,2092],{"class":2989},[1608,8681,30],{"class":2993},[1608,8683,2072],{"class":2989},[1608,8685,8686,8688,8690],{"class":1785,"line":2075},[1608,8687,3405],{"class":2989},[1608,8689,2059],{"class":2993},[1608,8691,2072],{"class":2989},[1608,8693,8694,8696,8698],{"class":1785,"line":2099},[1608,8695,2092],{"class":2989},[1608,8697,3303],{"class":2993},[1608,8699,2072],{"class":2989},[30,8701,8702],{},[37,8703,8704],{},"المسارات الديناميكية:",[30,8706,8707],{},"أنشئ ملف مع أقواس للأجزاء الديناميكية:",[30,8709,8710],{},[37,8711,8712,8713,8716],{},"pages/blog/",[1608,8714,8715],{},"slug",".vue",[441,8718,8720],{"className":2980,"code":8719,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\nconst route = useRoute()\nconst slug = route.params.slug\n\n// جلب منشور المدونة بناءً على slug\nconst { data: post } = await useFetch(`/api/posts/${slug}`)\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Carticle>\n    \u003Ch1>{{ post.title }}\u003C/h1>\n    \u003Cdiv v-html=\"post.content\">\u003C/div>\n  \u003C/article>\n\u003C/template>\n",[448,8721,8722,8732,8744,8765,8769,8774,8812,8820,8824,8832,8841,8866,8895,8903],{"__ignoreMap":16},[1608,8723,8724,8726,8728,8730],{"class":1785,"line":1786},[1608,8725,2990],{"class":2989},[1608,8727,2994],{"class":2993},[1608,8729,2998],{"class":2997},[1608,8731,2072],{"class":2989},[1608,8733,8734,8736,8738,8740,8742],{"class":1785,"line":1260},[1608,8735,3059],{"class":1951},[1608,8737,8380],{"class":3062},[1608,8739,3066],{"class":1969},[1608,8741,8385],{"class":2017},[1608,8743,3801],{"class":1959},[1608,8745,8746,8748,8751,8753,8755,8757,8760,8762],{"class":1785,"line":17},[1608,8747,3059],{"class":1951},[1608,8749,8750],{"class":3062}," slug",[1608,8752,3066],{"class":1969},[1608,8754,8380],{"class":2058},[1608,8756,44],{"class":1959},[1608,8758,8759],{"class":2058},"params",[1608,8761,44],{"class":1959},[1608,8763,8764],{"class":2058},"slug\n",[1608,8766,8767],{"class":1785,"line":1802},[1608,8768,1805],{"emptyLinePlaceholder":1305},[1608,8770,8771],{"class":1785,"line":1808},[1608,8772,8773],{"class":1945},"// جلب منشور المدونة بناءً على slug\n",[1608,8775,8776,8778,8780,8783,8785,8788,8790,8792,8794,8797,8799,8802,8804,8806,8808,8810],{"class":1785,"line":1814},[1608,8777,3059],{"class":1951},[1608,8779,2032],{"class":1959},[1608,8781,8782],{"class":1965},"data",[1608,8784,4147],{"class":1959},[1608,8786,8787],{"class":3062},"post",[1608,8789,3037],{"class":1959},[1608,8791,2065],{"class":1969},[1608,8793,6920],{"class":2046},[1608,8795,8796],{"class":2017}," useFetch",[1608,8798,3072],{"class":1959},[1608,8800,8801],{"class":2068},"`/api/posts/",[1608,8803,3206],{"class":3205},[1608,8805,8715],{"class":2058},[1608,8807,2089],{"class":3205},[1608,8809,3222],{"class":2068},[1608,8811,2419],{"class":1959},[1608,8813,8814,8816,8818],{"class":1785,"line":1820},[1608,8815,2092],{"class":2989},[1608,8817,2994],{"class":2993},[1608,8819,2072],{"class":2989},[1608,8821,8822],{"class":1785,"line":1825},[1608,8823,1805],{"emptyLinePlaceholder":1305},[1608,8825,8826,8828,8830],{"class":1785,"line":1831},[1608,8827,2990],{"class":2989},[1608,8829,3303],{"class":2993},[1608,8831,2072],{"class":2989},[1608,8833,8834,8836,8839],{"class":1785,"line":1333},[1608,8835,3311],{"class":2989},[1608,8837,8838],{"class":2993},"article",[1608,8840,2072],{"class":2989},[1608,8842,8843,8845,8847,8849,8851,8853,8855,8858,8860,8862,8864],{"class":1785,"line":2075},[1608,8844,2055],{"class":2989},[1608,8846,8655],{"class":2993},[1608,8848,3325],{"class":2989},[1608,8850,6634],{"class":1959},[1608,8852,8787],{"class":2058},[1608,8854,44],{"class":1959},[1608,8856,8857],{"class":2058},"title",[1608,8859,3333],{"class":1959},[1608,8861,2092],{"class":2989},[1608,8863,8655],{"class":2993},[1608,8865,2072],{"class":2989},[1608,8867,8868,8870,8872,8875,8877,8879,8881,8883,8886,8888,8891,8893],{"class":1785,"line":2099},[1608,8869,2055],{"class":2989},[1608,8871,2059],{"class":2993},[1608,8873,8874],{"class":2997}," v-html",[1608,8876,2065],{"class":1959},[1608,8878,3381],{"class":3268},[1608,8880,8787],{"class":2058},[1608,8882,44],{"class":1959},[1608,8884,8885],{"class":2058},"content",[1608,8887,3381],{"class":3268},[1608,8889,8890],{"class":2989},">\u003C/",[1608,8892,2059],{"class":2993},[1608,8894,2072],{"class":2989},[1608,8896,8897,8899,8901],{"class":1785,"line":2119},[1608,8898,3405],{"class":2989},[1608,8900,8838],{"class":2993},[1608,8902,2072],{"class":2989},[1608,8904,8905,8907,8909],{"class":1785,"line":2129},[1608,8906,2092],{"class":2989},[1608,8908,3303],{"class":2993},[1608,8910,2072],{"class":2989},[73,8912,8914],{"id":8913},"_2-التخطيطات","2. التخطيطات",[30,8916,8917],{},"التخطيطات تغلف صفحاتك بهيكل مشترك (الرأس، التذييل، إلخ).",[30,8919,8920],{},[37,8921,8922],{},"layouts/default.vue",[441,8924,8926],{"className":2980,"code":8925,"language":2982,"meta":16,"style":16},"\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cheader>\n      \u003Cnav>\n        \u003CNuxtLink to=\"/\">الرئيسية\u003C/NuxtLink>\n        \u003CNuxtLink to=\"/about\">من نحن\u003C/NuxtLink>\n        \u003CNuxtLink to=\"/blog\">المدونة\u003C/NuxtLink>\n      \u003C/nav>\n    \u003C/header>\n    \n    \u003Cmain>\n      \u003C!-- محتوى صفحتك يأتي هنا -->\n      \u003Cslot />\n    \u003C/main>\n    \n    \u003Cfooter>\n      \u003Cp>&copy; 2025 تطبيقي\u003C/p>\n    \u003C/footer>\n  \u003C/div>\n\u003C/template>\n",[448,8927,8928,8936,8944,8953,8962,8989,9013,9037,9046,9054,9058,9067,9072,9082,9090,9094,9103,9123,9131,9139],{"__ignoreMap":16},[1608,8929,8930,8932,8934],{"class":1785,"line":1786},[1608,8931,2990],{"class":2989},[1608,8933,3303],{"class":2993},[1608,8935,2072],{"class":2989},[1608,8937,8938,8940,8942],{"class":1785,"line":1260},[1608,8939,3311],{"class":2989},[1608,8941,2059],{"class":2993},[1608,8943,2072],{"class":2989},[1608,8945,8946,8948,8951],{"class":1785,"line":17},[1608,8947,2055],{"class":2989},[1608,8949,8950],{"class":2993},"header",[1608,8952,2072],{"class":2989},[1608,8954,8955,8957,8960],{"class":1785,"line":1802},[1608,8956,2078],{"class":2989},[1608,8958,8959],{"class":2993},"nav",[1608,8961,2072],{"class":2989},[1608,8963,8964,8967,8970,8973,8975,8978,8980,8983,8985,8987],{"class":1785,"line":1808},[1608,8965,8966],{"class":2989},"        \u003C",[1608,8968,8969],{"class":2993},"NuxtLink",[1608,8971,8972],{"class":2997}," to",[1608,8974,2065],{"class":1959},[1608,8976,8977],{"class":2068},"\"/\"",[1608,8979,3325],{"class":2989},[1608,8981,8982],{"class":1959},"الرئيسية",[1608,8984,2092],{"class":2989},[1608,8986,8969],{"class":2993},[1608,8988,2072],{"class":2989},[1608,8990,8991,8993,8995,8997,8999,9002,9004,9007,9009,9011],{"class":1785,"line":1814},[1608,8992,8966],{"class":2989},[1608,8994,8969],{"class":2993},[1608,8996,8972],{"class":2997},[1608,8998,2065],{"class":1959},[1608,9000,9001],{"class":2068},"\"/about\"",[1608,9003,3325],{"class":2989},[1608,9005,9006],{"class":1959},"من نحن",[1608,9008,2092],{"class":2989},[1608,9010,8969],{"class":2993},[1608,9012,2072],{"class":2989},[1608,9014,9015,9017,9019,9021,9023,9026,9028,9031,9033,9035],{"class":1785,"line":1820},[1608,9016,8966],{"class":2989},[1608,9018,8969],{"class":2993},[1608,9020,8972],{"class":2997},[1608,9022,2065],{"class":1959},[1608,9024,9025],{"class":2068},"\"/blog\"",[1608,9027,3325],{"class":2989},[1608,9029,9030],{"class":1959},"المدونة",[1608,9032,2092],{"class":2989},[1608,9034,8969],{"class":2993},[1608,9036,2072],{"class":2989},[1608,9038,9039,9042,9044],{"class":1785,"line":1825},[1608,9040,9041],{"class":2989},"      \u003C/",[1608,9043,8959],{"class":2993},[1608,9045,2072],{"class":2989},[1608,9047,9048,9050,9052],{"class":1785,"line":1831},[1608,9049,2122],{"class":2989},[1608,9051,8950],{"class":2993},[1608,9053,2072],{"class":2989},[1608,9055,9056],{"class":1785,"line":1333},[1608,9057,2249],{"class":1959},[1608,9059,9060,9062,9065],{"class":1785,"line":2075},[1608,9061,2055],{"class":2989},[1608,9063,9064],{"class":2993},"main",[1608,9066,2072],{"class":2989},[1608,9068,9069],{"class":1785,"line":2099},[1608,9070,9071],{"class":1945},"      \u003C!-- محتوى صفحتك يأتي هنا -->\n",[1608,9073,9074,9076,9078,9080],{"class":1785,"line":2119},[1608,9075,2078],{"class":2989},[1608,9077,4713],{"class":2993},[1608,9079,4744],{"class":4743},[1608,9081,2072],{"class":2989},[1608,9083,9084,9086,9088],{"class":1785,"line":2129},[1608,9085,2122],{"class":2989},[1608,9087,9064],{"class":2993},[1608,9089,2072],{"class":2989},[1608,9091,9092],{"class":1785,"line":1635},[1608,9093,2249],{"class":1959},[1608,9095,9096,9098,9101],{"class":1785,"line":2296},[1608,9097,2055],{"class":2989},[1608,9099,9100],{"class":2993},"footer",[1608,9102,2072],{"class":2989},[1608,9104,9105,9107,9109,9111,9114,9117,9119,9121],{"class":1785,"line":2302},[1608,9106,2078],{"class":2989},[1608,9108,30],{"class":2993},[1608,9110,3325],{"class":2989},[1608,9112,9113],{"class":5031},"&copy;",[1608,9115,9116],{"class":1959}," 2025 تطبيقي",[1608,9118,2092],{"class":2989},[1608,9120,30],{"class":2993},[1608,9122,2072],{"class":2989},[1608,9124,9125,9127,9129],{"class":1785,"line":2308},[1608,9126,2122],{"class":2989},[1608,9128,9100],{"class":2993},[1608,9130,2072],{"class":2989},[1608,9132,9133,9135,9137],{"class":1785,"line":3279},[1608,9134,3405],{"class":2989},[1608,9136,2059],{"class":2993},[1608,9138,2072],{"class":2989},[1608,9140,9141,9143,9145],{"class":1785,"line":3284},[1608,9142,2092],{"class":2989},[1608,9144,3303],{"class":2993},[1608,9146,2072],{"class":2989},[30,9148,9149],{},"استخدمه في صفحة:",[441,9151,9153],{"className":2980,"code":9152,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\ndefinePageMeta({\n  layout: 'default'\n})\n\u003C/script>\n",[448,9154,9155,9165,9171,9179,9183],{"__ignoreMap":16},[1608,9156,9157,9159,9161,9163],{"class":1785,"line":1786},[1608,9158,2990],{"class":2989},[1608,9160,2994],{"class":2993},[1608,9162,2998],{"class":2997},[1608,9164,2072],{"class":2989},[1608,9166,9167,9169],{"class":1785,"line":1260},[1608,9168,8606],{"class":2017},[1608,9170,7166],{"class":1959},[1608,9172,9173,9176],{"class":1785,"line":17},[1608,9174,9175],{"class":2058},"  layout:",[1608,9177,9178],{"class":2068}," 'default'\n",[1608,9180,9181],{"class":1785,"line":1802},[1608,9182,3742],{"class":1959},[1608,9184,9185,9187,9189],{"class":1785,"line":1808},[1608,9186,2092],{"class":2989},[1608,9188,2994],{"class":2993},[1608,9190,2072],{"class":2989},[73,9192,9194],{"id":9193},"_3-المكونات","3. المكونات",[30,9196,9197,9198,9201],{},"المكونات في مجلد ",[448,9199,9200],{},"components"," مستوردة تلقائياً:",[30,9203,9204],{},[37,9205,9206],{},"components/Button.vue",[441,9208,9210],{"className":2980,"code":9209,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\ndefineProps\u003C{\n  label: string\n  variant?: 'primary' | 'secondary'\n}>()\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cbutton :class=\"variant\">\n    {{ label }}\n  \u003C/button>\n\u003C/template>\n\n\u003Cstyle scoped>\n.primary {\n  background: #f97216;\n  color: white;\n}\n.secondary {\n  background: #6b7280;\n  color: white;\n}\n\u003C/style>\n",[448,9211,9212,9222,9229,9237,9252,9256,9264,9268,9276,9297,9306,9314,9322,9326,9337,9345,9359,9371,9375,9382,9393,9403,9407],{"__ignoreMap":16},[1608,9213,9214,9216,9218,9220],{"class":1785,"line":1786},[1608,9215,2990],{"class":2989},[1608,9217,2994],{"class":2993},[1608,9219,2998],{"class":2997},[1608,9221,2072],{"class":2989},[1608,9223,9224,9227],{"class":1785,"line":1260},[1608,9225,9226],{"class":2017},"defineProps",[1608,9228,4131],{"class":1959},[1608,9230,9231,9233,9235],{"class":1785,"line":17},[1608,9232,4064],{"class":1965},[1608,9234,1970],{"class":1969},[1608,9236,4069],{"class":1973},[1608,9238,9239,9242,9244,9247,9249],{"class":1785,"line":1802},[1608,9240,9241],{"class":1965},"  variant",[1608,9243,4086],{"class":1969},[1608,9245,9246],{"class":2068}," 'primary'",[1608,9248,5871],{"class":1969},[1608,9250,9251],{"class":2068}," 'secondary'\n",[1608,9253,9254],{"class":1785,"line":1808},[1608,9255,4158],{"class":1959},[1608,9257,9258,9260,9262],{"class":1785,"line":1814},[1608,9259,2092],{"class":2989},[1608,9261,2994],{"class":2993},[1608,9263,2072],{"class":2989},[1608,9265,9266],{"class":1785,"line":1820},[1608,9267,1805],{"emptyLinePlaceholder":1305},[1608,9269,9270,9272,9274],{"class":1785,"line":1825},[1608,9271,2990],{"class":2989},[1608,9273,3303],{"class":2993},[1608,9275,2072],{"class":2989},[1608,9277,9278,9280,9282,9284,9286,9288,9290,9293,9295],{"class":1785,"line":1831},[1608,9279,3311],{"class":2989},[1608,9281,3370],{"class":2993},[1608,9283,4716],{"class":1959},[1608,9285,4361],{"class":2997},[1608,9287,2065],{"class":1959},[1608,9289,3381],{"class":3268},[1608,9291,9292],{"class":2058},"variant",[1608,9294,3381],{"class":3268},[1608,9296,2072],{"class":2989},[1608,9298,9299,9302,9304],{"class":1785,"line":1333},[1608,9300,9301],{"class":1959},"    {{ ",[1608,9303,4265],{"class":2058},[1608,9305,4284],{"class":1959},[1608,9307,9308,9310,9312],{"class":1785,"line":2075},[1608,9309,3405],{"class":2989},[1608,9311,3370],{"class":2993},[1608,9313,2072],{"class":2989},[1608,9315,9316,9318,9320],{"class":1785,"line":2099},[1608,9317,2092],{"class":2989},[1608,9319,3303],{"class":2993},[1608,9321,2072],{"class":2989},[1608,9323,9324],{"class":1785,"line":2119},[1608,9325,1805],{"emptyLinePlaceholder":1305},[1608,9327,9328,9330,9332,9335],{"class":1785,"line":2129},[1608,9329,2990],{"class":2989},[1608,9331,2846],{"class":2993},[1608,9333,9334],{"class":2997}," scoped",[1608,9336,2072],{"class":2989},[1608,9338,9339,9343],{"class":1785,"line":1635},[1608,9340,9342],{"class":9341},"sO3gw",".primary",[1608,9344,1960],{"class":1959},[1608,9346,9347,9351,9353,9357],{"class":1785,"line":2296},[1608,9348,9350],{"class":9349},"sps74","  background",[1608,9352,4147],{"class":1959},[1608,9354,9356],{"class":9355},"sqBZk","#f97216",[1608,9358,1977],{"class":1959},[1608,9360,9361,9364,9366,9369],{"class":1785,"line":2302},[1608,9362,9363],{"class":9349},"  color",[1608,9365,4147],{"class":1959},[1608,9367,9368],{"class":9355},"white",[1608,9370,1977],{"class":1959},[1608,9372,9373],{"class":1785,"line":2308},[1608,9374,2005],{"class":1959},[1608,9376,9377,9380],{"class":1785,"line":3279},[1608,9378,9379],{"class":9341},".secondary",[1608,9381,1960],{"class":1959},[1608,9383,9384,9386,9388,9391],{"class":1785,"line":3284},[1608,9385,9350],{"class":9349},[1608,9387,4147],{"class":1959},[1608,9389,9390],{"class":9355},"#6b7280",[1608,9392,1977],{"class":1959},[1608,9394,9395,9397,9399,9401],{"class":1785,"line":3293},[1608,9396,9363],{"class":9349},[1608,9398,4147],{"class":1959},[1608,9400,9368],{"class":9355},[1608,9402,1977],{"class":1959},[1608,9404,9405],{"class":1785,"line":3298},[1608,9406,2005],{"class":1959},[1608,9408,9409,9411,9413],{"class":1785,"line":3308},[1608,9410,2092],{"class":2989},[1608,9412,2846],{"class":2993},[1608,9414,2072],{"class":2989},[30,9416,9417],{},"استخدمه في أي مكان بدون استيراد:",[441,9419,9421],{"className":2980,"code":9420,"language":2982,"meta":16,"style":16},"\u003Ctemplate>\n  \u003CButton label=\"اضغطني\" variant=\"primary\" />\n\u003C/template>\n",[448,9422,9423,9431,9458],{"__ignoreMap":16},[1608,9424,9425,9427,9429],{"class":1785,"line":1786},[1608,9426,2990],{"class":2989},[1608,9428,3303],{"class":2993},[1608,9430,2072],{"class":2989},[1608,9432,9433,9435,9438,9441,9443,9446,9449,9451,9454,9456],{"class":1785,"line":1260},[1608,9434,3311],{"class":2989},[1608,9436,9437],{"class":2993},"Button",[1608,9439,9440],{"class":2997}," label",[1608,9442,2065],{"class":1959},[1608,9444,9445],{"class":2068},"\"اضغطني\"",[1608,9447,9448],{"class":2997}," variant",[1608,9450,2065],{"class":1959},[1608,9452,9453],{"class":2068},"\"primary\"",[1608,9455,4744],{"class":4743},[1608,9457,2072],{"class":2989},[1608,9459,9460,9462,9464],{"class":1785,"line":17},[1608,9461,2092],{"class":2989},[1608,9463,3303],{"class":2993},[1608,9465,2072],{"class":2989},[73,9467,9469],{"id":9468},"_4-جلب-البيانات","4. جلب البيانات",[30,9471,9472],{},"يوفر Nuxt وظائف قوية لجلب البيانات:",[30,9474,9475],{},[37,9476,9477],{},"useFetch - للـ APIs الخارجية",[441,9479,9481],{"className":2980,"code":9480,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\n// يجلب تلقائياً على الخادم والعميل\nconst { data: users, pending, error } = await useFetch('https://api.example.com/users')\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cp v-if=\"pending\">جاري التحميل...\u003C/p>\n    \u003Cp v-else-if=\"error\">خطأ: {{ error.message }}\u003C/p>\n    \u003Cul v-else>\n      \u003Cli v-for=\"user in users\" :key=\"user.id\">\n        {{ user.name }}\n      \u003C/li>\n    \u003C/ul>\n  \u003C/div>\n\u003C/template>\n",[448,9482,9483,9493,9498,9535,9543,9547,9555,9563,9590,9626,9636,9674,9687,9695,9703,9711],{"__ignoreMap":16},[1608,9484,9485,9487,9489,9491],{"class":1785,"line":1786},[1608,9486,2990],{"class":2989},[1608,9488,2994],{"class":2993},[1608,9490,2998],{"class":2997},[1608,9492,2072],{"class":2989},[1608,9494,9495],{"class":1785,"line":1260},[1608,9496,9497],{"class":1945},"// يجلب تلقائياً على الخادم والعميل\n",[1608,9499,9500,9502,9504,9506,9508,9511,9513,9516,9518,9520,9522,9524,9526,9528,9530,9533],{"class":1785,"line":17},[1608,9501,3059],{"class":1951},[1608,9503,2032],{"class":1959},[1608,9505,8782],{"class":1965},[1608,9507,4147],{"class":1959},[1608,9509,9510],{"class":3062},"users",[1608,9512,3020],{"class":1959},[1608,9514,9515],{"class":3062},"pending",[1608,9517,3020],{"class":1959},[1608,9519,4198],{"class":3062},[1608,9521,3037],{"class":1959},[1608,9523,2065],{"class":1969},[1608,9525,6920],{"class":2046},[1608,9527,8796],{"class":2017},[1608,9529,3072],{"class":1959},[1608,9531,9532],{"class":2068},"'https://api.example.com/users'",[1608,9534,2419],{"class":1959},[1608,9536,9537,9539,9541],{"class":1785,"line":1802},[1608,9538,2092],{"class":2989},[1608,9540,2994],{"class":2993},[1608,9542,2072],{"class":2989},[1608,9544,9545],{"class":1785,"line":1808},[1608,9546,1805],{"emptyLinePlaceholder":1305},[1608,9548,9549,9551,9553],{"class":1785,"line":1814},[1608,9550,2990],{"class":2989},[1608,9552,3303],{"class":2993},[1608,9554,2072],{"class":2989},[1608,9556,9557,9559,9561],{"class":1785,"line":1820},[1608,9558,3311],{"class":2989},[1608,9560,2059],{"class":2993},[1608,9562,2072],{"class":2989},[1608,9564,9565,9567,9569,9571,9573,9575,9577,9579,9581,9584,9586,9588],{"class":1785,"line":1825},[1608,9566,2055],{"class":2989},[1608,9568,30],{"class":2993},[1608,9570,4394],{"class":2046},[1608,9572,2065],{"class":1959},[1608,9574,3381],{"class":3268},[1608,9576,9515],{"class":2058},[1608,9578,3381],{"class":3268},[1608,9580,3325],{"class":2989},[1608,9582,9583],{"class":1959},"جاري التحميل...",[1608,9585,2092],{"class":2989},[1608,9587,30],{"class":2993},[1608,9589,2072],{"class":2989},[1608,9591,9592,9594,9596,9599,9601,9603,9605,9607,9609,9612,9614,9616,9618,9620,9622,9624],{"class":1785,"line":1831},[1608,9593,2055],{"class":2989},[1608,9595,30],{"class":2993},[1608,9597,9598],{"class":2046}," v-else-if",[1608,9600,2065],{"class":1959},[1608,9602,3381],{"class":3268},[1608,9604,4198],{"class":2058},[1608,9606,3381],{"class":3268},[1608,9608,3325],{"class":2989},[1608,9610,9611],{"class":1959},"خطأ: {{ ",[1608,9613,4198],{"class":2058},[1608,9615,44],{"class":1959},[1608,9617,6641],{"class":2058},[1608,9619,3333],{"class":1959},[1608,9621,2092],{"class":2989},[1608,9623,30],{"class":2993},[1608,9625,2072],{"class":2989},[1608,9627,9628,9630,9632,9634],{"class":1785,"line":1333},[1608,9629,2055],{"class":2989},[1608,9631,49],{"class":2993},[1608,9633,6699],{"class":2046},[1608,9635,2072],{"class":2989},[1608,9637,9638,9640,9642,9644,9646,9648,9650,9652,9654,9656,9658,9660,9662,9664,9666,9668,9670,9672],{"class":1785,"line":2075},[1608,9639,2078],{"class":2989},[1608,9641,52],{"class":2993},[1608,9643,5333],{"class":2046},[1608,9645,2065],{"class":1959},[1608,9647,3381],{"class":3268},[1608,9649,2024],{"class":2058},[1608,9651,5343],{"class":1951},[1608,9653,5888],{"class":2058},[1608,9655,3381],{"class":3268},[1608,9657,4716],{"class":1959},[1608,9659,4815],{"class":2997},[1608,9661,2065],{"class":1959},[1608,9663,3381],{"class":3268},[1608,9665,2024],{"class":2058},[1608,9667,44],{"class":1959},[1608,9669,5363],{"class":2058},[1608,9671,3381],{"class":3268},[1608,9673,2072],{"class":2989},[1608,9675,9676,9679,9681,9683,9685],{"class":1785,"line":2099},[1608,9677,9678],{"class":1959},"        {{ ",[1608,9680,2024],{"class":2058},[1608,9682,44],{"class":1959},[1608,9684,2086],{"class":2058},[1608,9686,4284],{"class":1959},[1608,9688,9689,9691,9693],{"class":1785,"line":2119},[1608,9690,9041],{"class":2989},[1608,9692,52],{"class":2993},[1608,9694,2072],{"class":2989},[1608,9696,9697,9699,9701],{"class":1785,"line":2129},[1608,9698,2122],{"class":2989},[1608,9700,49],{"class":2993},[1608,9702,2072],{"class":2989},[1608,9704,9705,9707,9709],{"class":1785,"line":1635},[1608,9706,3405],{"class":2989},[1608,9708,2059],{"class":2993},[1608,9710,2072],{"class":2989},[1608,9712,9713,9715,9717],{"class":1785,"line":2296},[1608,9714,2092],{"class":2989},[1608,9716,3303],{"class":2993},[1608,9718,2072],{"class":2989},[30,9720,9721],{},[37,9722,9723],{},"useAsyncData - للمزيد من التحكم",[441,9725,9727],{"className":2980,"code":9726,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\nconst { data: products } = await useAsyncData('products', async () => {\n  // منطق جلب مخصص\n  const response = await $fetch('/api/products', {\n    params: { category: 'electronics' }\n  })\n  return response.data\n})\n\u003C/script>\n",[448,9728,9729,9739,9775,9780,9802,9818,9822,9833,9837],{"__ignoreMap":16},[1608,9730,9731,9733,9735,9737],{"class":1785,"line":1786},[1608,9732,2990],{"class":2989},[1608,9734,2994],{"class":2993},[1608,9736,2998],{"class":2997},[1608,9738,2072],{"class":2989},[1608,9740,9741,9743,9745,9747,9749,9752,9754,9756,9758,9760,9762,9765,9767,9769,9771,9773],{"class":1785,"line":1260},[1608,9742,3059],{"class":1951},[1608,9744,2032],{"class":1959},[1608,9746,8782],{"class":1965},[1608,9748,4147],{"class":1959},[1608,9750,9751],{"class":3062},"products",[1608,9753,3037],{"class":1959},[1608,9755,2065],{"class":1969},[1608,9757,6920],{"class":2046},[1608,9759,6756],{"class":2017},[1608,9761,3072],{"class":1959},[1608,9763,9764],{"class":2068},"'products'",[1608,9766,3020],{"class":1959},[1608,9768,6143],{"class":1951},[1608,9770,5463],{"class":1959},[1608,9772,3137],{"class":1951},[1608,9774,1960],{"class":1959},[1608,9776,9777],{"class":1785,"line":17},[1608,9778,9779],{"class":1945},"  // منطق جلب مخصص\n",[1608,9781,9782,9784,9787,9789,9791,9794,9796,9799],{"class":1785,"line":1802},[1608,9783,3516],{"class":1951},[1608,9785,9786],{"class":3062}," response",[1608,9788,3066],{"class":1969},[1608,9790,6920],{"class":2046},[1608,9792,9793],{"class":2017}," $fetch",[1608,9795,3072],{"class":1959},[1608,9797,9798],{"class":2068},"'/api/products'",[1608,9800,9801],{"class":1959},", {\n",[1608,9803,9804,9807,9809,9812,9815],{"class":1785,"line":1808},[1608,9805,9806],{"class":2058},"    params:",[1608,9808,2032],{"class":1959},[1608,9810,9811],{"class":2058},"category:",[1608,9813,9814],{"class":2068}," 'electronics'",[1608,9816,9817],{"class":1959}," }\n",[1608,9819,9820],{"class":1785,"line":1814},[1608,9821,5171],{"class":1959},[1608,9823,9824,9826,9828,9830],{"class":1785,"line":1820},[1608,9825,2047],{"class":2046},[1608,9827,9786],{"class":2058},[1608,9829,44],{"class":1959},[1608,9831,9832],{"class":2058},"data\n",[1608,9834,9835],{"class":1785,"line":1825},[1608,9836,3742],{"class":1959},[1608,9838,9839,9841,9843],{"class":1785,"line":1831},[1608,9840,2092],{"class":2989},[1608,9842,2994],{"class":2993},[1608,9844,2072],{"class":2989},[30,9846,9847],{},[37,9848,9849],{},"useLazyFetch - للتحميل من جانب العميل",[441,9851,9853],{"className":2980,"code":9852,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\n// لا يحجب رسم الصفحة\nconst { data, pending } = useLazyFetch('/api/heavy-data')\n\u003C/script>\n",[448,9854,9855,9865,9870,9896],{"__ignoreMap":16},[1608,9856,9857,9859,9861,9863],{"class":1785,"line":1786},[1608,9858,2990],{"class":2989},[1608,9860,2994],{"class":2993},[1608,9862,2998],{"class":2997},[1608,9864,2072],{"class":2989},[1608,9866,9867],{"class":1785,"line":1260},[1608,9868,9869],{"class":1945},"// لا يحجب رسم الصفحة\n",[1608,9871,9872,9874,9876,9878,9880,9882,9884,9886,9889,9891,9894],{"class":1785,"line":17},[1608,9873,3059],{"class":1951},[1608,9875,2032],{"class":1959},[1608,9877,8782],{"class":3062},[1608,9879,3020],{"class":1959},[1608,9881,9515],{"class":3062},[1608,9883,3037],{"class":1959},[1608,9885,2065],{"class":1969},[1608,9887,9888],{"class":2017}," useLazyFetch",[1608,9890,3072],{"class":1959},[1608,9892,9893],{"class":2068},"'/api/heavy-data'",[1608,9895,2419],{"class":1959},[1608,9897,9898,9900,9902],{"class":1785,"line":1802},[1608,9899,2092],{"class":2989},[1608,9901,2994],{"class":2993},[1608,9903,2072],{"class":2989},[73,9905,9907],{"id":9906},"_5-مسارات-الخادم-api","5. مسارات الخادم (API)",[30,9909,9910,9911,1970],{},"أنشئ نقاط نهاية خلفية في مجلد ",[448,9912,9913],{},"server/api",[30,9915,9916],{},[37,9917,9918],{},"server/api/hello.ts",[441,9920,9922],{"className":1936,"code":9921,"language":1938,"meta":16,"style":16},"export default defineEventHandler(() => {\n  return {\n    message: 'مرحباً من الخادم!',\n    timestamp: new Date().toISOString()\n  }\n})\n",[448,9923,9924,9939,9945,9955,9974,9978],{"__ignoreMap":16},[1608,9925,9926,9928,9930,9933,9935,9937],{"class":1785,"line":1786},[1608,9927,3483],{"class":2046},[1608,9929,7160],{"class":2046},[1608,9931,9932],{"class":2017}," defineEventHandler",[1608,9934,3134],{"class":1959},[1608,9936,3137],{"class":1951},[1608,9938,1960],{"class":1959},[1608,9940,9941,9943],{"class":1785,"line":1260},[1608,9942,2047],{"class":2046},[1608,9944,1960],{"class":1959},[1608,9946,9947,9950,9953],{"class":1785,"line":17},[1608,9948,9949],{"class":2058},"    message:",[1608,9951,9952],{"class":2068}," 'مرحباً من الخادم!'",[1608,9954,3694],{"class":1959},[1608,9956,9957,9960,9963,9966,9969,9972],{"class":1785,"line":1802},[1608,9958,9959],{"class":2058},"    timestamp:",[1608,9961,9962],{"class":1951}," new",[1608,9964,9965],{"class":2017}," Date",[1608,9967,9968],{"class":1959},"().",[1608,9970,9971],{"class":2017},"toISOString",[1608,9973,3801],{"class":1959},[1608,9975,9976],{"class":1785,"line":1808},[1608,9977,3619],{"class":1959},[1608,9979,9980],{"class":1785,"line":1814},[1608,9981,3742],{"class":1959},[30,9983,9984],{},"وصولها من الواجهة الأمامية:",[441,9986,9988],{"className":2980,"code":9987,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\nconst { data } = await useFetch('/api/hello')\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cp>{{ data.message }}\u003C/p>\n\u003C/template>\n",[448,9989,9990,10000,10023,10031,10035,10043,10067],{"__ignoreMap":16},[1608,9991,9992,9994,9996,9998],{"class":1785,"line":1786},[1608,9993,2990],{"class":2989},[1608,9995,2994],{"class":2993},[1608,9997,2998],{"class":2997},[1608,9999,2072],{"class":2989},[1608,10001,10002,10004,10006,10008,10010,10012,10014,10016,10018,10021],{"class":1785,"line":1260},[1608,10003,3059],{"class":1951},[1608,10005,2032],{"class":1959},[1608,10007,8782],{"class":3062},[1608,10009,3037],{"class":1959},[1608,10011,2065],{"class":1969},[1608,10013,6920],{"class":2046},[1608,10015,8796],{"class":2017},[1608,10017,3072],{"class":1959},[1608,10019,10020],{"class":2068},"'/api/hello'",[1608,10022,2419],{"class":1959},[1608,10024,10025,10027,10029],{"class":1785,"line":17},[1608,10026,2092],{"class":2989},[1608,10028,2994],{"class":2993},[1608,10030,2072],{"class":2989},[1608,10032,10033],{"class":1785,"line":1802},[1608,10034,1805],{"emptyLinePlaceholder":1305},[1608,10036,10037,10039,10041],{"class":1785,"line":1808},[1608,10038,2990],{"class":2989},[1608,10040,3303],{"class":2993},[1608,10042,2072],{"class":2989},[1608,10044,10045,10047,10049,10051,10053,10055,10057,10059,10061,10063,10065],{"class":1785,"line":1814},[1608,10046,3311],{"class":2989},[1608,10048,30],{"class":2993},[1608,10050,3325],{"class":2989},[1608,10052,6634],{"class":1959},[1608,10054,8782],{"class":2058},[1608,10056,44],{"class":1959},[1608,10058,6641],{"class":2058},[1608,10060,3333],{"class":1959},[1608,10062,2092],{"class":2989},[1608,10064,30],{"class":2993},[1608,10066,2072],{"class":2989},[1608,10068,10069,10071,10073],{"class":1785,"line":1820},[1608,10070,2092],{"class":2989},[1608,10072,3303],{"class":2993},[1608,10074,2072],{"class":2989},[30,10076,10077],{},[37,10078,10079],{},"مع المعاملات:",[30,10081,10082],{},[37,10083,10084,10085,10087],{},"server/api/users/",[1608,10086,5363],{},".ts",[441,10089,10091],{"className":1936,"code":10090,"language":1938,"meta":16,"style":16},"export default defineEventHandler((event) => {\n  const id = getRouterParam(event, 'id')\n  \n  // جلب المستخدم من قاعدة البيانات\n  return {\n    id,\n    name: 'John Doe',\n    email: 'john@example.com'\n  }\n})\n",[448,10092,10093,10112,10135,10140,10145,10151,10158,10168,10176,10180],{"__ignoreMap":16},[1608,10094,10095,10097,10099,10101,10104,10106,10108,10110],{"class":1785,"line":1786},[1608,10096,3483],{"class":2046},[1608,10098,7160],{"class":2046},[1608,10100,9932],{"class":2017},[1608,10102,10103],{"class":1959},"((",[1608,10105,4557],{"class":1965},[1608,10107,3183],{"class":1959},[1608,10109,3137],{"class":1951},[1608,10111,1960],{"class":1959},[1608,10113,10114,10116,10119,10121,10124,10126,10128,10130,10133],{"class":1785,"line":1260},[1608,10115,3516],{"class":1951},[1608,10117,10118],{"class":3062}," id",[1608,10120,3066],{"class":1969},[1608,10122,10123],{"class":2017}," getRouterParam",[1608,10125,3072],{"class":1959},[1608,10127,4557],{"class":2058},[1608,10129,3020],{"class":1959},[1608,10131,10132],{"class":2068},"'id'",[1608,10134,2419],{"class":1959},[1608,10136,10137],{"class":1785,"line":17},[1608,10138,10139],{"class":1959},"  \n",[1608,10141,10142],{"class":1785,"line":1802},[1608,10143,10144],{"class":1945},"  // جلب المستخدم من قاعدة البيانات\n",[1608,10146,10147,10149],{"class":1785,"line":1808},[1608,10148,2047],{"class":2046},[1608,10150,1960],{"class":1959},[1608,10152,10153,10156],{"class":1785,"line":1814},[1608,10154,10155],{"class":2058},"    id",[1608,10157,3694],{"class":1959},[1608,10159,10160,10163,10166],{"class":1785,"line":1820},[1608,10161,10162],{"class":2058},"    name:",[1608,10164,10165],{"class":2068}," 'John Doe'",[1608,10167,3694],{"class":1959},[1608,10169,10170,10173],{"class":1785,"line":1825},[1608,10171,10172],{"class":2058},"    email:",[1608,10174,10175],{"class":2068}," 'john@example.com'\n",[1608,10177,10178],{"class":1785,"line":1831},[1608,10179,3619],{"class":1959},[1608,10181,10182],{"class":1785,"line":1333},[1608,10183,3742],{"class":1959},[73,10185,10187],{"id":10186},"_6-الوظائف","6. الوظائف",[30,10189,10190],{},"الوظائف هي وظائف قابلة لإعادة الاستخدام تغلف منطق تفاعلي:",[30,10192,10193],{},[37,10194,10195],{},"composables/useCounter.ts",[441,10197,10199],{"className":1936,"code":10198,"language":1938,"meta":16,"style":16},"export const useCounter = (initialValue = 0) => {\n  const count = ref(initialValue)\n  \n  const increment = () => count.value++\n  const decrement = () => count.value--\n  const reset = () => count.value = initialValue\n  \n  return {\n    count: readonly(count),\n    increment,\n    decrement,\n    reset\n  }\n}\n",[448,10200,10201,10227,10243,10247,10267,10287,10310,10314,10320,10334,10340,10346,10350,10354],{"__ignoreMap":16},[1608,10202,10203,10205,10207,10209,10211,10213,10216,10218,10221,10223,10225],{"class":1785,"line":1786},[1608,10204,3483],{"class":2046},[1608,10206,3486],{"class":1951},[1608,10208,6359],{"class":2017},[1608,10210,3066],{"class":1969},[1608,10212,4554],{"class":1959},[1608,10214,10215],{"class":1965},"initialValue",[1608,10217,3066],{"class":1969},[1608,10219,10220],{"class":3075}," 0",[1608,10222,3183],{"class":1959},[1608,10224,3137],{"class":1951},[1608,10226,1960],{"class":1959},[1608,10228,10229,10231,10233,10235,10237,10239,10241],{"class":1785,"line":1260},[1608,10230,3516],{"class":1951},[1608,10232,3063],{"class":3062},[1608,10234,3066],{"class":1969},[1608,10236,3069],{"class":2017},[1608,10238,3072],{"class":1959},[1608,10240,10215],{"class":2058},[1608,10242,2419],{"class":1959},[1608,10244,10245],{"class":1785,"line":17},[1608,10246,10139],{"class":1959},[1608,10248,10249,10251,10253,10255,10257,10259,10261,10263,10265],{"class":1785,"line":1802},[1608,10250,3516],{"class":1951},[1608,10252,3599],{"class":2017},[1608,10254,3066],{"class":1969},[1608,10256,5463],{"class":1959},[1608,10258,3137],{"class":1951},[1608,10260,3063],{"class":2058},[1608,10262,44],{"class":1959},[1608,10264,3144],{"class":2058},[1608,10266,3614],{"class":1969},[1608,10268,10269,10271,10273,10275,10277,10279,10281,10283,10285],{"class":1785,"line":1808},[1608,10270,3516],{"class":1951},[1608,10272,3630],{"class":2017},[1608,10274,3066],{"class":1969},[1608,10276,5463],{"class":1959},[1608,10278,3137],{"class":1951},[1608,10280,3063],{"class":2058},[1608,10282,44],{"class":1959},[1608,10284,3144],{"class":2058},[1608,10286,3643],{"class":1969},[1608,10288,10289,10291,10293,10295,10297,10299,10301,10303,10305,10307],{"class":1785,"line":1814},[1608,10290,3516],{"class":1951},[1608,10292,3658],{"class":2017},[1608,10294,3066],{"class":1969},[1608,10296,5463],{"class":1959},[1608,10298,3137],{"class":1951},[1608,10300,3063],{"class":2058},[1608,10302,44],{"class":1959},[1608,10304,3144],{"class":2058},[1608,10306,3066],{"class":1969},[1608,10308,10309],{"class":2058}," initialValue\n",[1608,10311,10312],{"class":1785,"line":1820},[1608,10313,10139],{"class":1959},[1608,10315,10316,10318],{"class":1785,"line":1825},[1608,10317,2047],{"class":2046},[1608,10319,1960],{"class":1959},[1608,10321,10322,10325,10328,10330,10332],{"class":1785,"line":1831},[1608,10323,10324],{"class":2058},"    count:",[1608,10326,10327],{"class":2017}," readonly",[1608,10329,3072],{"class":1959},[1608,10331,1613],{"class":2058},[1608,10333,7031],{"class":1959},[1608,10335,10336,10338],{"class":1785,"line":1333},[1608,10337,3715],{"class":2058},[1608,10339,3694],{"class":1959},[1608,10341,10342,10344],{"class":1785,"line":2075},[1608,10343,3723],{"class":2058},[1608,10345,3694],{"class":1959},[1608,10347,10348],{"class":1785,"line":2099},[1608,10349,3731],{"class":2058},[1608,10351,10352],{"class":1785,"line":2119},[1608,10353,3619],{"class":1959},[1608,10355,10356],{"class":1785,"line":2129},[1608,10357,2005],{"class":1959},[30,10359,10360],{},"استخدمها في أي مكان:",[441,10362,10364],{"className":2980,"code":10363,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\nconst { count, increment, decrement } = useCounter(10)\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cp>العدد: {{ count }}\u003C/p>\n    \u003Cbutton @click=\"increment\">+\u003C/button>\n    \u003Cbutton @click=\"decrement\">-\u003C/button>\n  \u003C/div>\n\u003C/template>\n",[448,10365,10366,10376,10405,10413,10417,10425,10433,10454,10482,10510,10518],{"__ignoreMap":16},[1608,10367,10368,10370,10372,10374],{"class":1785,"line":1786},[1608,10369,2990],{"class":2989},[1608,10371,2994],{"class":2993},[1608,10373,2998],{"class":2997},[1608,10375,2072],{"class":2989},[1608,10377,10378,10380,10382,10384,10386,10388,10390,10392,10394,10396,10398,10400,10403],{"class":1785,"line":1260},[1608,10379,3059],{"class":1951},[1608,10381,2032],{"class":1959},[1608,10383,1613],{"class":3062},[1608,10385,3020],{"class":1959},[1608,10387,3901],{"class":3062},[1608,10389,3020],{"class":1959},[1608,10391,3935],{"class":3062},[1608,10393,3037],{"class":1959},[1608,10395,2065],{"class":1969},[1608,10397,6359],{"class":2017},[1608,10399,3072],{"class":1959},[1608,10401,10402],{"class":3075},"10",[1608,10404,2419],{"class":1959},[1608,10406,10407,10409,10411],{"class":1785,"line":17},[1608,10408,2092],{"class":2989},[1608,10410,2994],{"class":2993},[1608,10412,2072],{"class":2989},[1608,10414,10415],{"class":1785,"line":1802},[1608,10416,1805],{"emptyLinePlaceholder":1305},[1608,10418,10419,10421,10423],{"class":1785,"line":1808},[1608,10420,2990],{"class":2989},[1608,10422,3303],{"class":2993},[1608,10424,2072],{"class":2989},[1608,10426,10427,10429,10431],{"class":1785,"line":1814},[1608,10428,3311],{"class":2989},[1608,10430,2059],{"class":2993},[1608,10432,2072],{"class":2989},[1608,10434,10435,10437,10439,10441,10444,10446,10448,10450,10452],{"class":1785,"line":1820},[1608,10436,2055],{"class":2989},[1608,10438,30],{"class":2993},[1608,10440,3325],{"class":2989},[1608,10442,10443],{"class":1959},"العدد: {{ ",[1608,10445,1613],{"class":2058},[1608,10447,3333],{"class":1959},[1608,10449,2092],{"class":2989},[1608,10451,30],{"class":2993},[1608,10453,2072],{"class":2989},[1608,10455,10456,10458,10460,10462,10464,10466,10468,10470,10472,10474,10476,10478,10480],{"class":1785,"line":1825},[1608,10457,2055],{"class":2989},[1608,10459,3370],{"class":2993},[1608,10461,3373],{"class":1959},[1608,10463,3376],{"class":2997},[1608,10465,2065],{"class":1959},[1608,10467,3381],{"class":3268},[1608,10469,3901],{"class":2058},[1608,10471,3381],{"class":3268},[1608,10473,3325],{"class":2989},[1608,10475,3908],{"class":1959},[1608,10477,2092],{"class":2989},[1608,10479,3370],{"class":2993},[1608,10481,2072],{"class":2989},[1608,10483,10484,10486,10488,10490,10492,10494,10496,10498,10500,10502,10504,10506,10508],{"class":1785,"line":1831},[1608,10485,2055],{"class":2989},[1608,10487,3370],{"class":2993},[1608,10489,3373],{"class":1959},[1608,10491,3376],{"class":2997},[1608,10493,2065],{"class":1959},[1608,10495,3381],{"class":3268},[1608,10497,3935],{"class":2058},[1608,10499,3381],{"class":3268},[1608,10501,3325],{"class":2989},[1608,10503,3942],{"class":1959},[1608,10505,2092],{"class":2989},[1608,10507,3370],{"class":2993},[1608,10509,2072],{"class":2989},[1608,10511,10512,10514,10516],{"class":1785,"line":1333},[1608,10513,3405],{"class":2989},[1608,10515,2059],{"class":2993},[1608,10517,2072],{"class":2989},[1608,10519,10520,10522,10524],{"class":1785,"line":2075},[1608,10521,2092],{"class":2989},[1608,10523,3303],{"class":2993},[1608,10525,2072],{"class":2989},[68,10527,10529],{"id":10528},"وحدات-nuxt-الأساسية","وحدات Nuxt الأساسية",[30,10531,10532],{},"وسع Nuxt بوحدات رسمية ومجتمعية:",[73,10534,10536],{"id":10535},"tailwind-css","Tailwind CSS",[441,10538,10540],{"className":8465,"code":10539,"language":8467,"meta":16,"style":16},"npm install @nuxtjs/tailwindcss\n",[448,10541,10542],{"__ignoreMap":16},[1608,10543,10544,10546,10549],{"class":1785,"line":1786},[1608,10545,8535],{"class":2017},[1608,10547,10548],{"class":2068}," install",[1608,10550,10551],{"class":2068}," @nuxtjs/tailwindcss\n",[30,10553,10554],{},[37,10555,10556],{},"nuxt.config.ts",[441,10558,10560],{"className":1936,"code":10559,"language":1938,"meta":16,"style":16},"export default defineNuxtConfig({\n  modules: ['@nuxtjs/tailwindcss']\n})\n",[448,10561,10562,10573,10585],{"__ignoreMap":16},[1608,10563,10564,10566,10568,10571],{"class":1785,"line":1786},[1608,10565,3483],{"class":2046},[1608,10567,7160],{"class":2046},[1608,10569,10570],{"class":2017}," defineNuxtConfig",[1608,10572,7166],{"class":1959},[1608,10574,10575,10578,10580,10583],{"class":1785,"line":1260},[1608,10576,10577],{"class":2058},"  modules:",[1608,10579,4141],{"class":1959},[1608,10581,10582],{"class":2068},"'@nuxtjs/tailwindcss'",[1608,10584,4153],{"class":1959},[1608,10586,10587],{"class":1785,"line":17},[1608,10588,3742],{"class":1959},[73,10590,10592],{"id":10591},"nuxt-content-للمدوناتالوثائق","Nuxt Content (للمدونات/الوثائق)",[441,10594,10596],{"className":8465,"code":10595,"language":8467,"meta":16,"style":16},"npm install @nuxt/content\n",[448,10597,10598],{"__ignoreMap":16},[1608,10599,10600,10602,10604],{"class":1785,"line":1786},[1608,10601,8535],{"class":2017},[1608,10603,10548],{"class":2068},[1608,10605,10606],{"class":2068}," @nuxt/content\n",[30,10608,10609],{},"رائع للمحتوى المبني على markdown:",[441,10611,10613],{"className":2980,"code":10612,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\nconst { data: article } = await useAsyncData('article', () => \n  queryContent('/blog/my-post').findOne()\n)\n\u003C/script>\n\n\u003Ctemplate>\n  \u003CContentDoc :value=\"article\" />\n\u003C/template>\n",[448,10614,10615,10625,10657,10674,10678,10686,10690,10698,10720],{"__ignoreMap":16},[1608,10616,10617,10619,10621,10623],{"class":1785,"line":1786},[1608,10618,2990],{"class":2989},[1608,10620,2994],{"class":2993},[1608,10622,2998],{"class":2997},[1608,10624,2072],{"class":2989},[1608,10626,10627,10629,10631,10633,10635,10637,10639,10641,10643,10645,10647,10650,10652,10654],{"class":1785,"line":1260},[1608,10628,3059],{"class":1951},[1608,10630,2032],{"class":1959},[1608,10632,8782],{"class":1965},[1608,10634,4147],{"class":1959},[1608,10636,8838],{"class":3062},[1608,10638,3037],{"class":1959},[1608,10640,2065],{"class":1969},[1608,10642,6920],{"class":2046},[1608,10644,6756],{"class":2017},[1608,10646,3072],{"class":1959},[1608,10648,10649],{"class":2068},"'article'",[1608,10651,3502],{"class":1959},[1608,10653,3137],{"class":1951},[1608,10655,10656],{"class":1959}," \n",[1608,10658,10659,10662,10664,10667,10669,10672],{"class":1785,"line":17},[1608,10660,10661],{"class":2017},"  queryContent",[1608,10663,3072],{"class":1959},[1608,10665,10666],{"class":2068},"'/blog/my-post'",[1608,10668,6390],{"class":1959},[1608,10670,10671],{"class":2017},"findOne",[1608,10673,3801],{"class":1959},[1608,10675,10676],{"class":1785,"line":1802},[1608,10677,2419],{"class":1959},[1608,10679,10680,10682,10684],{"class":1785,"line":1808},[1608,10681,2092],{"class":2989},[1608,10683,2994],{"class":2993},[1608,10685,2072],{"class":2989},[1608,10687,10688],{"class":1785,"line":1814},[1608,10689,1805],{"emptyLinePlaceholder":1305},[1608,10691,10692,10694,10696],{"class":1785,"line":1820},[1608,10693,2990],{"class":2989},[1608,10695,3303],{"class":2993},[1608,10697,2072],{"class":2989},[1608,10699,10700,10702,10705,10707,10709,10711,10713,10715,10717],{"class":1785,"line":1825},[1608,10701,3311],{"class":2989},[1608,10703,10704],{"class":2993},"ContentDoc",[1608,10706,4716],{"class":1959},[1608,10708,3144],{"class":2997},[1608,10710,2065],{"class":1959},[1608,10712,3381],{"class":3268},[1608,10714,8838],{"class":2058},[1608,10716,3381],{"class":3268},[1608,10718,10719],{"class":2989}," />\n",[1608,10721,10722,10724,10726],{"class":1785,"line":1831},[1608,10723,2092],{"class":2989},[1608,10725,3303],{"class":2993},[1608,10727,2072],{"class":2989},[73,10729,10731],{"id":10730},"nuxt-image","Nuxt Image",[441,10733,10735],{"className":8465,"code":10734,"language":8467,"meta":16,"style":16},"npm install @nuxt/image\n",[448,10736,10737],{"__ignoreMap":16},[1608,10738,10739,10741,10743],{"class":1785,"line":1786},[1608,10740,8535],{"class":2017},[1608,10742,10548],{"class":2068},[1608,10744,10745],{"class":2068}," @nuxt/image\n",[30,10747,10748],{},"تحسين الصور التلقائي:",[441,10750,10752],{"className":2980,"code":10751,"language":2982,"meta":16,"style":16},"\u003Ctemplate>\n  \u003CNuxtImg src=\"/photo.jpg\" width=\"400\" height=\"300\" />\n\u003C/template>\n",[448,10753,10754,10762,10795],{"__ignoreMap":16},[1608,10755,10756,10758,10760],{"class":1785,"line":1786},[1608,10757,2990],{"class":2989},[1608,10759,3303],{"class":2993},[1608,10761,2072],{"class":2989},[1608,10763,10764,10766,10769,10772,10774,10777,10780,10782,10785,10788,10790,10793],{"class":1785,"line":1260},[1608,10765,3311],{"class":2989},[1608,10767,10768],{"class":2993},"NuxtImg",[1608,10770,10771],{"class":2997}," src",[1608,10773,2065],{"class":1959},[1608,10775,10776],{"class":2068},"\"/photo.jpg\"",[1608,10778,10779],{"class":2997}," width",[1608,10781,2065],{"class":1959},[1608,10783,10784],{"class":2068},"\"400\"",[1608,10786,10787],{"class":2997}," height",[1608,10789,2065],{"class":1959},[1608,10791,10792],{"class":2068},"\"300\"",[1608,10794,10719],{"class":2989},[1608,10796,10797,10799,10801],{"class":1785,"line":17},[1608,10798,2092],{"class":2989},[1608,10800,3303],{"class":2993},[1608,10802,2072],{"class":2989},[68,10804,10806],{"id":10805},"البناء-والنشر","البناء والنشر",[73,10808,5],{"id":5},[441,10810,10812],{"className":8465,"code":10811,"language":8467,"meta":16,"style":16},"npm run dev\n",[448,10813,10814],{"__ignoreMap":16},[1608,10815,10816,10818,10820],{"class":1785,"line":1786},[1608,10817,8535],{"class":2017},[1608,10819,8545],{"class":2068},[1608,10821,8548],{"class":2068},[73,10823,10825],{"id":10824},"بناء-الإنتاج","بناء الإنتاج",[441,10827,10829],{"className":8465,"code":10828,"language":8467,"meta":16,"style":16},"npm run build\n",[448,10830,10831],{"__ignoreMap":16},[1608,10832,10833,10835,10837],{"class":1785,"line":1786},[1608,10834,8535],{"class":2017},[1608,10836,8545],{"class":2068},[1608,10838,10839],{"class":2068}," build\n",[30,10841,10842,10843],{},"ينشئ بناء محسن في ",[448,10844,10845],{},".output",[73,10847,10849],{"id":10848},"معاينة-بناء-الإنتاج","معاينة بناء الإنتاج",[441,10851,10853],{"className":8465,"code":10852,"language":8467,"meta":16,"style":16},"npm run preview\n",[448,10854,10855],{"__ignoreMap":16},[1608,10856,10857,10859,10861],{"class":1785,"line":1786},[1608,10858,8535],{"class":2017},[1608,10860,8545],{"class":2068},[1608,10862,10863],{"class":2068}," preview\n",[73,10865,10867],{"id":10866},"التوليد-الثابت","التوليد الثابت",[30,10869,10870],{},"للمواقع الثابتة تماماً:",[441,10872,10874],{"className":8465,"code":10873,"language":8467,"meta":16,"style":16},"npm run generate\n",[448,10875,10876],{"__ignoreMap":16},[1608,10877,10878,10880,10882],{"class":1785,"line":1786},[1608,10879,8535],{"class":2017},[1608,10881,8545],{"class":2068},[1608,10883,10884],{"class":2068}," generate\n",[73,10886,10888],{"id":10887},"منصات-النشر","منصات النشر",[30,10890,10891],{},"يعمل Nuxt في كل مكان:",[30,10893,10894],{},[37,10895,10896],{},"Vercel:",[441,10898,10900],{"className":8465,"code":10899,"language":8467,"meta":16,"style":16},"npm run build\n# نشر مع Vercel CLI أو ربط مستودع git\n",[448,10901,10902,10910],{"__ignoreMap":16},[1608,10903,10904,10906,10908],{"class":1785,"line":1786},[1608,10905,8535],{"class":2017},[1608,10907,8545],{"class":2068},[1608,10909,10839],{"class":2068},[1608,10911,10912],{"class":1785,"line":1260},[1608,10913,10914],{"class":1945},"# نشر مع Vercel CLI أو ربط مستودع git\n",[30,10916,10917],{},[37,10918,10919],{},"Netlify:",[441,10921,10923],{"className":8465,"code":10922,"language":8467,"meta":16,"style":16},"npm run generate  # للثابت\n# أو\nnpm run build     # للـ SSR\n",[448,10924,10925,10937,10942],{"__ignoreMap":16},[1608,10926,10927,10929,10931,10934],{"class":1785,"line":1786},[1608,10928,8535],{"class":2017},[1608,10930,8545],{"class":2068},[1608,10932,10933],{"class":2068}," generate",[1608,10935,10936],{"class":1945},"  # للثابت\n",[1608,10938,10939],{"class":1785,"line":1260},[1608,10940,10941],{"class":1945},"# أو\n",[1608,10943,10944,10946,10948,10951],{"class":1785,"line":17},[1608,10945,8535],{"class":2017},[1608,10947,8545],{"class":2068},[1608,10949,10950],{"class":2068}," build",[1608,10952,10953],{"class":1945},"     # للـ SSR\n",[30,10955,10956,10959,10960],{},[37,10957,10958],{},"Cloudflare Pages:","\nنشر تلقائي من git مع أمر البناء: ",[448,10961,10962],{},"npm run build",[30,10964,10965],{},[37,10966,10967],{},"خادمك الخاص:",[441,10969,10971],{"className":8465,"code":10970,"language":8467,"meta":16,"style":16},"npm run build\nnode .output/server/index.mjs\n",[448,10972,10973,10981],{"__ignoreMap":16},[1608,10974,10975,10977,10979],{"class":1785,"line":1786},[1608,10976,8535],{"class":2017},[1608,10978,8545],{"class":2068},[1608,10980,10839],{"class":2068},[1608,10982,10983,10985],{"class":1785,"line":1260},[1608,10984,8474],{"class":2017},[1608,10986,10987],{"class":2068}," .output/server/index.mjs\n",[68,10989,10991],{"id":10990},"أفضل-الممارسات","أفضل الممارسات",[73,10993,10995],{"id":10994},"_1-استخدم-typescript","1. استخدم TypeScript",[30,10997,10998],{},"فعل الوضع الصارم لأمان نوع أفضل:",[441,11000,11002],{"className":1936,"code":11001,"language":1938,"meta":16,"style":16},"// nuxt.config.ts\nexport default defineNuxtConfig({\n  typescript: {\n    strict: true,\n    typeCheck: true\n  }\n})\n",[448,11003,11004,11009,11019,11026,11035,11042,11046],{"__ignoreMap":16},[1608,11005,11006],{"class":1785,"line":1786},[1608,11007,11008],{"class":1945},"// nuxt.config.ts\n",[1608,11010,11011,11013,11015,11017],{"class":1785,"line":1260},[1608,11012,3483],{"class":2046},[1608,11014,7160],{"class":2046},[1608,11016,10570],{"class":2017},[1608,11018,7166],{"class":1959},[1608,11020,11021,11024],{"class":1785,"line":17},[1608,11022,11023],{"class":2058},"  typescript:",[1608,11025,1960],{"class":1959},[1608,11027,11028,11031,11033],{"class":1785,"line":1802},[1608,11029,11030],{"class":2058},"    strict:",[1608,11032,5032],{"class":5031},[1608,11034,3694],{"class":1959},[1608,11036,11037,11040],{"class":1785,"line":1808},[1608,11038,11039],{"class":2058},"    typeCheck:",[1608,11041,6882],{"class":5031},[1608,11043,11044],{"class":1785,"line":1814},[1608,11045,3619],{"class":1959},[1608,11047,11048],{"class":1785,"line":1820},[1608,11049,3742],{"class":1959},[73,11051,11053],{"id":11052},"_2-حسين-الصور","2. حسين الصور",[30,11055,11056,11057,11060,11061,11064],{},"استخدم دائماً ",[448,11058,11059],{},"\u003CNuxtImg>"," أو ",[448,11062,11063],{},"\u003CNuxtPicture>"," للتحسين التلقائي.",[73,11066,11068],{"id":11067},"_3-معالجة-الأخطاء","3. معالجة الأخطاء",[30,11070,11071],{},"أنشئ صفحة خطأ مخصصة:",[30,11073,11074],{},[37,11075,11076],{},"error.vue",[441,11078,11080],{"className":2980,"code":11079,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\nconst props = defineProps\u003C{\n  error: {\n    statusCode: number\n    message: string\n  }\n}>()\n\nconst handleError = () => clearError({ redirect: '/' })\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>{{ error.statusCode }}\u003C/h1>\n    \u003Cp>{{ error.message }}\u003C/p>\n    \u003Cbutton @click=\"handleError\">العودة للرئيسية\u003C/button>\n  \u003C/div>\n\u003C/template>\n",[448,11081,11082,11092,11104,11112,11121,11130,11134,11138,11142,11167,11175,11179,11187,11195,11220,11244,11274,11282],{"__ignoreMap":16},[1608,11083,11084,11086,11088,11090],{"class":1785,"line":1786},[1608,11085,2990],{"class":2989},[1608,11087,2994],{"class":2993},[1608,11089,2998],{"class":2997},[1608,11091,2072],{"class":2989},[1608,11093,11094,11096,11098,11100,11102],{"class":1785,"line":1260},[1608,11095,3059],{"class":1951},[1608,11097,4103],{"class":3062},[1608,11099,3066],{"class":1969},[1608,11101,4108],{"class":2017},[1608,11103,4131],{"class":1959},[1608,11105,11106,11108,11110],{"class":1785,"line":17},[1608,11107,4083],{"class":1965},[1608,11109,1970],{"class":1969},[1608,11111,1960],{"class":1959},[1608,11113,11114,11117,11119],{"class":1785,"line":1802},[1608,11115,11116],{"class":1965},"    statusCode",[1608,11118,1970],{"class":1969},[1608,11120,5571],{"class":1973},[1608,11122,11123,11126,11128],{"class":1785,"line":1808},[1608,11124,11125],{"class":1965},"    message",[1608,11127,1970],{"class":1969},[1608,11129,4069],{"class":1973},[1608,11131,11132],{"class":1785,"line":1814},[1608,11133,3619],{"class":1959},[1608,11135,11136],{"class":1785,"line":1820},[1608,11137,4158],{"class":1959},[1608,11139,11140],{"class":1785,"line":1825},[1608,11141,1805],{"emptyLinePlaceholder":1305},[1608,11143,11144,11146,11148,11150,11152,11154,11157,11159,11162,11165],{"class":1785,"line":1831},[1608,11145,3059],{"class":1951},[1608,11147,6521],{"class":2017},[1608,11149,3066],{"class":1969},[1608,11151,5463],{"class":1959},[1608,11153,3137],{"class":1951},[1608,11155,11156],{"class":2017}," clearError",[1608,11158,2021],{"class":1959},[1608,11160,11161],{"class":2058},"redirect:",[1608,11163,11164],{"class":2068}," '/'",[1608,11166,5035],{"class":1959},[1608,11168,11169,11171,11173],{"class":1785,"line":1333},[1608,11170,2092],{"class":2989},[1608,11172,2994],{"class":2993},[1608,11174,2072],{"class":2989},[1608,11176,11177],{"class":1785,"line":2075},[1608,11178,1805],{"emptyLinePlaceholder":1305},[1608,11180,11181,11183,11185],{"class":1785,"line":2099},[1608,11182,2990],{"class":2989},[1608,11184,3303],{"class":2993},[1608,11186,2072],{"class":2989},[1608,11188,11189,11191,11193],{"class":1785,"line":2119},[1608,11190,3311],{"class":2989},[1608,11192,2059],{"class":2993},[1608,11194,2072],{"class":2989},[1608,11196,11197,11199,11201,11203,11205,11207,11209,11212,11214,11216,11218],{"class":1785,"line":2129},[1608,11198,2055],{"class":2989},[1608,11200,8655],{"class":2993},[1608,11202,3325],{"class":2989},[1608,11204,6634],{"class":1959},[1608,11206,4198],{"class":2058},[1608,11208,44],{"class":1959},[1608,11210,11211],{"class":2058},"statusCode",[1608,11213,3333],{"class":1959},[1608,11215,2092],{"class":2989},[1608,11217,8655],{"class":2993},[1608,11219,2072],{"class":2989},[1608,11221,11222,11224,11226,11228,11230,11232,11234,11236,11238,11240,11242],{"class":1785,"line":1635},[1608,11223,2055],{"class":2989},[1608,11225,30],{"class":2993},[1608,11227,3325],{"class":2989},[1608,11229,6634],{"class":1959},[1608,11231,4198],{"class":2058},[1608,11233,44],{"class":1959},[1608,11235,6641],{"class":2058},[1608,11237,3333],{"class":1959},[1608,11239,2092],{"class":2989},[1608,11241,30],{"class":2993},[1608,11243,2072],{"class":2989},[1608,11245,11246,11248,11250,11252,11254,11256,11258,11261,11263,11265,11268,11270,11272],{"class":1785,"line":2296},[1608,11247,2055],{"class":2989},[1608,11249,3370],{"class":2993},[1608,11251,3373],{"class":1959},[1608,11253,3376],{"class":2997},[1608,11255,2065],{"class":1959},[1608,11257,3381],{"class":3268},[1608,11259,11260],{"class":2058},"handleError",[1608,11262,3381],{"class":3268},[1608,11264,3325],{"class":2989},[1608,11266,11267],{"class":1959},"العودة للرئيسية",[1608,11269,2092],{"class":2989},[1608,11271,3370],{"class":2993},[1608,11273,2072],{"class":2989},[1608,11275,11276,11278,11280],{"class":1785,"line":2302},[1608,11277,3405],{"class":2989},[1608,11279,2059],{"class":2993},[1608,11281,2072],{"class":2989},[1608,11283,11284,11286,11288],{"class":1785,"line":2308},[1608,11285,2092],{"class":2989},[1608,11287,3303],{"class":2993},[1608,11289,2072],{"class":2989},[73,11291,11293],{"id":11292},"_4-تحسين-seo","4. تحسين SEO",[30,11295,11296,11297,11300],{},"استخدم ",[448,11298,11299],{},"useSeoMeta"," لـ SEO أفضل:",[441,11302,11304],{"className":2980,"code":11303,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\nuseSeoMeta({\n  title: 'صفحتي الرائعة',\n  description: 'هذه الصفحة رائعة',\n  ogImage: 'https://example.com/image.jpg',\n  twitterCard: 'summary_large_image'\n})\n\u003C/script>\n",[448,11305,11306,11316,11322,11331,11341,11351,11359,11363],{"__ignoreMap":16},[1608,11307,11308,11310,11312,11314],{"class":1785,"line":1786},[1608,11309,2990],{"class":2989},[1608,11311,2994],{"class":2993},[1608,11313,2998],{"class":2997},[1608,11315,2072],{"class":2989},[1608,11317,11318,11320],{"class":1785,"line":1260},[1608,11319,11299],{"class":2017},[1608,11321,7166],{"class":1959},[1608,11323,11324,11326,11329],{"class":1785,"line":17},[1608,11325,8613],{"class":2058},[1608,11327,11328],{"class":2068}," 'صفحتي الرائعة'",[1608,11330,3694],{"class":1959},[1608,11332,11333,11336,11339],{"class":1785,"line":1802},[1608,11334,11335],{"class":2058},"  description:",[1608,11337,11338],{"class":2068}," 'هذه الصفحة رائعة'",[1608,11340,3694],{"class":1959},[1608,11342,11343,11346,11349],{"class":1785,"line":1808},[1608,11344,11345],{"class":2058},"  ogImage:",[1608,11347,11348],{"class":2068}," 'https://example.com/image.jpg'",[1608,11350,3694],{"class":1959},[1608,11352,11353,11356],{"class":1785,"line":1814},[1608,11354,11355],{"class":2058},"  twitterCard:",[1608,11357,11358],{"class":2068}," 'summary_large_image'\n",[1608,11360,11361],{"class":1785,"line":1820},[1608,11362,3742],{"class":1959},[1608,11364,11365,11367,11369],{"class":1785,"line":1825},[1608,11366,2092],{"class":2989},[1608,11368,2994],{"class":2993},[1608,11370,2072],{"class":2989},[73,11372,11374],{"id":11373},"_5-الأداء","5. الأداء",[49,11376,11377,11383,11386,11392],{},[52,11378,11296,11379,11382],{},[448,11380,11381],{},"useLazyFetch"," للبيانات غير الحساسة",[52,11384,11385],{},"طبق ترقيم الصفحات لمجموعات البيانات الكبيرة",[52,11387,11296,11388,11391],{},[448,11389,11390],{},"\u003CClientOnly>"," للمكونات التي لا تحتاج SSR",[52,11393,11394],{},"قم بتحميل الصور والمكونات الثقيلة بطريقة lazy",[68,11396,11398],{"id":11397},"الأنماط-الشائعة","الأنماط الشائعة",[73,11400,11401],{"id":11401},"المصادقة",[441,11403,11405],{"className":1936,"code":11404,"language":1938,"meta":16,"style":16},"// composables/useAuth.ts\nexport const useAuth = () => {\n  const user = useState('user', () => null)\n  \n  const login = async (credentials) => {\n    const data = await $fetch('/api/auth/login', {\n      method: 'POST',\n      body: credentials\n    })\n    user.value = data.user\n  }\n  \n  const logout = () => {\n    user.value = null\n  }\n  \n  return { user, login, logout }\n}\n",[448,11406,11407,11412,11429,11452,11456,11478,11497,11507,11515,11520,11538,11542,11546,11561,11573,11577,11581,11601],{"__ignoreMap":16},[1608,11408,11409],{"class":1785,"line":1786},[1608,11410,11411],{"class":1945},"// composables/useAuth.ts\n",[1608,11413,11414,11416,11418,11421,11423,11425,11427],{"class":1785,"line":1260},[1608,11415,3483],{"class":2046},[1608,11417,3486],{"class":1951},[1608,11419,11420],{"class":2017}," useAuth",[1608,11422,3066],{"class":1969},[1608,11424,5463],{"class":1959},[1608,11426,3137],{"class":1951},[1608,11428,1960],{"class":1959},[1608,11430,11431,11433,11435,11437,11440,11442,11444,11446,11448,11450],{"class":1785,"line":17},[1608,11432,3516],{"class":1951},[1608,11434,3086],{"class":3062},[1608,11436,3066],{"class":1969},[1608,11438,11439],{"class":2017}," useState",[1608,11441,3072],{"class":1959},[1608,11443,5846],{"class":2068},[1608,11445,3502],{"class":1959},[1608,11447,3137],{"class":1951},[1608,11449,5874],{"class":5031},[1608,11451,2419],{"class":1959},[1608,11453,11454],{"class":1785,"line":1802},[1608,11455,10139],{"class":1959},[1608,11457,11458,11460,11463,11465,11467,11469,11472,11474,11476],{"class":1785,"line":1808},[1608,11459,3516],{"class":1951},[1608,11461,11462],{"class":2017}," login",[1608,11464,3066],{"class":1969},[1608,11466,5460],{"class":1951},[1608,11468,4554],{"class":1959},[1608,11470,11471],{"class":1965},"credentials",[1608,11473,3183],{"class":1959},[1608,11475,3137],{"class":1951},[1608,11477,1960],{"class":1959},[1608,11479,11480,11482,11484,11486,11488,11490,11492,11495],{"class":1785,"line":1814},[1608,11481,6154],{"class":1951},[1608,11483,5293],{"class":3062},[1608,11485,3066],{"class":1969},[1608,11487,6920],{"class":2046},[1608,11489,9793],{"class":2017},[1608,11491,3072],{"class":1959},[1608,11493,11494],{"class":2068},"'/api/auth/login'",[1608,11496,9801],{"class":1959},[1608,11498,11499,11502,11505],{"class":1785,"line":1820},[1608,11500,11501],{"class":2058},"      method:",[1608,11503,11504],{"class":2068}," 'POST'",[1608,11506,3694],{"class":1959},[1608,11508,11509,11512],{"class":1785,"line":1825},[1608,11510,11511],{"class":2058},"      body:",[1608,11513,11514],{"class":2058}," credentials\n",[1608,11516,11517],{"class":1785,"line":1831},[1608,11518,11519],{"class":1959},"    })\n",[1608,11521,11522,11525,11527,11529,11531,11533,11535],{"class":1785,"line":1333},[1608,11523,11524],{"class":2058},"    user",[1608,11526,44],{"class":1959},[1608,11528,3144],{"class":2058},[1608,11530,3066],{"class":1969},[1608,11532,5293],{"class":2058},[1608,11534,44],{"class":1959},[1608,11536,11537],{"class":2058},"user\n",[1608,11539,11540],{"class":1785,"line":2075},[1608,11541,3619],{"class":1959},[1608,11543,11544],{"class":1785,"line":2099},[1608,11545,10139],{"class":1959},[1608,11547,11548,11550,11553,11555,11557,11559],{"class":1785,"line":2119},[1608,11549,3516],{"class":1951},[1608,11551,11552],{"class":2017}," logout",[1608,11554,3066],{"class":1969},[1608,11556,5463],{"class":1959},[1608,11558,3137],{"class":1951},[1608,11560,1960],{"class":1959},[1608,11562,11563,11565,11567,11569,11571],{"class":1785,"line":2129},[1608,11564,11524],{"class":2058},[1608,11566,44],{"class":1959},[1608,11568,3144],{"class":2058},[1608,11570,3066],{"class":1969},[1608,11572,6896],{"class":5031},[1608,11574,11575],{"class":1785,"line":1635},[1608,11576,3619],{"class":1959},[1608,11578,11579],{"class":1785,"line":2296},[1608,11580,10139],{"class":1959},[1608,11582,11583,11585,11587,11589,11591,11594,11596,11599],{"class":1785,"line":2302},[1608,11584,2047],{"class":2046},[1608,11586,2032],{"class":1959},[1608,11588,2024],{"class":2058},[1608,11590,3020],{"class":1959},[1608,11592,11593],{"class":2058},"login",[1608,11595,3020],{"class":1959},[1608,11597,11598],{"class":2058},"logout",[1608,11600,9817],{"class":1959},[1608,11602,11603],{"class":1785,"line":2308},[1608,11604,2005],{"class":1959},[73,11606,11608],{"id":11607},"المسارات-المحمية","المسارات المحمية",[441,11610,11612],{"className":1936,"code":11611,"language":1938,"meta":16,"style":16},"// middleware/auth.ts\nexport default defineNuxtRouteMiddleware((to, from) => {\n  const { user } = useAuth()\n  \n  if (!user.value) {\n    return navigateTo('/login')\n  }\n})\n",[448,11613,11614,11619,11643,11659,11663,11680,11695,11699],{"__ignoreMap":16},[1608,11615,11616],{"class":1785,"line":1786},[1608,11617,11618],{"class":1945},"// middleware/auth.ts\n",[1608,11620,11621,11623,11625,11628,11630,11633,11635,11637,11639,11641],{"class":1785,"line":1260},[1608,11622,3483],{"class":2046},[1608,11624,7160],{"class":2046},[1608,11626,11627],{"class":2017}," defineNuxtRouteMiddleware",[1608,11629,10103],{"class":1959},[1608,11631,11632],{"class":1965},"to",[1608,11634,3020],{"class":1959},[1608,11636,3040],{"class":1965},[1608,11638,3183],{"class":1959},[1608,11640,3137],{"class":1951},[1608,11642,1960],{"class":1959},[1608,11644,11645,11647,11649,11651,11653,11655,11657],{"class":1785,"line":17},[1608,11646,3516],{"class":1951},[1608,11648,2032],{"class":1959},[1608,11650,2024],{"class":3062},[1608,11652,3037],{"class":1959},[1608,11654,2065],{"class":1969},[1608,11656,11420],{"class":2017},[1608,11658,3801],{"class":1959},[1608,11660,11661],{"class":1785,"line":1802},[1608,11662,10139],{"class":1959},[1608,11664,11665,11667,11669,11672,11674,11676,11678],{"class":1785,"line":1808},[1608,11666,4890],{"class":2046},[1608,11668,4554],{"class":1959},[1608,11670,11671],{"class":1969},"!",[1608,11673,2024],{"class":2058},[1608,11675,44],{"class":1959},[1608,11677,3144],{"class":2058},[1608,11679,4832],{"class":1959},[1608,11681,11682,11685,11688,11690,11693],{"class":1785,"line":1814},[1608,11683,11684],{"class":2046},"    return",[1608,11686,11687],{"class":2017}," navigateTo",[1608,11689,3072],{"class":1959},[1608,11691,11692],{"class":2068},"'/login'",[1608,11694,2419],{"class":1959},[1608,11696,11697],{"class":1785,"line":1820},[1608,11698,3619],{"class":1959},[1608,11700,11701],{"class":1785,"line":1825},[1608,11702,3742],{"class":1959},[30,11704,11705],{},"استخدم في صفحة:",[441,11707,11709],{"className":2980,"code":11708,"language":2982,"meta":16,"style":16},"\u003Cscript setup>\ndefinePageMeta({\n  middleware: 'auth'\n})\n\u003C/script>\n",[448,11710,11711,11721,11727,11735,11739],{"__ignoreMap":16},[1608,11712,11713,11715,11717,11719],{"class":1785,"line":1786},[1608,11714,2990],{"class":2989},[1608,11716,2994],{"class":2993},[1608,11718,2998],{"class":2997},[1608,11720,2072],{"class":2989},[1608,11722,11723,11725],{"class":1785,"line":1260},[1608,11724,8606],{"class":2017},[1608,11726,7166],{"class":1959},[1608,11728,11729,11732],{"class":1785,"line":17},[1608,11730,11731],{"class":2058},"  middleware:",[1608,11733,11734],{"class":2068}," 'auth'\n",[1608,11736,11737],{"class":1785,"line":1802},[1608,11738,3742],{"class":1959},[1608,11740,11741,11743,11745],{"class":1785,"line":1808},[1608,11742,2092],{"class":2989},[1608,11744,2994],{"class":2993},[1608,11746,2072],{"class":2989},[68,11748,11750],{"id":11749},"استكشاف-الأخطاء","استكشاف الأخطاء",[30,11752,11753],{},[37,11754,11755],{},"المنفذ مستخدم بالفعل:",[441,11757,11759],{"className":8465,"code":11758,"language":8467,"meta":16,"style":16},"npm run dev -- --port 3001\n",[448,11760,11761],{"__ignoreMap":16},[1608,11762,11763,11765,11767,11770,11773,11776],{"class":1785,"line":1786},[1608,11764,8535],{"class":2017},[1608,11766,8545],{"class":2068},[1608,11768,11769],{"class":2068}," dev",[1608,11771,11772],{"class":5031}," --",[1608,11774,11775],{"class":5031}," --port",[1608,11777,11778],{"class":3075}," 3001\n",[30,11780,11781],{},[37,11782,11783],{},"مسح ذاكرة Nuxt المؤقتة:",[441,11785,11787],{"className":8465,"code":11786,"language":8467,"meta":16,"style":16},"rm -rf .nuxt\nnpm run dev\n",[448,11788,11789,11800],{"__ignoreMap":16},[1608,11790,11791,11794,11797],{"class":1785,"line":1786},[1608,11792,11793],{"class":2017},"rm",[1608,11795,11796],{"class":5031}," -rf",[1608,11798,11799],{"class":2068}," .nuxt\n",[1608,11801,11802,11804,11806],{"class":1785,"line":1260},[1608,11803,8535],{"class":2017},[1608,11805,8545],{"class":2068},[1608,11807,8548],{"class":2068},[30,11809,11810],{},[37,11811,11812],{},"أخطاء TypeScript:",[441,11814,11816],{"className":8465,"code":11815,"language":8467,"meta":16,"style":16},"npm run postinstall  # إعادة توليد الأنواع\n",[448,11817,11818],{"__ignoreMap":16},[1608,11819,11820,11822,11824,11827],{"class":1785,"line":1786},[1608,11821,8535],{"class":2017},[1608,11823,8545],{"class":2068},[1608,11825,11826],{"class":2068}," postinstall",[1608,11828,11829],{"class":1945},"  # إعادة توليد الأنواع\n",[68,11831,11833],{"id":11832},"ما-الجديد-في-nuxt-4","ما الجديد في Nuxt 4؟",[30,11835,11836],{},"Nuxt 4 (قيد التطوير حالياً) يجلب تحسينات مثيرة:",[49,11838,11839,11842,11845,11848,11851],{},[52,11840,11841],{},"أداء أفضل مع رسم خادم محسن",[52,11843,11844],{},"دعم TypeScript محسن",[52,11846,11847],{},"تجربة مطور محسنة",[52,11849,11850],{},"أحجام حزم أصغر",[52,11852,11853],{},"توافق أفضل مع أحدث ميزات Vue",[30,11855,11856],{},"للتحضير لـ Nuxt 4، حافظ على تحديث مشاريع Nuxt 3 الخاصة بك واتبع دليل الترحيل عند إصدار Nuxt 4.",[68,11858,11860],{"id":11859},"الخطوات-التالية","الخطوات التالية",[30,11862,11863],{},"الآن بعد فهم الأساسيات:",[913,11865,11866,11872,11885,11896,11912],{},[52,11867,11868,11871],{},[37,11869,11870],{},"بنِ مشروعاً",": ابدأ بمدونة أو معرض أعمال بسيط",[52,11873,11874,11877,11878],{},[37,11875,11876],{},"استكشف الوحدات",": تحقق من دليل ",[11879,11880,11884],"a",{"href":11881,"rel":11882},"https://nuxt.com/modules",[11883],"nofollow","وحدات Nuxt",[52,11886,11887,4147,11890,11895],{},[37,11888,11889],{},"اقرأ الوثائق",[11879,11891,11894],{"href":11892,"rel":11893},"https://nuxt.com",[11883],"الوثائق الرسمية"," ممتازة",[52,11897,11898,4147,11901,11906,11907],{},[37,11899,11900],{},"انضم للمجتمع",[11879,11902,11905],{"href":11903,"rel":11904},"https://discord.com/invite/nuxt",[11883],"Discord","، ",[11879,11908,11911],{"href":11909,"rel":11910},"https://github.com/nuxt/nuxt/discussions",[11883],"مناقشات GitHub",[52,11913,11914,11917],{},[37,11915,11916],{},"شاهد الدروس",": العديد من الدروس المرئية الرائعة متوفرة",[68,11919,7222],{"id":7222},[30,11921,11922],{},"يجعل Nuxt بناء تطبيقات الويب الحديثة ممتعاً ومنتجاً. هيكله الرأيي، ميزاته القوية، وتجربة المطور الممتازة تجعله خياراً أعلى لمطوري Vue.",[30,11924,11925],{},"ابدأ صغيراً، جرب الميزات، وتدريجياً بنِ تطبيقات أكثر تعقيداً. أفضل طريقة لتعلم Nuxt هي البناء به!",[30,11927,2844],{},[2846,11929,11930],{},"html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sffyN, html code.shiki .sffyN{--shiki-light:#24292E;--shiki-default:#808080;--shiki-dark:#808080}html pre.shiki code .ssFZ1, html code.shiki .ssFZ1{--shiki-light:#22863A;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sFcZJ, html code.shiki .sFcZJ{--shiki-light:#6F42C1;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .se2iQ, html code.shiki .se2iQ{--shiki-light:#032F62;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s5T4v, html code.shiki .s5T4v{--shiki-light:#032F62;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sUwQ0, html code.shiki .sUwQ0{--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-default:#F44747;--shiki-default-font-style:inherit;--shiki-dark:#F44747;--shiki-dark-font-style:inherit}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .sO3gw, html code.shiki .sO3gw{--shiki-light:#6F42C1;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sps74, html code.shiki .sps74{--shiki-light:#005CC5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sqBZk, html code.shiki .sqBZk{--shiki-light:#005CC5;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sNX3-, html code.shiki .sNX3-{--shiki-light:#005CC5;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}",{"title":16,"searchDepth":17,"depth":17,"links":11932},[11933,11936,11941,11949,11954,11961,11968,11972,11973,11974,11975],{"id":8286,"depth":1260,"text":8287,"children":11934},[11935],{"id":8293,"depth":17,"text":8294},{"id":8454,"depth":1260,"text":8455,"children":11937},[11938,11939,11940],{"id":8458,"depth":17,"text":8459},{"id":8480,"depth":17,"text":8481},{"id":8558,"depth":17,"text":8559},{"id":8571,"depth":1260,"text":8572,"children":11942},[11943,11944,11945,11946,11947,11948],{"id":8575,"depth":17,"text":8576},{"id":8913,"depth":17,"text":8914},{"id":9193,"depth":17,"text":9194},{"id":9468,"depth":17,"text":9469},{"id":9906,"depth":17,"text":9907},{"id":10186,"depth":17,"text":10187},{"id":10528,"depth":1260,"text":10529,"children":11950},[11951,11952,11953],{"id":10535,"depth":17,"text":10536},{"id":10591,"depth":17,"text":10592},{"id":10730,"depth":17,"text":10731},{"id":10805,"depth":1260,"text":10806,"children":11955},[11956,11957,11958,11959,11960],{"id":5,"depth":17,"text":5},{"id":10824,"depth":17,"text":10825},{"id":10848,"depth":17,"text":10849},{"id":10866,"depth":17,"text":10867},{"id":10887,"depth":17,"text":10888},{"id":10990,"depth":1260,"text":10991,"children":11962},[11963,11964,11965,11966,11967],{"id":10994,"depth":17,"text":10995},{"id":11052,"depth":17,"text":11053},{"id":11067,"depth":17,"text":11068},{"id":11292,"depth":17,"text":11293},{"id":11373,"depth":17,"text":11374},{"id":11397,"depth":1260,"text":11398,"children":11969},[11970,11971],{"id":11401,"depth":17,"text":11401},{"id":11607,"depth":17,"text":11608},{"id":11749,"depth":1260,"text":11750},{"id":11832,"depth":1260,"text":11833},{"id":11859,"depth":1260,"text":11860},{"id":7222,"depth":1260,"text":7222},"تعلم كيفية بناء تطبيقات ويب سريعة وحديثة مع Nuxt 3 وNuxt 4. دليل شامل يغطي الإعداد، الميزات الرئيسية، أفضل الممارسات، وأمثلة واقعية.","https://images.unsplash.com/photo-1559028012-481c04fa702d?q=80&w=1200",{"excerpt":11979},{"type":13,"value":11980},[11981,11983,11985,11987],[30,11982,8280],{},[30,11984,8283],{},[68,11986,8287],{"id":8286},[30,11988,8290],{},"/albda-ma-nuxt","2024-05-01",{"title":8275,"description":11976},"البدء-مع-nuxt",[11994,2982,2885,1938,2886,11995],"nuxt","ssr","Lw9VBxaxsneCZCZ4osRPhVZMzK0OzHDoWrQpq-Rsa4U",{"id":11998,"title":11999,"author":26,"body":12000,"category":19,"description":16716,"extension":7,"image":7277,"isDraft":1304,"isFeatured":1305,"locale":9,"meta":16717,"navigation":1305,"path":16722,"publishedAt":16723,"readingTime":3342,"seo":16724,"stem":16725,"tags":16726,"updatedAt":16723,"__hash__":16732},"articles_ar/بناء-مدونة-متعددة-اللغات-باستخدام-nuxt-content.md","بناء مدونة احترافية متعددة اللغات باستخدام Nuxt Content و Nuxt i18n",{"type":13,"value":12001,"toc":16684},[12002,12005,12009,12012,12038,12042,12045,12062,12066,12069,12097,12100,12128,12132,12137,12449,12453,12456,12462,12468,12553,12559,12633,12637,12644,13247,13251,13256,13928,13932,13938,14478,14482,14488,14789,14793,14796,14801,15083,15086,15201,15207,15589,15593,15600,15833,15837,15842,15938,15944,16021,16026,16120,16124,16128,16131,16145,16149,16152,16171,16175,16181,16255,16259,16262,16283,16287,16290,16383,16387,16391,16397,16437,16441,16451,16471,16475,16486,16525,16529,16533,16539,16594,16598,16601,16605,16612,16651,16653,16656,16673,16676,16679,16681],[30,12003,12004],{},"هذا الدليل سيرشدك خطوة بخطوة لبناء نظام مدونة متعدد اللغات متكامل باستخدام Nuxt 3 و Nuxt Content و Nuxt i18n. أنت تقرأ الآن مدونة مبنية بالضبط بهذه التقنيات! سأشارك معك تفاصيل التطبيق الحقيقي والكود والممارسات الأفضل التي استخدمتها.",[68,12006,12008],{"id":12007},"لماذا-بناء-مدونة-متعددة-اللغات","لماذا بناء مدونة متعددة اللغات؟",[30,12010,12011],{},"قبل الخوض في التفاصيل التقنية، دعنا نفهم الفوائد:",[49,12013,12014,12020,12026,12032],{},[52,12015,12016,12019],{},[37,12017,12018],{},"وصول أوسع",": الوصول إلى جماهير عالمية بلغاتهم الأم",[52,12021,12022,12025],{},[37,12023,12024],{},"تحسين محركات البحث",": الظهور في نتائج البحث عبر مناطق لغوية مختلفة",[52,12027,12028,12031],{},[37,12029,12030],{},"تجربة مستخدم أفضل",": المستخدمون يتفاعلون أكثر مع المحتوى بلغتهم المفضلة",[52,12033,12034,12037],{},[37,12035,12036],{},"صورة احترافية",": تظهر الالتزام بخدمة جماهير متنوعة",[68,12039,12041],{"id":12040},"نظرة-عامة-على-المشروع","نظرة عامة على المشروع",[30,12043,12044],{},"تدعم هذه المدونة كلاً من الإنجليزية والعربية (مع دعم RTL)، وتتضمن:",[49,12046,12047,12050,12053,12056,12059],{},[52,12048,12049],{},"تنظيم المحتوى حسب اللغة",[52,12051,12052],{},"توطين ديناميكي للفئات والكتّاب",[52,12054,12055],{},"تحسين SEO مع علامات hreflang",[52,12057,12058],{},"مبدّل اللغات",[52,12060,12061],{},"تصميم متجاوب مع دعم RTL/LTR",[68,12063,12065],{"id":12064},"الخطوة-1-إعداد-المشروع","الخطوة 1: إعداد المشروع",[30,12067,12068],{},"أولاً، أنشئ مشروع Nuxt 3 جديد:",[441,12070,12072],{"className":8465,"code":12071,"language":8467,"meta":16,"style":16},"npx nuxi@latest init my-multilingual-blog\ncd my-multilingual-blog\nnpm install\n",[448,12073,12074,12085,12091],{"__ignoreMap":16},[1608,12075,12076,12078,12080,12082],{"class":1785,"line":1786},[1608,12077,8494],{"class":2017},[1608,12079,8497],{"class":2068},[1608,12081,8500],{"class":2068},[1608,12083,12084],{"class":2068}," my-multilingual-blog\n",[1608,12086,12087,12089],{"class":1785,"line":1260},[1608,12088,8528],{"class":8527},[1608,12090,12084],{"class":2068},[1608,12092,12093,12095],{"class":1785,"line":17},[1608,12094,8535],{"class":2017},[1608,12096,8538],{"class":2068},[30,12098,12099],{},"ثبّت المكتبات المطلوبة:",[441,12101,12103],{"className":8465,"code":12102,"language":8467,"meta":16,"style":16},"npm install @nuxt/content @nuxtjs/i18n @nuxtjs/tailwindcss\nnpm install dayjs\n",[448,12104,12105,12119],{"__ignoreMap":16},[1608,12106,12107,12109,12111,12114,12117],{"class":1785,"line":1786},[1608,12108,8535],{"class":2017},[1608,12110,10548],{"class":2068},[1608,12112,12113],{"class":2068}," @nuxt/content",[1608,12115,12116],{"class":2068}," @nuxtjs/i18n",[1608,12118,10551],{"class":2068},[1608,12120,12121,12123,12125],{"class":1785,"line":1260},[1608,12122,8535],{"class":2017},[1608,12124,10548],{"class":2068},[1608,12126,12127],{"class":2068}," dayjs\n",[68,12129,12131],{"id":12130},"الخطوة-2-تكوين-وحدات-nuxt","الخطوة 2: تكوين وحدات Nuxt",[30,12133,12134,12135,1970],{},"حدّث ملف ",[448,12136,10556],{},[441,12138,12140],{"className":1936,"code":12139,"language":1938,"meta":16,"style":16},"// nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: [\n    \"@nuxt/content\",\n    \"@nuxtjs/i18n\",\n    \"@nuxtjs/tailwindcss\"\n  ],\n  \n  i18n: {\n    locales: [\n      {\n        code: \"en\",\n        iso: \"en-US\",\n        name: \"English\",\n        file: \"en.json\",\n        dir: \"ltr\"\n      },\n      {\n        code: \"ar\",\n        iso: \"ar-SA\",\n        name: \"العربية\",\n        file: \"ar.json\",\n        dir: \"rtl\" // مهم للغة العربية\n      }\n    ],\n    defaultLocale: \"en\",\n    strategy: \"prefix_except_default\", // روابط: /blog, /ar/blog\n    lazy: true,\n    langDir: \"i18n/locales/\",\n    detectBrowserLanguage: {\n      useCookie: true,\n      cookieKey: \"i18n_redirected\",\n      redirectOn: \"root\"\n    }\n  },\n\n  content: {\n    highlight: {\n      theme: \"github-dark\"\n    }\n  }\n});\n",[448,12141,12142,12146,12156,12163,12170,12177,12182,12187,12191,12198,12205,12210,12220,12230,12240,12250,12258,12263,12267,12276,12285,12294,12303,12313,12318,12323,12332,12345,12354,12364,12371,12380,12390,12398,12402,12406,12410,12417,12425,12434,12439,12444],{"__ignoreMap":16},[1608,12143,12144],{"class":1785,"line":1786},[1608,12145,11008],{"class":1945},[1608,12147,12148,12150,12152,12154],{"class":1785,"line":1260},[1608,12149,3483],{"class":2046},[1608,12151,7160],{"class":2046},[1608,12153,10570],{"class":2017},[1608,12155,7166],{"class":1959},[1608,12157,12158,12160],{"class":1785,"line":17},[1608,12159,10577],{"class":2058},[1608,12161,12162],{"class":1959}," [\n",[1608,12164,12165,12168],{"class":1785,"line":1802},[1608,12166,12167],{"class":2068},"    \"@nuxt/content\"",[1608,12169,3694],{"class":1959},[1608,12171,12172,12175],{"class":1785,"line":1808},[1608,12173,12174],{"class":2068},"    \"@nuxtjs/i18n\"",[1608,12176,3694],{"class":1959},[1608,12178,12179],{"class":1785,"line":1814},[1608,12180,12181],{"class":2068},"    \"@nuxtjs/tailwindcss\"\n",[1608,12183,12184],{"class":1785,"line":1820},[1608,12185,12186],{"class":1959},"  ],\n",[1608,12188,12189],{"class":1785,"line":1825},[1608,12190,10139],{"class":1959},[1608,12192,12193,12196],{"class":1785,"line":1831},[1608,12194,12195],{"class":2058},"  i18n:",[1608,12197,1960],{"class":1959},[1608,12199,12200,12203],{"class":1785,"line":1333},[1608,12201,12202],{"class":2058},"    locales:",[1608,12204,12162],{"class":1959},[1608,12206,12207],{"class":1785,"line":2075},[1608,12208,12209],{"class":1959},"      {\n",[1608,12211,12212,12215,12218],{"class":1785,"line":2099},[1608,12213,12214],{"class":2058},"        code:",[1608,12216,12217],{"class":2068}," \"en\"",[1608,12219,3694],{"class":1959},[1608,12221,12222,12225,12228],{"class":1785,"line":2119},[1608,12223,12224],{"class":2058},"        iso:",[1608,12226,12227],{"class":2068}," \"en-US\"",[1608,12229,3694],{"class":1959},[1608,12231,12232,12235,12238],{"class":1785,"line":2129},[1608,12233,12234],{"class":2058},"        name:",[1608,12236,12237],{"class":2068}," \"English\"",[1608,12239,3694],{"class":1959},[1608,12241,12242,12245,12248],{"class":1785,"line":1635},[1608,12243,12244],{"class":2058},"        file:",[1608,12246,12247],{"class":2068}," \"en.json\"",[1608,12249,3694],{"class":1959},[1608,12251,12252,12255],{"class":1785,"line":2296},[1608,12253,12254],{"class":2058},"        dir:",[1608,12256,12257],{"class":2068}," \"ltr\"\n",[1608,12259,12260],{"class":1785,"line":2302},[1608,12261,12262],{"class":1959},"      },\n",[1608,12264,12265],{"class":1785,"line":2308},[1608,12266,12209],{"class":1959},[1608,12268,12269,12271,12274],{"class":1785,"line":3279},[1608,12270,12214],{"class":2058},[1608,12272,12273],{"class":2068}," \"ar\"",[1608,12275,3694],{"class":1959},[1608,12277,12278,12280,12283],{"class":1785,"line":3284},[1608,12279,12224],{"class":2058},[1608,12281,12282],{"class":2068}," \"ar-SA\"",[1608,12284,3694],{"class":1959},[1608,12286,12287,12289,12292],{"class":1785,"line":3293},[1608,12288,12234],{"class":2058},[1608,12290,12291],{"class":2068}," \"العربية\"",[1608,12293,3694],{"class":1959},[1608,12295,12296,12298,12301],{"class":1785,"line":3298},[1608,12297,12244],{"class":2058},[1608,12299,12300],{"class":2068}," \"ar.json\"",[1608,12302,3694],{"class":1959},[1608,12304,12305,12307,12310],{"class":1785,"line":3308},[1608,12306,12254],{"class":2058},[1608,12308,12309],{"class":2068}," \"rtl\"",[1608,12311,12312],{"class":1945}," // مهم للغة العربية\n",[1608,12314,12315],{"class":1785,"line":3318},[1608,12316,12317],{"class":1959},"      }\n",[1608,12319,12320],{"class":1785,"line":3342},[1608,12321,12322],{"class":1959},"    ],\n",[1608,12324,12325,12328,12330],{"class":1785,"line":3365},[1608,12326,12327],{"class":2058},"    defaultLocale:",[1608,12329,12217],{"class":2068},[1608,12331,3694],{"class":1959},[1608,12333,12334,12337,12340,12342],{"class":1785,"line":3402},[1608,12335,12336],{"class":2058},"    strategy:",[1608,12338,12339],{"class":2068}," \"prefix_except_default\"",[1608,12341,3020],{"class":1959},[1608,12343,12344],{"class":1945},"// روابط: /blog, /ar/blog\n",[1608,12346,12347,12350,12352],{"class":1785,"line":3412},[1608,12348,12349],{"class":2058},"    lazy:",[1608,12351,5032],{"class":5031},[1608,12353,3694],{"class":1959},[1608,12355,12356,12359,12362],{"class":1785,"line":3704},[1608,12357,12358],{"class":2058},"    langDir:",[1608,12360,12361],{"class":2068}," \"i18n/locales/\"",[1608,12363,3694],{"class":1959},[1608,12365,12366,12369],{"class":1785,"line":3712},[1608,12367,12368],{"class":2058},"    detectBrowserLanguage:",[1608,12370,1960],{"class":1959},[1608,12372,12373,12376,12378],{"class":1785,"line":3720},[1608,12374,12375],{"class":2058},"      useCookie:",[1608,12377,5032],{"class":5031},[1608,12379,3694],{"class":1959},[1608,12381,12382,12385,12388],{"class":1785,"line":3728},[1608,12383,12384],{"class":2058},"      cookieKey:",[1608,12386,12387],{"class":2068}," \"i18n_redirected\"",[1608,12389,3694],{"class":1959},[1608,12391,12392,12395],{"class":1785,"line":3734},[1608,12393,12394],{"class":2058},"      redirectOn:",[1608,12396,12397],{"class":2068}," \"root\"\n",[1608,12399,12400],{"class":1785,"line":3739},[1608,12401,2305],{"class":1959},[1608,12403,12404],{"class":1785,"line":4422},[1608,12405,7197],{"class":1959},[1608,12407,12408],{"class":1785,"line":4431},[1608,12409,1805],{"emptyLinePlaceholder":1305},[1608,12411,12412,12415],{"class":1785,"line":4440},[1608,12413,12414],{"class":2058},"  content:",[1608,12416,1960],{"class":1959},[1608,12418,12420,12423],{"class":1785,"line":12419},38,[1608,12421,12422],{"class":2058},"    highlight:",[1608,12424,1960],{"class":1959},[1608,12426,12428,12431],{"class":1785,"line":12427},39,[1608,12429,12430],{"class":2058},"      theme:",[1608,12432,12433],{"class":2068}," \"github-dark\"\n",[1608,12435,12437],{"class":1785,"line":12436},40,[1608,12438,2305],{"class":1959},[1608,12440,12442],{"class":1785,"line":12441},41,[1608,12443,3619],{"class":1959},[1608,12445,12447],{"class":1785,"line":12446},42,[1608,12448,3229],{"class":1959},[68,12450,12452],{"id":12451},"الخطوة-3-إنشاء-هيكل-المحتوى","الخطوة 3: إنشاء هيكل المحتوى",[30,12454,12455],{},"نظّم محتواك حسب اللغة:",[441,12457,12460],{"className":12458,"code":12459,"language":446},[444],"content/\n├── en/\n│   ├── articles/\n│   │   ├── my-first-post.md\n│   │   └── another-post.md\n│   ├── authors/\n│   │   └── raed-bahri.md\n│   └── categories/\n│       └── development.md\n├── ar/\n│   ├── articles/\n│   │   ├── my-first-post.md\n│   │   └── another-post.md\n│   ├── authors/\n│   │   └── رائد-البحري.md\n│   └── categories/\n│       └── التطوير.md\n",[448,12461,12459],{"__ignoreMap":16},[30,12463,12464,12465,1970],{},"مثال على مقال إنجليزي في ",[448,12466,12467],{},"content/en/articles/my-first-post.md",[441,12469,12473],{"className":12470,"code":12471,"language":12472,"meta":16,"style":16},"language-markdown shiki shiki-themes github-light dark-plus dark-plus","---\ntitle: \"My First Blog Post\"\ndescription: \"Introduction to my multilingual blog\"\npublishedAt: \"2025-01-10\"\nauthor: \"رائد-البحري\"\ncategory: \"development\"\ntags:\n  - nuxt\n  - tutorial\nimage: \"/images/blog/post-1.jpg\"\nisFeatured: true\nreadingTime: 5\nlocale: \"en\"\n---\n\nYour content here...\n","markdown",[448,12474,12475,12480,12485,12490,12495,12500,12505,12510,12515,12520,12525,12530,12535,12540,12544,12548],{"__ignoreMap":16},[1608,12476,12477],{"class":1785,"line":1786},[1608,12478,12479],{},"---\n",[1608,12481,12482],{"class":1785,"line":1260},[1608,12483,12484],{},"title: \"My First Blog Post\"\n",[1608,12486,12487],{"class":1785,"line":17},[1608,12488,12489],{},"description: \"Introduction to my multilingual blog\"\n",[1608,12491,12492],{"class":1785,"line":1802},[1608,12493,12494],{},"publishedAt: \"2025-01-10\"\n",[1608,12496,12497],{"class":1785,"line":1808},[1608,12498,12499],{},"author: \"رائد-البحري\"\n",[1608,12501,12502],{"class":1785,"line":1814},[1608,12503,12504],{},"category: \"development\"\n",[1608,12506,12507],{"class":1785,"line":1820},[1608,12508,12509],{},"tags:\n",[1608,12511,12512],{"class":1785,"line":1825},[1608,12513,12514],{},"  - nuxt\n",[1608,12516,12517],{"class":1785,"line":1831},[1608,12518,12519],{},"  - tutorial\n",[1608,12521,12522],{"class":1785,"line":1333},[1608,12523,12524],{},"image: \"/images/blog/post-1.jpg\"\n",[1608,12526,12527],{"class":1785,"line":2075},[1608,12528,12529],{},"isFeatured: true\n",[1608,12531,12532],{"class":1785,"line":2099},[1608,12533,12534],{},"readingTime: 5\n",[1608,12536,12537],{"class":1785,"line":2119},[1608,12538,12539],{},"locale: \"en\"\n",[1608,12541,12542],{"class":1785,"line":2129},[1608,12543,12479],{},[1608,12545,12546],{"class":1785,"line":1635},[1608,12547,1805],{"emptyLinePlaceholder":1305},[1608,12549,12550],{"class":1785,"line":2296},[1608,12551,12552],{},"Your content here...\n",[30,12554,12555,12556,1970],{},"مثال على مقال عربي في ",[448,12557,12558],{},"content/ar/articles/my-first-post.md",[441,12560,12562],{"className":12470,"code":12561,"language":12472,"meta":16,"style":16},"---\ntitle: \"مقالتي الأولى\"\ndescription: \"مقدمة إلى مدونتي متعددة اللغات\"\npublishedAt: \"2025-01-10\"\nauthor: \"رائد-البحري\"\ncategory: \"development\"\ntags:\n  - nuxt\n  - تعليم\nimage: \"/images/blog/post-1.jpg\"\nisFeatured: true\nreadingTime: 5\nlocale: \"ar\"\n---\n\nالمحتوى هنا...\n",[448,12563,12564,12568,12573,12578,12582,12586,12590,12594,12598,12603,12607,12611,12615,12620,12624,12628],{"__ignoreMap":16},[1608,12565,12566],{"class":1785,"line":1786},[1608,12567,12479],{},[1608,12569,12570],{"class":1785,"line":1260},[1608,12571,12572],{},"title: \"مقالتي الأولى\"\n",[1608,12574,12575],{"class":1785,"line":17},[1608,12576,12577],{},"description: \"مقدمة إلى مدونتي متعددة اللغات\"\n",[1608,12579,12580],{"class":1785,"line":1802},[1608,12581,12494],{},[1608,12583,12584],{"class":1785,"line":1808},[1608,12585,12499],{},[1608,12587,12588],{"class":1785,"line":1814},[1608,12589,12504],{},[1608,12591,12592],{"class":1785,"line":1820},[1608,12593,12509],{},[1608,12595,12596],{"class":1785,"line":1825},[1608,12597,12514],{},[1608,12599,12600],{"class":1785,"line":1831},[1608,12601,12602],{},"  - تعليم\n",[1608,12604,12605],{"class":1785,"line":1333},[1608,12606,12524],{},[1608,12608,12609],{"class":1785,"line":2075},[1608,12610,12529],{},[1608,12612,12613],{"class":1785,"line":2099},[1608,12614,12534],{},[1608,12616,12617],{"class":1785,"line":2119},[1608,12618,12619],{},"locale: \"ar\"\n",[1608,12621,12622],{"class":1785,"line":2129},[1608,12623,12479],{},[1608,12625,12626],{"class":1785,"line":1635},[1608,12627,1805],{"emptyLinePlaceholder":1305},[1608,12629,12630],{"class":1785,"line":2296},[1608,12631,12632],{},"المحتوى هنا...\n",[68,12634,12636],{"id":12635},"الخطوة-4-إنشاء-تعريفات-الأنواع","الخطوة 4: إنشاء تعريفات الأنواع",[30,12638,12639,12640,12643],{},"أنشئ ملف ",[448,12641,12642],{},"types/content.ts"," لدعم TypeScript:",[441,12645,12647],{"className":1936,"code":12646,"language":1938,"meta":16,"style":16},"// types/content.ts\nimport { z } from \"zod\";\n\nexport const ArticleSchema = z.object({\n  title: z.string(),\n  description: z.string(),\n  publishedAt: z.string(),\n  author: z.string(),\n  category: z.string(),\n  tags: z.array(z.string()).optional(),\n  image: z.string().optional(),\n  isFeatured: z.boolean().optional(),\n  readingTime: z.number().optional(),\n  locale: z.string(),\n});\n\nexport type Article = z.infer\u003Ctypeof ArticleSchema> & {\n  path: string;\n  _path: string;\n};\n\nexport type Category = {\n  title: string;\n  description: string;\n  slug: string;\n  image?: string;\n  locale: string;\n  _path: string;\n};\n\nexport type Author = {\n  name: string;\n  slug: string;\n  bio: string;\n  avatar: string;\n  locale: string;\n};\n\n// دوال مساعدة للحصول على المجموعات\nexport const getArticlesCollection = (locale: string) => {\n  return `${locale}/articles`;\n};\n\nexport const getCategoriesCollection = (locale: string) => {\n  return `${locale}/categories`;\n};\n\nexport const getAuthorsCollection = (locale: string) => {\n  return `${locale}/authors`;\n};\n",[448,12648,12649,12654,12672,12676,12697,12710,12722,12735,12748,12761,12788,12805,12823,12841,12854,12858,12862,12896,12907,12918,12923,12927,12940,12951,12962,12973,12984,12995,13005,13009,13013,13026,13036,13046,13057,13068,13078,13082,13086,13091,13117,13135,13139,13144,13170,13188,13193,13198,13224,13242],{"__ignoreMap":16},[1608,12650,12651],{"class":1785,"line":1786},[1608,12652,12653],{"class":1945},"// types/content.ts\n",[1608,12655,12656,12658,12660,12663,12665,12667,12670],{"class":1785,"line":1260},[1608,12657,3013],{"class":2046},[1608,12659,2032],{"class":1959},[1608,12661,12662],{"class":2058},"z",[1608,12664,3037],{"class":1959},[1608,12666,3040],{"class":2046},[1608,12668,12669],{"class":2068}," \"zod\"",[1608,12671,1977],{"class":1959},[1608,12673,12674],{"class":1785,"line":17},[1608,12675,1805],{"emptyLinePlaceholder":1305},[1608,12677,12678,12680,12682,12685,12687,12690,12692,12695],{"class":1785,"line":1802},[1608,12679,3483],{"class":2046},[1608,12681,3486],{"class":1951},[1608,12683,12684],{"class":3062}," ArticleSchema",[1608,12686,3066],{"class":1969},[1608,12688,12689],{"class":2058}," z",[1608,12691,44],{"class":1959},[1608,12693,12694],{"class":2017},"object",[1608,12696,7166],{"class":1959},[1608,12698,12699,12701,12703,12705,12707],{"class":1785,"line":1808},[1608,12700,8613],{"class":2058},[1608,12702,12689],{"class":2058},[1608,12704,44],{"class":1959},[1608,12706,4150],{"class":2017},[1608,12708,12709],{"class":1959},"(),\n",[1608,12711,12712,12714,12716,12718,12720],{"class":1785,"line":1814},[1608,12713,11335],{"class":2058},[1608,12715,12689],{"class":2058},[1608,12717,44],{"class":1959},[1608,12719,4150],{"class":2017},[1608,12721,12709],{"class":1959},[1608,12723,12724,12727,12729,12731,12733],{"class":1785,"line":1820},[1608,12725,12726],{"class":2058},"  publishedAt:",[1608,12728,12689],{"class":2058},[1608,12730,44],{"class":1959},[1608,12732,4150],{"class":2017},[1608,12734,12709],{"class":1959},[1608,12736,12737,12740,12742,12744,12746],{"class":1785,"line":1825},[1608,12738,12739],{"class":2058},"  author:",[1608,12741,12689],{"class":2058},[1608,12743,44],{"class":1959},[1608,12745,4150],{"class":2017},[1608,12747,12709],{"class":1959},[1608,12749,12750,12753,12755,12757,12759],{"class":1785,"line":1831},[1608,12751,12752],{"class":2058},"  category:",[1608,12754,12689],{"class":2058},[1608,12756,44],{"class":1959},[1608,12758,4150],{"class":2017},[1608,12760,12709],{"class":1959},[1608,12762,12763,12766,12768,12770,12773,12775,12777,12779,12781,12783,12786],{"class":1785,"line":1333},[1608,12764,12765],{"class":2058},"  tags:",[1608,12767,12689],{"class":2058},[1608,12769,44],{"class":1959},[1608,12771,12772],{"class":2017},"array",[1608,12774,3072],{"class":1959},[1608,12776,12662],{"class":2058},[1608,12778,44],{"class":1959},[1608,12780,4150],{"class":2017},[1608,12782,6236],{"class":1959},[1608,12784,12785],{"class":2017},"optional",[1608,12787,12709],{"class":1959},[1608,12789,12790,12793,12795,12797,12799,12801,12803],{"class":1785,"line":2075},[1608,12791,12792],{"class":2058},"  image:",[1608,12794,12689],{"class":2058},[1608,12796,44],{"class":1959},[1608,12798,4150],{"class":2017},[1608,12800,9968],{"class":1959},[1608,12802,12785],{"class":2017},[1608,12804,12709],{"class":1959},[1608,12806,12807,12810,12812,12814,12817,12819,12821],{"class":1785,"line":2099},[1608,12808,12809],{"class":2058},"  isFeatured:",[1608,12811,12689],{"class":2058},[1608,12813,44],{"class":1959},[1608,12815,12816],{"class":2017},"boolean",[1608,12818,9968],{"class":1959},[1608,12820,12785],{"class":2017},[1608,12822,12709],{"class":1959},[1608,12824,12825,12828,12830,12832,12835,12837,12839],{"class":1785,"line":2119},[1608,12826,12827],{"class":2058},"  readingTime:",[1608,12829,12689],{"class":2058},[1608,12831,44],{"class":1959},[1608,12833,12834],{"class":2017},"number",[1608,12836,9968],{"class":1959},[1608,12838,12785],{"class":2017},[1608,12840,12709],{"class":1959},[1608,12842,12843,12846,12848,12850,12852],{"class":1785,"line":2129},[1608,12844,12845],{"class":2058},"  locale:",[1608,12847,12689],{"class":2058},[1608,12849,44],{"class":1959},[1608,12851,4150],{"class":2017},[1608,12853,12709],{"class":1959},[1608,12855,12856],{"class":1785,"line":1635},[1608,12857,3229],{"class":1959},[1608,12859,12860],{"class":1785,"line":2296},[1608,12861,1805],{"emptyLinePlaceholder":1305},[1608,12863,12864,12866,12869,12872,12874,12876,12878,12881,12883,12886,12888,12891,12894],{"class":1785,"line":2302},[1608,12865,3483],{"class":2046},[1608,12867,12868],{"class":1951}," type",[1608,12870,12871],{"class":1955}," Article",[1608,12873,3066],{"class":1969},[1608,12875,12689],{"class":1955},[1608,12877,44],{"class":1959},[1608,12879,12880],{"class":1955},"infer",[1608,12882,2990],{"class":1959},[1608,12884,12885],{"class":1951},"typeof",[1608,12887,12684],{"class":2058},[1608,12889,12890],{"class":1959},"> ",[1608,12892,12893],{"class":1969},"&",[1608,12895,1960],{"class":1959},[1608,12897,12898,12901,12903,12905],{"class":1785,"line":2308},[1608,12899,12900],{"class":1965},"  path",[1608,12902,1970],{"class":1969},[1608,12904,1987],{"class":1973},[1608,12906,1977],{"class":1959},[1608,12908,12909,12912,12914,12916],{"class":1785,"line":3279},[1608,12910,12911],{"class":1965},"  _path",[1608,12913,1970],{"class":1969},[1608,12915,1987],{"class":1973},[1608,12917,1977],{"class":1959},[1608,12919,12920],{"class":1785,"line":3284},[1608,12921,12922],{"class":1959},"};\n",[1608,12924,12925],{"class":1785,"line":3293},[1608,12926,1805],{"emptyLinePlaceholder":1305},[1608,12928,12929,12931,12933,12936,12938],{"class":1785,"line":3298},[1608,12930,3483],{"class":2046},[1608,12932,12868],{"class":1951},[1608,12934,12935],{"class":1955}," Category",[1608,12937,3066],{"class":1969},[1608,12939,1960],{"class":1959},[1608,12941,12942,12945,12947,12949],{"class":1785,"line":3308},[1608,12943,12944],{"class":1965},"  title",[1608,12946,1970],{"class":1969},[1608,12948,1987],{"class":1973},[1608,12950,1977],{"class":1959},[1608,12952,12953,12956,12958,12960],{"class":1785,"line":3318},[1608,12954,12955],{"class":1965},"  description",[1608,12957,1970],{"class":1969},[1608,12959,1987],{"class":1973},[1608,12961,1977],{"class":1959},[1608,12963,12964,12967,12969,12971],{"class":1785,"line":3342},[1608,12965,12966],{"class":1965},"  slug",[1608,12968,1970],{"class":1969},[1608,12970,1987],{"class":1973},[1608,12972,1977],{"class":1959},[1608,12974,12975,12978,12980,12982],{"class":1785,"line":3365},[1608,12976,12977],{"class":1965},"  image",[1608,12979,4086],{"class":1969},[1608,12981,1987],{"class":1973},[1608,12983,1977],{"class":1959},[1608,12985,12986,12989,12991,12993],{"class":1785,"line":3402},[1608,12987,12988],{"class":1965},"  locale",[1608,12990,1970],{"class":1969},[1608,12992,1987],{"class":1973},[1608,12994,1977],{"class":1959},[1608,12996,12997,12999,13001,13003],{"class":1785,"line":3412},[1608,12998,12911],{"class":1965},[1608,13000,1970],{"class":1969},[1608,13002,1987],{"class":1973},[1608,13004,1977],{"class":1959},[1608,13006,13007],{"class":1785,"line":3704},[1608,13008,12922],{"class":1959},[1608,13010,13011],{"class":1785,"line":3712},[1608,13012,1805],{"emptyLinePlaceholder":1305},[1608,13014,13015,13017,13019,13022,13024],{"class":1785,"line":3720},[1608,13016,3483],{"class":2046},[1608,13018,12868],{"class":1951},[1608,13020,13021],{"class":1955}," Author",[1608,13023,3066],{"class":1969},[1608,13025,1960],{"class":1959},[1608,13027,13028,13030,13032,13034],{"class":1785,"line":3728},[1608,13029,1982],{"class":1965},[1608,13031,1970],{"class":1969},[1608,13033,1987],{"class":1973},[1608,13035,1977],{"class":1959},[1608,13037,13038,13040,13042,13044],{"class":1785,"line":3734},[1608,13039,12966],{"class":1965},[1608,13041,1970],{"class":1969},[1608,13043,1987],{"class":1973},[1608,13045,1977],{"class":1959},[1608,13047,13048,13051,13053,13055],{"class":1785,"line":3739},[1608,13049,13050],{"class":1965},"  bio",[1608,13052,1970],{"class":1969},[1608,13054,1987],{"class":1973},[1608,13056,1977],{"class":1959},[1608,13058,13059,13062,13064,13066],{"class":1785,"line":4422},[1608,13060,13061],{"class":1965},"  avatar",[1608,13063,1970],{"class":1969},[1608,13065,1987],{"class":1973},[1608,13067,1977],{"class":1959},[1608,13069,13070,13072,13074,13076],{"class":1785,"line":4431},[1608,13071,12988],{"class":1965},[1608,13073,1970],{"class":1969},[1608,13075,1987],{"class":1973},[1608,13077,1977],{"class":1959},[1608,13079,13080],{"class":1785,"line":4440},[1608,13081,12922],{"class":1959},[1608,13083,13084],{"class":1785,"line":12419},[1608,13085,1805],{"emptyLinePlaceholder":1305},[1608,13087,13088],{"class":1785,"line":12427},[1608,13089,13090],{"class":1945},"// دوال مساعدة للحصول على المجموعات\n",[1608,13092,13093,13095,13097,13100,13102,13104,13107,13109,13111,13113,13115],{"class":1785,"line":12436},[1608,13094,3483],{"class":2046},[1608,13096,3486],{"class":1951},[1608,13098,13099],{"class":2017}," getArticlesCollection",[1608,13101,3066],{"class":1969},[1608,13103,4554],{"class":1959},[1608,13105,13106],{"class":1965},"locale",[1608,13108,1970],{"class":1969},[1608,13110,1987],{"class":1973},[1608,13112,3183],{"class":1959},[1608,13114,3137],{"class":1951},[1608,13116,1960],{"class":1959},[1608,13118,13119,13121,13124,13126,13128,13130,13133],{"class":1785,"line":12441},[1608,13120,2047],{"class":2046},[1608,13122,13123],{"class":2068}," `",[1608,13125,3206],{"class":3205},[1608,13127,13106],{"class":2058},[1608,13129,2089],{"class":3205},[1608,13131,13132],{"class":2068},"/articles`",[1608,13134,1977],{"class":1959},[1608,13136,13137],{"class":1785,"line":12446},[1608,13138,12922],{"class":1959},[1608,13140,13142],{"class":1785,"line":13141},43,[1608,13143,1805],{"emptyLinePlaceholder":1305},[1608,13145,13147,13149,13151,13154,13156,13158,13160,13162,13164,13166,13168],{"class":1785,"line":13146},44,[1608,13148,3483],{"class":2046},[1608,13150,3486],{"class":1951},[1608,13152,13153],{"class":2017}," getCategoriesCollection",[1608,13155,3066],{"class":1969},[1608,13157,4554],{"class":1959},[1608,13159,13106],{"class":1965},[1608,13161,1970],{"class":1969},[1608,13163,1987],{"class":1973},[1608,13165,3183],{"class":1959},[1608,13167,3137],{"class":1951},[1608,13169,1960],{"class":1959},[1608,13171,13173,13175,13177,13179,13181,13183,13186],{"class":1785,"line":13172},45,[1608,13174,2047],{"class":2046},[1608,13176,13123],{"class":2068},[1608,13178,3206],{"class":3205},[1608,13180,13106],{"class":2058},[1608,13182,2089],{"class":3205},[1608,13184,13185],{"class":2068},"/categories`",[1608,13187,1977],{"class":1959},[1608,13189,13191],{"class":1785,"line":13190},46,[1608,13192,12922],{"class":1959},[1608,13194,13196],{"class":1785,"line":13195},47,[1608,13197,1805],{"emptyLinePlaceholder":1305},[1608,13199,13201,13203,13205,13208,13210,13212,13214,13216,13218,13220,13222],{"class":1785,"line":13200},48,[1608,13202,3483],{"class":2046},[1608,13204,3486],{"class":1951},[1608,13206,13207],{"class":2017}," getAuthorsCollection",[1608,13209,3066],{"class":1969},[1608,13211,4554],{"class":1959},[1608,13213,13106],{"class":1965},[1608,13215,1970],{"class":1969},[1608,13217,1987],{"class":1973},[1608,13219,3183],{"class":1959},[1608,13221,3137],{"class":1951},[1608,13223,1960],{"class":1959},[1608,13225,13227,13229,13231,13233,13235,13237,13240],{"class":1785,"line":13226},49,[1608,13228,2047],{"class":2046},[1608,13230,13123],{"class":2068},[1608,13232,3206],{"class":3205},[1608,13234,13106],{"class":2058},[1608,13236,2089],{"class":3205},[1608,13238,13239],{"class":2068},"/authors`",[1608,13241,1977],{"class":1959},[1608,13243,13245],{"class":1785,"line":13244},50,[1608,13246,12922],{"class":1959},[68,13248,13250],{"id":13249},"الخطوة-5-بناء-صفحة-فهرس-المدونة","الخطوة 5: بناء صفحة فهرس المدونة",[30,13252,12639,13253,1970],{},[448,13254,13255],{},"app/pages/index.vue",[441,13257,13259],{"className":2980,"code":13258,"language":2982,"meta":16,"style":16},"\u003Cscript setup lang=\"ts\">\nimport { getArticlesCollection, type Article } from \"@@/types/content\";\n\nconst { locale } = useI18n();\nconst localePath = useLocalePath();\n\n// جلب المقالات للغة الحالية\nconst { data: posts } = await useAsyncData\u003CArticle[]>(\n  `articles-${locale.value}`,\n  async () => {\n    const collection = getArticlesCollection(locale.value);\n    return queryCollection(collection).all();\n  },\n  { watch: [locale] } // مهم: مراقبة تغييرات اللغة\n);\n\n// الحصول على المقالات المميزة\nconst featuredPosts = computed(() => \n  posts.value?.filter(post => post.isFeatured) || []\n);\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cmain>\n    \u003Csection class=\"container py-12\">\n      \u003Ch1 class=\"text-4xl font-bold mb-8\">\n        {{ $t('blog.title') }}\n      \u003C/h1>\n      \n      \u003C!-- شبكة المقالات المميزة -->\n      \u003Cdiv class=\"grid md:grid-cols-2 lg:grid-cols-3 gap-6\">\n        \u003CNuxtLink\n          v-for=\"post in featuredPosts\"\n          :key=\"post.path\"\n          :to=\"localePath(post.path)\"\n          class=\"border rounded-lg overflow-hidden hover:shadow-lg transition\"\n        >\n          \u003Cimg \n            :src=\"post.image\" \n            :alt=\"post.title\"\n            class=\"w-full h-48 object-cover\"\n          />\n          \u003Cdiv class=\"p-4\">\n            \u003Ch2 class=\"text-xl font-bold mb-2\">{{ post.title }}\u003C/h2>\n            \u003Cp class=\"text-gray-600\">{{ post.description }}\u003C/p>\n          \u003C/div>\n        \u003C/NuxtLink>\n      \u003C/div>\n    \u003C/section>\n  \u003C/main>\n\u003C/template>\n",[448,13260,13261,13277,13302,13306,13324,13338,13342,13347,13376,13395,13406,13427,13446,13450,13468,13472,13476,13481,13498,13536,13540,13548,13552,13560,13568,13584,13599,13614,13622,13627,13632,13647,13654,13671,13691,13716,13726,13731,13741,13764,13783,13793,13798,13813,13845,13877,13886,13895,13903,13911,13919],{"__ignoreMap":16},[1608,13262,13263,13265,13267,13269,13271,13273,13275],{"class":1785,"line":1786},[1608,13264,2990],{"class":2989},[1608,13266,2994],{"class":2993},[1608,13268,2998],{"class":2997},[1608,13270,3001],{"class":2997},[1608,13272,2065],{"class":1959},[1608,13274,3006],{"class":2068},[1608,13276,2072],{"class":2989},[1608,13278,13279,13281,13283,13286,13288,13291,13293,13295,13297,13300],{"class":1785,"line":1260},[1608,13280,3013],{"class":2046},[1608,13282,2032],{"class":1959},[1608,13284,13285],{"class":2058},"getArticlesCollection",[1608,13287,3020],{"class":1959},[1608,13289,13290],{"class":2046},"type",[1608,13292,12871],{"class":2058},[1608,13294,3037],{"class":1959},[1608,13296,3040],{"class":2046},[1608,13298,13299],{"class":2068}," \"@@/types/content\"",[1608,13301,1977],{"class":1959},[1608,13303,13304],{"class":1785,"line":17},[1608,13305,1805],{"emptyLinePlaceholder":1305},[1608,13307,13308,13310,13312,13314,13316,13318,13321],{"class":1785,"line":1802},[1608,13309,3059],{"class":1951},[1608,13311,2032],{"class":1959},[1608,13313,13106],{"class":3062},[1608,13315,3037],{"class":1959},[1608,13317,2065],{"class":1969},[1608,13319,13320],{"class":2017}," useI18n",[1608,13322,13323],{"class":1959},"();\n",[1608,13325,13326,13328,13331,13333,13336],{"class":1785,"line":1808},[1608,13327,3059],{"class":1951},[1608,13329,13330],{"class":3062}," localePath",[1608,13332,3066],{"class":1969},[1608,13334,13335],{"class":2017}," useLocalePath",[1608,13337,13323],{"class":1959},[1608,13339,13340],{"class":1785,"line":1814},[1608,13341,1805],{"emptyLinePlaceholder":1305},[1608,13343,13344],{"class":1785,"line":1820},[1608,13345,13346],{"class":1945},"// جلب المقالات للغة الحالية\n",[1608,13348,13349,13351,13353,13355,13357,13360,13362,13364,13366,13368,13370,13373],{"class":1785,"line":1825},[1608,13350,3059],{"class":1951},[1608,13352,2032],{"class":1959},[1608,13354,8782],{"class":1965},[1608,13356,4147],{"class":1959},[1608,13358,13359],{"class":3062},"posts",[1608,13361,3037],{"class":1959},[1608,13363,2065],{"class":1969},[1608,13365,6920],{"class":2046},[1608,13367,6756],{"class":2017},[1608,13369,2990],{"class":1959},[1608,13371,13372],{"class":1955},"Article",[1608,13374,13375],{"class":1959},"[]>(\n",[1608,13377,13378,13381,13383,13385,13387,13389,13391,13393],{"class":1785,"line":1831},[1608,13379,13380],{"class":2068},"  `articles-",[1608,13382,3206],{"class":3205},[1608,13384,13106],{"class":2058},[1608,13386,44],{"class":3268},[1608,13388,3144],{"class":2058},[1608,13390,2089],{"class":3205},[1608,13392,3222],{"class":2068},[1608,13394,3694],{"class":1959},[1608,13396,13397,13400,13402,13404],{"class":1785,"line":1333},[1608,13398,13399],{"class":1951},"  async",[1608,13401,5463],{"class":1959},[1608,13403,3137],{"class":1951},[1608,13405,1960],{"class":1959},[1608,13407,13408,13410,13413,13415,13417,13419,13421,13423,13425],{"class":1785,"line":2075},[1608,13409,6154],{"class":1951},[1608,13411,13412],{"class":3062}," collection",[1608,13414,3066],{"class":1969},[1608,13416,13099],{"class":2017},[1608,13418,3072],{"class":1959},[1608,13420,13106],{"class":2058},[1608,13422,44],{"class":1959},[1608,13424,3144],{"class":2058},[1608,13426,3079],{"class":1959},[1608,13428,13429,13431,13434,13436,13439,13441,13444],{"class":1785,"line":2099},[1608,13430,11684],{"class":2046},[1608,13432,13433],{"class":2017}," queryCollection",[1608,13435,3072],{"class":1959},[1608,13437,13438],{"class":2058},"collection",[1608,13440,6390],{"class":1959},[1608,13442,13443],{"class":2017},"all",[1608,13445,13323],{"class":1959},[1608,13447,13448],{"class":1785,"line":2119},[1608,13449,7197],{"class":1959},[1608,13451,13452,13455,13458,13460,13462,13465],{"class":1785,"line":2129},[1608,13453,13454],{"class":1959},"  { ",[1608,13456,13457],{"class":2058},"watch:",[1608,13459,4141],{"class":1959},[1608,13461,13106],{"class":2058},[1608,13463,13464],{"class":1959},"] } ",[1608,13466,13467],{"class":1945},"// مهم: مراقبة تغييرات اللغة\n",[1608,13469,13470],{"class":1785,"line":1635},[1608,13471,3079],{"class":1959},[1608,13473,13474],{"class":1785,"line":2296},[1608,13475,1805],{"emptyLinePlaceholder":1305},[1608,13477,13478],{"class":1785,"line":2302},[1608,13479,13480],{"class":1945},"// الحصول على المقالات المميزة\n",[1608,13482,13483,13485,13488,13490,13492,13494,13496],{"class":1785,"line":2308},[1608,13484,3059],{"class":1951},[1608,13486,13487],{"class":3062}," featuredPosts",[1608,13489,3066],{"class":1969},[1608,13491,3131],{"class":2017},[1608,13493,3134],{"class":1959},[1608,13495,3137],{"class":1951},[1608,13497,10656],{"class":1959},[1608,13499,13500,13503,13505,13507,13510,13513,13515,13517,13520,13523,13525,13528,13530,13533],{"class":1785,"line":3279},[1608,13501,13502],{"class":2058},"  posts",[1608,13504,44],{"class":1959},[1608,13506,3144],{"class":2058},[1608,13508,13509],{"class":1959},"?.",[1608,13511,13512],{"class":2017},"filter",[1608,13514,3072],{"class":1959},[1608,13516,8787],{"class":1965},[1608,13518,13519],{"class":1951}," =>",[1608,13521,13522],{"class":2058}," post",[1608,13524,44],{"class":1959},[1608,13526,13527],{"class":2058},"isFeatured",[1608,13529,3183],{"class":1959},[1608,13531,13532],{"class":1969},"||",[1608,13534,13535],{"class":1959}," []\n",[1608,13537,13538],{"class":1785,"line":3284},[1608,13539,3079],{"class":1959},[1608,13541,13542,13544,13546],{"class":1785,"line":3293},[1608,13543,2092],{"class":2989},[1608,13545,2994],{"class":2993},[1608,13547,2072],{"class":2989},[1608,13549,13550],{"class":1785,"line":3298},[1608,13551,1805],{"emptyLinePlaceholder":1305},[1608,13553,13554,13556,13558],{"class":1785,"line":3308},[1608,13555,2990],{"class":2989},[1608,13557,3303],{"class":2993},[1608,13559,2072],{"class":2989},[1608,13561,13562,13564,13566],{"class":1785,"line":3318},[1608,13563,3311],{"class":2989},[1608,13565,9064],{"class":2993},[1608,13567,2072],{"class":2989},[1608,13569,13570,13572,13575,13577,13579,13582],{"class":1785,"line":3342},[1608,13571,2055],{"class":2989},[1608,13573,13574],{"class":2993},"section",[1608,13576,4251],{"class":2997},[1608,13578,2065],{"class":1959},[1608,13580,13581],{"class":2068},"\"container py-12\"",[1608,13583,2072],{"class":2989},[1608,13585,13586,13588,13590,13592,13594,13597],{"class":1785,"line":3365},[1608,13587,2078],{"class":2989},[1608,13589,8655],{"class":2993},[1608,13591,4251],{"class":2997},[1608,13593,2065],{"class":1959},[1608,13595,13596],{"class":2068},"\"text-4xl font-bold mb-8\"",[1608,13598,2072],{"class":2989},[1608,13600,13601,13603,13606,13608,13611],{"class":1785,"line":3402},[1608,13602,9678],{"class":1959},[1608,13604,13605],{"class":2017},"$t",[1608,13607,3072],{"class":1959},[1608,13609,13610],{"class":2068},"'blog.title'",[1608,13612,13613],{"class":1959},") }}\n",[1608,13615,13616,13618,13620],{"class":1785,"line":3412},[1608,13617,9041],{"class":2989},[1608,13619,8655],{"class":2993},[1608,13621,2072],{"class":2989},[1608,13623,13624],{"class":1785,"line":3704},[1608,13625,13626],{"class":1959},"      \n",[1608,13628,13629],{"class":1785,"line":3712},[1608,13630,13631],{"class":1945},"      \u003C!-- شبكة المقالات المميزة -->\n",[1608,13633,13634,13636,13638,13640,13642,13645],{"class":1785,"line":3720},[1608,13635,2078],{"class":2989},[1608,13637,2059],{"class":2993},[1608,13639,4251],{"class":2997},[1608,13641,2065],{"class":1959},[1608,13643,13644],{"class":2068},"\"grid md:grid-cols-2 lg:grid-cols-3 gap-6\"",[1608,13646,2072],{"class":2989},[1608,13648,13649,13651],{"class":1785,"line":3728},[1608,13650,8966],{"class":2989},[1608,13652,13653],{"class":2993},"NuxtLink\n",[1608,13655,13656,13659,13661,13663,13665,13667,13669],{"class":1785,"line":3734},[1608,13657,13658],{"class":2046},"          v-for",[1608,13660,2065],{"class":1959},[1608,13662,3381],{"class":3268},[1608,13664,8787],{"class":2058},[1608,13666,5343],{"class":1951},[1608,13668,13487],{"class":2058},[1608,13670,4316],{"class":3268},[1608,13672,13673,13676,13678,13680,13682,13684,13686,13689],{"class":1785,"line":3739},[1608,13674,13675],{"class":1959},"          :",[1608,13677,4815],{"class":2997},[1608,13679,2065],{"class":1959},[1608,13681,3381],{"class":3268},[1608,13683,8787],{"class":2058},[1608,13685,44],{"class":1959},[1608,13687,13688],{"class":2058},"path",[1608,13690,4316],{"class":3268},[1608,13692,13693,13695,13697,13699,13701,13704,13706,13708,13710,13712,13714],{"class":1785,"line":4422},[1608,13694,13675],{"class":1959},[1608,13696,11632],{"class":2997},[1608,13698,2065],{"class":1959},[1608,13700,3381],{"class":3268},[1608,13702,13703],{"class":2017},"localePath",[1608,13705,3072],{"class":1959},[1608,13707,8787],{"class":2058},[1608,13709,44],{"class":1959},[1608,13711,13688],{"class":2058},[1608,13713,2950],{"class":1959},[1608,13715,4316],{"class":3268},[1608,13717,13718,13721,13723],{"class":1785,"line":4431},[1608,13719,13720],{"class":2997},"          class",[1608,13722,2065],{"class":1959},[1608,13724,13725],{"class":2068},"\"border rounded-lg overflow-hidden hover:shadow-lg transition\"\n",[1608,13727,13728],{"class":1785,"line":4440},[1608,13729,13730],{"class":2989},"        >\n",[1608,13732,13733,13736,13739],{"class":1785,"line":12419},[1608,13734,13735],{"class":2989},"          \u003C",[1608,13737,13738],{"class":2993},"img",[1608,13740,10656],{"class":1959},[1608,13742,13743,13746,13749,13751,13753,13755,13757,13760,13762],{"class":1785,"line":12427},[1608,13744,13745],{"class":1959},"            :",[1608,13747,13748],{"class":2997},"src",[1608,13750,2065],{"class":1959},[1608,13752,3381],{"class":3268},[1608,13754,8787],{"class":2058},[1608,13756,44],{"class":1959},[1608,13758,13759],{"class":2058},"image",[1608,13761,3381],{"class":3268},[1608,13763,10656],{"class":1959},[1608,13765,13766,13768,13771,13773,13775,13777,13779,13781],{"class":1785,"line":12436},[1608,13767,13745],{"class":1959},[1608,13769,13770],{"class":2997},"alt",[1608,13772,2065],{"class":1959},[1608,13774,3381],{"class":3268},[1608,13776,8787],{"class":2058},[1608,13778,44],{"class":1959},[1608,13780,8857],{"class":2058},[1608,13782,4316],{"class":3268},[1608,13784,13785,13788,13790],{"class":1785,"line":12441},[1608,13786,13787],{"class":2997},"            class",[1608,13789,2065],{"class":1959},[1608,13791,13792],{"class":2068},"\"w-full h-48 object-cover\"\n",[1608,13794,13795],{"class":1785,"line":12446},[1608,13796,13797],{"class":2989},"          />\n",[1608,13799,13800,13802,13804,13806,13808,13811],{"class":1785,"line":13141},[1608,13801,13735],{"class":2989},[1608,13803,2059],{"class":2993},[1608,13805,4251],{"class":2997},[1608,13807,2065],{"class":1959},[1608,13809,13810],{"class":2068},"\"p-4\"",[1608,13812,2072],{"class":2989},[1608,13814,13815,13818,13820,13822,13824,13827,13829,13831,13833,13835,13837,13839,13841,13843],{"class":1785,"line":13146},[1608,13816,13817],{"class":2989},"            \u003C",[1608,13819,68],{"class":2993},[1608,13821,4251],{"class":2997},[1608,13823,2065],{"class":1959},[1608,13825,13826],{"class":2068},"\"text-xl font-bold mb-2\"",[1608,13828,3325],{"class":2989},[1608,13830,6634],{"class":1959},[1608,13832,8787],{"class":2058},[1608,13834,44],{"class":1959},[1608,13836,8857],{"class":2058},[1608,13838,3333],{"class":1959},[1608,13840,2092],{"class":2989},[1608,13842,68],{"class":2993},[1608,13844,2072],{"class":2989},[1608,13846,13847,13849,13851,13853,13855,13858,13860,13862,13864,13866,13869,13871,13873,13875],{"class":1785,"line":13172},[1608,13848,13817],{"class":2989},[1608,13850,30],{"class":2993},[1608,13852,4251],{"class":2997},[1608,13854,2065],{"class":1959},[1608,13856,13857],{"class":2068},"\"text-gray-600\"",[1608,13859,3325],{"class":2989},[1608,13861,6634],{"class":1959},[1608,13863,8787],{"class":2058},[1608,13865,44],{"class":1959},[1608,13867,13868],{"class":2058},"description",[1608,13870,3333],{"class":1959},[1608,13872,2092],{"class":2989},[1608,13874,30],{"class":2993},[1608,13876,2072],{"class":2989},[1608,13878,13879,13882,13884],{"class":1785,"line":13190},[1608,13880,13881],{"class":2989},"          \u003C/",[1608,13883,2059],{"class":2993},[1608,13885,2072],{"class":2989},[1608,13887,13888,13891,13893],{"class":1785,"line":13195},[1608,13889,13890],{"class":2989},"        \u003C/",[1608,13892,8969],{"class":2993},[1608,13894,2072],{"class":2989},[1608,13896,13897,13899,13901],{"class":1785,"line":13200},[1608,13898,9041],{"class":2989},[1608,13900,2059],{"class":2993},[1608,13902,2072],{"class":2989},[1608,13904,13905,13907,13909],{"class":1785,"line":13226},[1608,13906,2122],{"class":2989},[1608,13908,13574],{"class":2993},[1608,13910,2072],{"class":2989},[1608,13912,13913,13915,13917],{"class":1785,"line":13244},[1608,13914,3405],{"class":2989},[1608,13916,9064],{"class":2993},[1608,13918,2072],{"class":2989},[1608,13920,13922,13924,13926],{"class":1785,"line":13921},51,[1608,13923,2092],{"class":2989},[1608,13925,3303],{"class":2993},[1608,13927,2072],{"class":2989},[68,13929,13931],{"id":13930},"الخطوة-6-إنشاء-صفحة-تفاصيل-المقال","الخطوة 6: إنشاء صفحة تفاصيل المقال",[30,13933,12639,13934,13937],{},[448,13935,13936],{},"app/pages/[...slug].vue"," لعرض المقالات الديناميكية:",[441,13939,13941],{"className":2980,"code":13940,"language":2982,"meta":16,"style":16},"\u003Cscript setup lang=\"ts\">\nconst { locale } = useI18n();\nconst route = useRoute();\n\n// إنشاء المسار الكامل مع اللغة\nconst path = `/${locale.value}/articles/${route.params.slug}`;\n\nconst { data: article } = await useAsyncData(`article-${path}`, () =>\n  queryContent()\n    .where({ _path: path })\n    .findOne()\n);\n\nif (!article.value) {\n  throw createError({ \n    statusCode: 404, \n    statusMessage: \"المقال غير موجود\" \n  });\n}\n\n// تعيين meta tags لتحسين SEO\nuseHead({\n  title: article.value.title,\n  meta: [\n    { name: \"description\", content: article.value.description },\n    { property: \"og:title\", content: article.value.title },\n    { property: \"og:description\", content: article.value.description },\n    { property: \"og:image\", content: article.value.image },\n  ],\n});\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Carticle class=\"container prose prose-lg mx-auto py-12\">\n    \u003Ch1>{{ article.title }}\u003C/h1>\n    \u003Cdiv class=\"text-gray-600 mb-8\">\n      {{ article.publishedAt }} • {{ article.readingTime }} دقيقة قراءة\n    \u003C/div>\n    \n    \u003CContentRenderer :value=\"article\" />\n  \u003C/article>\n\u003C/template>\n",[448,13942,13943,13959,13975,13987,13991,13996,14040,14044,14082,14088,14105,14113,14117,14121,14138,14149,14160,14170,14175,14179,14183,14188,14195,14212,14219,14247,14273,14298,14323,14327,14331,14339,14343,14351,14366,14390,14405,14429,14437,14441,14462,14470],{"__ignoreMap":16},[1608,13944,13945,13947,13949,13951,13953,13955,13957],{"class":1785,"line":1786},[1608,13946,2990],{"class":2989},[1608,13948,2994],{"class":2993},[1608,13950,2998],{"class":2997},[1608,13952,3001],{"class":2997},[1608,13954,2065],{"class":1959},[1608,13956,3006],{"class":2068},[1608,13958,2072],{"class":2989},[1608,13960,13961,13963,13965,13967,13969,13971,13973],{"class":1785,"line":1260},[1608,13962,3059],{"class":1951},[1608,13964,2032],{"class":1959},[1608,13966,13106],{"class":3062},[1608,13968,3037],{"class":1959},[1608,13970,2065],{"class":1969},[1608,13972,13320],{"class":2017},[1608,13974,13323],{"class":1959},[1608,13976,13977,13979,13981,13983,13985],{"class":1785,"line":17},[1608,13978,3059],{"class":1951},[1608,13980,8380],{"class":3062},[1608,13982,3066],{"class":1969},[1608,13984,8385],{"class":2017},[1608,13986,13323],{"class":1959},[1608,13988,13989],{"class":1785,"line":1802},[1608,13990,1805],{"emptyLinePlaceholder":1305},[1608,13992,13993],{"class":1785,"line":1808},[1608,13994,13995],{"class":1945},"// إنشاء المسار الكامل مع اللغة\n",[1608,13997,13998,14000,14003,14005,14008,14010,14012,14014,14016,14018,14021,14023,14026,14028,14030,14032,14034,14036,14038],{"class":1785,"line":1814},[1608,13999,3059],{"class":1951},[1608,14001,14002],{"class":3062}," path",[1608,14004,3066],{"class":1969},[1608,14006,14007],{"class":2068}," `/",[1608,14009,3206],{"class":3205},[1608,14011,13106],{"class":2058},[1608,14013,44],{"class":3268},[1608,14015,3144],{"class":2058},[1608,14017,2089],{"class":3205},[1608,14019,14020],{"class":2068},"/articles/",[1608,14022,3206],{"class":3205},[1608,14024,14025],{"class":2058},"route",[1608,14027,44],{"class":3268},[1608,14029,8759],{"class":2058},[1608,14031,44],{"class":3268},[1608,14033,8715],{"class":2058},[1608,14035,2089],{"class":3205},[1608,14037,3222],{"class":2068},[1608,14039,1977],{"class":1959},[1608,14041,14042],{"class":1785,"line":1820},[1608,14043,1805],{"emptyLinePlaceholder":1305},[1608,14045,14046,14048,14050,14052,14054,14056,14058,14060,14062,14064,14066,14069,14071,14073,14075,14077,14079],{"class":1785,"line":1825},[1608,14047,3059],{"class":1951},[1608,14049,2032],{"class":1959},[1608,14051,8782],{"class":1965},[1608,14053,4147],{"class":1959},[1608,14055,8838],{"class":3062},[1608,14057,3037],{"class":1959},[1608,14059,2065],{"class":1969},[1608,14061,6920],{"class":2046},[1608,14063,6756],{"class":2017},[1608,14065,3072],{"class":1959},[1608,14067,14068],{"class":2068},"`article-",[1608,14070,3206],{"class":3205},[1608,14072,13688],{"class":2058},[1608,14074,2089],{"class":3205},[1608,14076,3222],{"class":2068},[1608,14078,3502],{"class":1959},[1608,14080,14081],{"class":1951},"=>\n",[1608,14083,14084,14086],{"class":1785,"line":1831},[1608,14085,10661],{"class":2017},[1608,14087,3801],{"class":1959},[1608,14089,14090,14093,14096,14098,14101,14103],{"class":1785,"line":1333},[1608,14091,14092],{"class":1959},"    .",[1608,14094,14095],{"class":2017},"where",[1608,14097,2021],{"class":1959},[1608,14099,14100],{"class":2058},"_path:",[1608,14102,14002],{"class":2058},[1608,14104,5035],{"class":1959},[1608,14106,14107,14109,14111],{"class":1785,"line":2075},[1608,14108,14092],{"class":1959},[1608,14110,10671],{"class":2017},[1608,14112,3801],{"class":1959},[1608,14114,14115],{"class":1785,"line":2099},[1608,14116,3079],{"class":1959},[1608,14118,14119],{"class":1785,"line":2119},[1608,14120,1805],{"emptyLinePlaceholder":1305},[1608,14122,14123,14126,14128,14130,14132,14134,14136],{"class":1785,"line":2129},[1608,14124,14125],{"class":2046},"if",[1608,14127,4554],{"class":1959},[1608,14129,11671],{"class":1969},[1608,14131,8838],{"class":2058},[1608,14133,44],{"class":1959},[1608,14135,3144],{"class":2058},[1608,14137,4832],{"class":1959},[1608,14139,14140,14143,14146],{"class":1785,"line":1635},[1608,14141,14142],{"class":2046},"  throw",[1608,14144,14145],{"class":2017}," createError",[1608,14147,14148],{"class":1959},"({ \n",[1608,14150,14151,14154,14157],{"class":1785,"line":2296},[1608,14152,14153],{"class":2058},"    statusCode:",[1608,14155,14156],{"class":3075}," 404",[1608,14158,14159],{"class":1959},", \n",[1608,14161,14162,14165,14168],{"class":1785,"line":2302},[1608,14163,14164],{"class":2058},"    statusMessage:",[1608,14166,14167],{"class":2068}," \"المقال غير موجود\"",[1608,14169,10656],{"class":1959},[1608,14171,14172],{"class":1785,"line":2308},[1608,14173,14174],{"class":1959},"  });\n",[1608,14176,14177],{"class":1785,"line":3279},[1608,14178,2005],{"class":1959},[1608,14180,14181],{"class":1785,"line":3284},[1608,14182,1805],{"emptyLinePlaceholder":1305},[1608,14184,14185],{"class":1785,"line":3293},[1608,14186,14187],{"class":1945},"// تعيين meta tags لتحسين SEO\n",[1608,14189,14190,14193],{"class":1785,"line":3298},[1608,14191,14192],{"class":2017},"useHead",[1608,14194,7166],{"class":1959},[1608,14196,14197,14199,14202,14204,14206,14208,14210],{"class":1785,"line":3308},[1608,14198,8613],{"class":2058},[1608,14200,14201],{"class":2058}," article",[1608,14203,44],{"class":1959},[1608,14205,3144],{"class":2058},[1608,14207,44],{"class":1959},[1608,14209,8857],{"class":2058},[1608,14211,3694],{"class":1959},[1608,14213,14214,14217],{"class":1785,"line":3318},[1608,14215,14216],{"class":2058},"  meta:",[1608,14218,12162],{"class":1959},[1608,14220,14221,14224,14226,14229,14231,14234,14236,14238,14240,14242,14244],{"class":1785,"line":3342},[1608,14222,14223],{"class":1959},"    { ",[1608,14225,3096],{"class":2058},[1608,14227,14228],{"class":2068}," \"description\"",[1608,14230,3020],{"class":1959},[1608,14232,14233],{"class":2058},"content:",[1608,14235,14201],{"class":2058},[1608,14237,44],{"class":1959},[1608,14239,3144],{"class":2058},[1608,14241,44],{"class":1959},[1608,14243,13868],{"class":2058},[1608,14245,14246],{"class":1959}," },\n",[1608,14248,14249,14251,14254,14257,14259,14261,14263,14265,14267,14269,14271],{"class":1785,"line":3365},[1608,14250,14223],{"class":1959},[1608,14252,14253],{"class":2058},"property:",[1608,14255,14256],{"class":2068}," \"og:title\"",[1608,14258,3020],{"class":1959},[1608,14260,14233],{"class":2058},[1608,14262,14201],{"class":2058},[1608,14264,44],{"class":1959},[1608,14266,3144],{"class":2058},[1608,14268,44],{"class":1959},[1608,14270,8857],{"class":2058},[1608,14272,14246],{"class":1959},[1608,14274,14275,14277,14279,14282,14284,14286,14288,14290,14292,14294,14296],{"class":1785,"line":3402},[1608,14276,14223],{"class":1959},[1608,14278,14253],{"class":2058},[1608,14280,14281],{"class":2068}," \"og:description\"",[1608,14283,3020],{"class":1959},[1608,14285,14233],{"class":2058},[1608,14287,14201],{"class":2058},[1608,14289,44],{"class":1959},[1608,14291,3144],{"class":2058},[1608,14293,44],{"class":1959},[1608,14295,13868],{"class":2058},[1608,14297,14246],{"class":1959},[1608,14299,14300,14302,14304,14307,14309,14311,14313,14315,14317,14319,14321],{"class":1785,"line":3412},[1608,14301,14223],{"class":1959},[1608,14303,14253],{"class":2058},[1608,14305,14306],{"class":2068}," \"og:image\"",[1608,14308,3020],{"class":1959},[1608,14310,14233],{"class":2058},[1608,14312,14201],{"class":2058},[1608,14314,44],{"class":1959},[1608,14316,3144],{"class":2058},[1608,14318,44],{"class":1959},[1608,14320,13759],{"class":2058},[1608,14322,14246],{"class":1959},[1608,14324,14325],{"class":1785,"line":3704},[1608,14326,12186],{"class":1959},[1608,14328,14329],{"class":1785,"line":3712},[1608,14330,3229],{"class":1959},[1608,14332,14333,14335,14337],{"class":1785,"line":3720},[1608,14334,2092],{"class":2989},[1608,14336,2994],{"class":2993},[1608,14338,2072],{"class":2989},[1608,14340,14341],{"class":1785,"line":3728},[1608,14342,1805],{"emptyLinePlaceholder":1305},[1608,14344,14345,14347,14349],{"class":1785,"line":3734},[1608,14346,2990],{"class":2989},[1608,14348,3303],{"class":2993},[1608,14350,2072],{"class":2989},[1608,14352,14353,14355,14357,14359,14361,14364],{"class":1785,"line":3739},[1608,14354,3311],{"class":2989},[1608,14356,8838],{"class":2993},[1608,14358,4251],{"class":2997},[1608,14360,2065],{"class":1959},[1608,14362,14363],{"class":2068},"\"container prose prose-lg mx-auto py-12\"",[1608,14365,2072],{"class":2989},[1608,14367,14368,14370,14372,14374,14376,14378,14380,14382,14384,14386,14388],{"class":1785,"line":4422},[1608,14369,2055],{"class":2989},[1608,14371,8655],{"class":2993},[1608,14373,3325],{"class":2989},[1608,14375,6634],{"class":1959},[1608,14377,8838],{"class":2058},[1608,14379,44],{"class":1959},[1608,14381,8857],{"class":2058},[1608,14383,3333],{"class":1959},[1608,14385,2092],{"class":2989},[1608,14387,8655],{"class":2993},[1608,14389,2072],{"class":2989},[1608,14391,14392,14394,14396,14398,14400,14403],{"class":1785,"line":4431},[1608,14393,2055],{"class":2989},[1608,14395,2059],{"class":2993},[1608,14397,4251],{"class":2997},[1608,14399,2065],{"class":1959},[1608,14401,14402],{"class":2068},"\"text-gray-600 mb-8\"",[1608,14404,2072],{"class":2989},[1608,14406,14407,14409,14411,14413,14416,14419,14421,14423,14426],{"class":1785,"line":4440},[1608,14408,4279],{"class":1959},[1608,14410,8838],{"class":2058},[1608,14412,44],{"class":1959},[1608,14414,14415],{"class":2058},"publishedAt",[1608,14417,14418],{"class":1959}," }} • {{ ",[1608,14420,8838],{"class":2058},[1608,14422,44],{"class":1959},[1608,14424,14425],{"class":2058},"readingTime",[1608,14427,14428],{"class":1959}," }} دقيقة قراءة\n",[1608,14430,14431,14433,14435],{"class":1785,"line":12419},[1608,14432,2122],{"class":2989},[1608,14434,2059],{"class":2993},[1608,14436,2072],{"class":2989},[1608,14438,14439],{"class":1785,"line":12427},[1608,14440,2249],{"class":1959},[1608,14442,14443,14445,14448,14450,14452,14454,14456,14458,14460],{"class":1785,"line":12436},[1608,14444,2055],{"class":2989},[1608,14446,14447],{"class":2993},"ContentRenderer",[1608,14449,4716],{"class":1959},[1608,14451,3144],{"class":2997},[1608,14453,2065],{"class":1959},[1608,14455,3381],{"class":3268},[1608,14457,8838],{"class":2058},[1608,14459,3381],{"class":3268},[1608,14461,10719],{"class":2989},[1608,14463,14464,14466,14468],{"class":1785,"line":12441},[1608,14465,3405],{"class":2989},[1608,14467,8838],{"class":2993},[1608,14469,2072],{"class":2989},[1608,14471,14472,14474,14476],{"class":1785,"line":12446},[1608,14473,2092],{"class":2989},[1608,14475,3303],{"class":2993},[1608,14477,2072],{"class":2989},[68,14479,14481],{"id":14480},"الخطوة-7-تنفيذ-مبدّل-اللغات","الخطوة 7: تنفيذ مبدّل اللغات",[30,14483,14484,14485,1970],{},"أنشئ مكون ",[448,14486,14487],{},"app/components/LanguageSwitcher.vue",[441,14489,14491],{"className":2980,"code":14490,"language":2982,"meta":16,"style":16},"\u003Cscript setup lang=\"ts\">\nconst { locale, locales } = useI18n();\nconst switchLocalePath = useSwitchLocalePath();\n\nconst availableLocales = computed(() => \n  (locales.value as Array\u003C{code: string, name: string}>)\n    .filter(l => l.code !== locale.value)\n);\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"flex gap-2\">\n    \u003CNuxtLink\n      v-for=\"loc in availableLocales\"\n      :key=\"loc.code\"\n      :to=\"switchLocalePath(loc.code)\"\n      class=\"px-3 py-1 rounded border hover:bg-gray-100\"\n    >\n      {{ loc.name }}\n    \u003C/NuxtLink>\n  \u003C/div>\n\u003C/template>\n",[448,14492,14493,14509,14530,14544,14548,14565,14601,14633,14637,14645,14649,14657,14672,14678,14696,14714,14739,14748,14753,14765,14773,14781],{"__ignoreMap":16},[1608,14494,14495,14497,14499,14501,14503,14505,14507],{"class":1785,"line":1786},[1608,14496,2990],{"class":2989},[1608,14498,2994],{"class":2993},[1608,14500,2998],{"class":2997},[1608,14502,3001],{"class":2997},[1608,14504,2065],{"class":1959},[1608,14506,3006],{"class":2068},[1608,14508,2072],{"class":2989},[1608,14510,14511,14513,14515,14517,14519,14522,14524,14526,14528],{"class":1785,"line":1260},[1608,14512,3059],{"class":1951},[1608,14514,2032],{"class":1959},[1608,14516,13106],{"class":3062},[1608,14518,3020],{"class":1959},[1608,14520,14521],{"class":3062},"locales",[1608,14523,3037],{"class":1959},[1608,14525,2065],{"class":1969},[1608,14527,13320],{"class":2017},[1608,14529,13323],{"class":1959},[1608,14531,14532,14534,14537,14539,14542],{"class":1785,"line":17},[1608,14533,3059],{"class":1951},[1608,14535,14536],{"class":3062}," switchLocalePath",[1608,14538,3066],{"class":1969},[1608,14540,14541],{"class":2017}," useSwitchLocalePath",[1608,14543,13323],{"class":1959},[1608,14545,14546],{"class":1785,"line":1802},[1608,14547,1805],{"emptyLinePlaceholder":1305},[1608,14549,14550,14552,14555,14557,14559,14561,14563],{"class":1785,"line":1808},[1608,14551,3059],{"class":1951},[1608,14553,14554],{"class":3062}," availableLocales",[1608,14556,3066],{"class":1969},[1608,14558,3131],{"class":2017},[1608,14560,3134],{"class":1959},[1608,14562,3137],{"class":1951},[1608,14564,10656],{"class":1959},[1608,14566,14567,14569,14571,14573,14575,14578,14581,14584,14586,14588,14590,14592,14594,14596,14598],{"class":1785,"line":1814},[1608,14568,5645],{"class":1959},[1608,14570,14521],{"class":2058},[1608,14572,44],{"class":1959},[1608,14574,3144],{"class":2058},[1608,14576,14577],{"class":2046}," as",[1608,14579,14580],{"class":1955}," Array",[1608,14582,14583],{"class":1959},"\u003C{",[1608,14585,448],{"class":1965},[1608,14587,1970],{"class":1969},[1608,14589,1987],{"class":1973},[1608,14591,3020],{"class":1959},[1608,14593,2086],{"class":1965},[1608,14595,1970],{"class":1969},[1608,14597,1987],{"class":1973},[1608,14599,14600],{"class":1959},"}>)\n",[1608,14602,14603,14605,14607,14609,14612,14614,14617,14619,14621,14624,14627,14629,14631],{"class":1785,"line":1820},[1608,14604,14092],{"class":1959},[1608,14606,13512],{"class":2017},[1608,14608,3072],{"class":1959},[1608,14610,14611],{"class":1965},"l",[1608,14613,13519],{"class":1951},[1608,14615,14616],{"class":2058}," l",[1608,14618,44],{"class":1959},[1608,14620,448],{"class":2058},[1608,14622,14623],{"class":1969}," !==",[1608,14625,14626],{"class":2058}," locale",[1608,14628,44],{"class":1959},[1608,14630,3144],{"class":2058},[1608,14632,2419],{"class":1959},[1608,14634,14635],{"class":1785,"line":1825},[1608,14636,3079],{"class":1959},[1608,14638,14639,14641,14643],{"class":1785,"line":1831},[1608,14640,2092],{"class":2989},[1608,14642,2994],{"class":2993},[1608,14644,2072],{"class":2989},[1608,14646,14647],{"class":1785,"line":1333},[1608,14648,1805],{"emptyLinePlaceholder":1305},[1608,14650,14651,14653,14655],{"class":1785,"line":2075},[1608,14652,2990],{"class":2989},[1608,14654,3303],{"class":2993},[1608,14656,2072],{"class":2989},[1608,14658,14659,14661,14663,14665,14667,14670],{"class":1785,"line":2099},[1608,14660,3311],{"class":2989},[1608,14662,2059],{"class":2993},[1608,14664,4251],{"class":2997},[1608,14666,2065],{"class":1959},[1608,14668,14669],{"class":2068},"\"flex gap-2\"",[1608,14671,2072],{"class":2989},[1608,14673,14674,14676],{"class":1785,"line":2119},[1608,14675,2055],{"class":2989},[1608,14677,13653],{"class":2993},[1608,14679,14680,14683,14685,14687,14690,14692,14694],{"class":1785,"line":2129},[1608,14681,14682],{"class":2046},"      v-for",[1608,14684,2065],{"class":1959},[1608,14686,3381],{"class":3268},[1608,14688,14689],{"class":2058},"loc",[1608,14691,5343],{"class":1951},[1608,14693,14554],{"class":2058},[1608,14695,4316],{"class":3268},[1608,14697,14698,14700,14702,14704,14706,14708,14710,14712],{"class":1785,"line":1635},[1608,14699,4304],{"class":1959},[1608,14701,4815],{"class":2997},[1608,14703,2065],{"class":1959},[1608,14705,3381],{"class":3268},[1608,14707,14689],{"class":2058},[1608,14709,44],{"class":1959},[1608,14711,448],{"class":2058},[1608,14713,4316],{"class":3268},[1608,14715,14716,14718,14720,14722,14724,14727,14729,14731,14733,14735,14737],{"class":1785,"line":2296},[1608,14717,4304],{"class":1959},[1608,14719,11632],{"class":2997},[1608,14721,2065],{"class":1959},[1608,14723,3381],{"class":3268},[1608,14725,14726],{"class":2017},"switchLocalePath",[1608,14728,3072],{"class":1959},[1608,14730,14689],{"class":2058},[1608,14732,44],{"class":1959},[1608,14734,448],{"class":2058},[1608,14736,2950],{"class":1959},[1608,14738,4316],{"class":3268},[1608,14740,14741,14743,14745],{"class":1785,"line":2302},[1608,14742,4375],{"class":2997},[1608,14744,2065],{"class":1959},[1608,14746,14747],{"class":2068},"\"px-3 py-1 rounded border hover:bg-gray-100\"\n",[1608,14749,14750],{"class":1785,"line":2308},[1608,14751,14752],{"class":2989},"    >\n",[1608,14754,14755,14757,14759,14761,14763],{"class":1785,"line":3279},[1608,14756,4279],{"class":1959},[1608,14758,14689],{"class":2058},[1608,14760,44],{"class":1959},[1608,14762,2086],{"class":2058},[1608,14764,4284],{"class":1959},[1608,14766,14767,14769,14771],{"class":1785,"line":3284},[1608,14768,2122],{"class":2989},[1608,14770,8969],{"class":2993},[1608,14772,2072],{"class":2989},[1608,14774,14775,14777,14779],{"class":1785,"line":3293},[1608,14776,3405],{"class":2989},[1608,14778,2059],{"class":2993},[1608,14780,2072],{"class":2989},[1608,14782,14783,14785,14787],{"class":1785,"line":3298},[1608,14784,2092],{"class":2989},[1608,14786,3303],{"class":2993},[1608,14788,2072],{"class":2989},[68,14790,14792],{"id":14791},"الخطوة-8-عرض-الفئات-الموطّنة","الخطوة 8: عرض الفئات الموطّنة",[30,14794,14795],{},"أنشئ composable للحصول على عناوين الفئات باللغة الحالية.",[30,14797,12639,14798,1970],{},[448,14799,14800],{},"app/composables/useCategoryTitle.ts",[441,14802,14804],{"className":1936,"code":14803,"language":1938,"meta":16,"style":16},"import { getCategoriesCollection, type Category } from \"@@/types/content\";\n\nexport const useCategoryTitle = async (categorySlug: string) => {\n  const { locale } = useI18n();\n  \n  const { data: category } = await useAsyncData\u003CCategory | null>(\n    `category-${locale.value}-${categorySlug}`,\n    async () => {\n      const collection = getCategoriesCollection(locale.value);\n      const foundCategory = await queryCollection(collection)\n        .where(\"slug\", \"=\", categorySlug)\n        .first();\n      return foundCategory ?? null;\n    }\n  );\n\n  return computed(() => category.value?.title || categorySlug);\n};\n",[448,14805,14806,14829,14833,14861,14877,14881,14914,14941,14952,14973,14992,15015,15024,15038,15042,15046,15050,15079],{"__ignoreMap":16},[1608,14807,14808,14810,14812,14815,14817,14819,14821,14823,14825,14827],{"class":1785,"line":1786},[1608,14809,3013],{"class":2046},[1608,14811,2032],{"class":1959},[1608,14813,14814],{"class":2058},"getCategoriesCollection",[1608,14816,3020],{"class":1959},[1608,14818,13290],{"class":2046},[1608,14820,12935],{"class":2058},[1608,14822,3037],{"class":1959},[1608,14824,3040],{"class":2046},[1608,14826,13299],{"class":2068},[1608,14828,1977],{"class":1959},[1608,14830,14831],{"class":1785,"line":1260},[1608,14832,1805],{"emptyLinePlaceholder":1305},[1608,14834,14835,14837,14839,14842,14844,14846,14848,14851,14853,14855,14857,14859],{"class":1785,"line":17},[1608,14836,3483],{"class":2046},[1608,14838,3486],{"class":1951},[1608,14840,14841],{"class":2017}," useCategoryTitle",[1608,14843,3066],{"class":1969},[1608,14845,5460],{"class":1951},[1608,14847,4554],{"class":1959},[1608,14849,14850],{"class":1965},"categorySlug",[1608,14852,1970],{"class":1969},[1608,14854,1987],{"class":1973},[1608,14856,3183],{"class":1959},[1608,14858,3137],{"class":1951},[1608,14860,1960],{"class":1959},[1608,14862,14863,14865,14867,14869,14871,14873,14875],{"class":1785,"line":1802},[1608,14864,3516],{"class":1951},[1608,14866,2032],{"class":1959},[1608,14868,13106],{"class":3062},[1608,14870,3037],{"class":1959},[1608,14872,2065],{"class":1969},[1608,14874,13320],{"class":2017},[1608,14876,13323],{"class":1959},[1608,14878,14879],{"class":1785,"line":1808},[1608,14880,10139],{"class":1959},[1608,14882,14883,14885,14887,14889,14891,14894,14896,14898,14900,14902,14904,14907,14909,14911],{"class":1785,"line":1814},[1608,14884,3516],{"class":1951},[1608,14886,2032],{"class":1959},[1608,14888,8782],{"class":1965},[1608,14890,4147],{"class":1959},[1608,14892,14893],{"class":3062},"category",[1608,14895,3037],{"class":1959},[1608,14897,2065],{"class":1969},[1608,14899,6920],{"class":2046},[1608,14901,6756],{"class":2017},[1608,14903,2990],{"class":1959},[1608,14905,14906],{"class":1955},"Category",[1608,14908,5871],{"class":1969},[1608,14910,5874],{"class":1973},[1608,14912,14913],{"class":1959},">(\n",[1608,14915,14916,14919,14921,14923,14925,14927,14929,14931,14933,14935,14937,14939],{"class":1785,"line":1820},[1608,14917,14918],{"class":2068},"    `category-",[1608,14920,3206],{"class":3205},[1608,14922,13106],{"class":2058},[1608,14924,44],{"class":3268},[1608,14926,3144],{"class":2058},[1608,14928,2089],{"class":3205},[1608,14930,3942],{"class":2068},[1608,14932,3206],{"class":3205},[1608,14934,14850],{"class":2058},[1608,14936,2089],{"class":3205},[1608,14938,3222],{"class":2068},[1608,14940,3694],{"class":1959},[1608,14942,14943,14946,14948,14950],{"class":1785,"line":1825},[1608,14944,14945],{"class":1951},"    async",[1608,14947,5463],{"class":1959},[1608,14949,3137],{"class":1951},[1608,14951,1960],{"class":1959},[1608,14953,14954,14957,14959,14961,14963,14965,14967,14969,14971],{"class":1785,"line":1831},[1608,14955,14956],{"class":1951},"      const",[1608,14958,13412],{"class":3062},[1608,14960,3066],{"class":1969},[1608,14962,13153],{"class":2017},[1608,14964,3072],{"class":1959},[1608,14966,13106],{"class":2058},[1608,14968,44],{"class":1959},[1608,14970,3144],{"class":2058},[1608,14972,3079],{"class":1959},[1608,14974,14975,14977,14980,14982,14984,14986,14988,14990],{"class":1785,"line":1333},[1608,14976,14956],{"class":1951},[1608,14978,14979],{"class":3062}," foundCategory",[1608,14981,3066],{"class":1969},[1608,14983,6920],{"class":2046},[1608,14985,13433],{"class":2017},[1608,14987,3072],{"class":1959},[1608,14989,13438],{"class":2058},[1608,14991,2419],{"class":1959},[1608,14993,14994,14997,14999,15001,15004,15006,15009,15011,15013],{"class":1785,"line":2075},[1608,14995,14996],{"class":1959},"        .",[1608,14998,14095],{"class":2017},[1608,15000,3072],{"class":1959},[1608,15002,15003],{"class":2068},"\"slug\"",[1608,15005,3020],{"class":1959},[1608,15007,15008],{"class":2068},"\"=\"",[1608,15010,3020],{"class":1959},[1608,15012,14850],{"class":2058},[1608,15014,2419],{"class":1959},[1608,15016,15017,15019,15022],{"class":1785,"line":2099},[1608,15018,14996],{"class":1959},[1608,15020,15021],{"class":2017},"first",[1608,15023,13323],{"class":1959},[1608,15025,15026,15029,15031,15034,15036],{"class":1785,"line":2119},[1608,15027,15028],{"class":2046},"      return",[1608,15030,14979],{"class":2058},[1608,15032,15033],{"class":1969}," ??",[1608,15035,5874],{"class":5031},[1608,15037,1977],{"class":1959},[1608,15039,15040],{"class":1785,"line":2129},[1608,15041,2305],{"class":1959},[1608,15043,15044],{"class":1785,"line":1635},[1608,15045,2132],{"class":1959},[1608,15047,15048],{"class":1785,"line":2296},[1608,15049,1805],{"emptyLinePlaceholder":1305},[1608,15051,15052,15054,15056,15058,15060,15063,15065,15067,15069,15071,15074,15077],{"class":1785,"line":2302},[1608,15053,2047],{"class":2046},[1608,15055,3131],{"class":2017},[1608,15057,3134],{"class":1959},[1608,15059,3137],{"class":1951},[1608,15061,15062],{"class":2058}," category",[1608,15064,44],{"class":1959},[1608,15066,3144],{"class":2058},[1608,15068,13509],{"class":1959},[1608,15070,8857],{"class":2058},[1608,15072,15073],{"class":1969}," ||",[1608,15075,15076],{"class":2058}," categorySlug",[1608,15078,3079],{"class":1959},[1608,15080,15081],{"class":1785,"line":2308},[1608,15082,12922],{"class":1959},[30,15084,15085],{},"استخدمه في مكوناتك:",[441,15087,15089],{"className":2980,"code":15088,"language":2982,"meta":16,"style":16},"\u003Cscript setup lang=\"ts\">\nconst props = defineProps\u003C{ categorySlug: string }>();\nconst categoryTitle = await useCategoryTitle(props.categorySlug);\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cspan>{{ categoryTitle }}\u003C/span>\n\u003C/template>\n",[448,15090,15091,15107,15129,15152,15160,15164,15172,15193],{"__ignoreMap":16},[1608,15092,15093,15095,15097,15099,15101,15103,15105],{"class":1785,"line":1786},[1608,15094,2990],{"class":2989},[1608,15096,2994],{"class":2993},[1608,15098,2998],{"class":2997},[1608,15100,3001],{"class":2997},[1608,15102,2065],{"class":1959},[1608,15104,3006],{"class":2068},[1608,15106,2072],{"class":2989},[1608,15108,15109,15111,15113,15115,15117,15120,15122,15124,15126],{"class":1785,"line":1260},[1608,15110,3059],{"class":1951},[1608,15112,4103],{"class":3062},[1608,15114,3066],{"class":1969},[1608,15116,4108],{"class":2017},[1608,15118,15119],{"class":1959},"\u003C{ ",[1608,15121,14850],{"class":1965},[1608,15123,1970],{"class":1969},[1608,15125,1987],{"class":1973},[1608,15127,15128],{"class":1959}," }>();\n",[1608,15130,15131,15133,15136,15138,15140,15142,15144,15146,15148,15150],{"class":1785,"line":17},[1608,15132,3059],{"class":1951},[1608,15134,15135],{"class":3062}," categoryTitle",[1608,15137,3066],{"class":1969},[1608,15139,6920],{"class":2046},[1608,15141,14841],{"class":2017},[1608,15143,3072],{"class":1959},[1608,15145,4193],{"class":2058},[1608,15147,44],{"class":1959},[1608,15149,14850],{"class":2058},[1608,15151,3079],{"class":1959},[1608,15153,15154,15156,15158],{"class":1785,"line":1802},[1608,15155,2092],{"class":2989},[1608,15157,2994],{"class":2993},[1608,15159,2072],{"class":2989},[1608,15161,15162],{"class":1785,"line":1808},[1608,15163,1805],{"emptyLinePlaceholder":1305},[1608,15165,15166,15168,15170],{"class":1785,"line":1814},[1608,15167,2990],{"class":2989},[1608,15169,3303],{"class":2993},[1608,15171,2072],{"class":2989},[1608,15173,15174,15176,15178,15180,15182,15185,15187,15189,15191],{"class":1785,"line":1820},[1608,15175,3311],{"class":2989},[1608,15177,1608],{"class":2993},[1608,15179,3325],{"class":2989},[1608,15181,6634],{"class":1959},[1608,15183,15184],{"class":2058},"categoryTitle",[1608,15186,3333],{"class":1959},[1608,15188,2092],{"class":2989},[1608,15190,1608],{"class":2993},[1608,15192,2072],{"class":2989},[1608,15194,15195,15197,15199],{"class":1785,"line":1825},[1608,15196,2092],{"class":2989},[1608,15198,3303],{"class":2993},[1608,15200,2072],{"class":2989},[30,15202,15203,15204,1970],{},"مثال في ",[448,15205,15206],{},"app/components/blog/BlogPostCard.vue",[441,15208,15210],{"className":2980,"code":15209,"language":2982,"meta":16,"style":16},"\u003Cscript setup lang=\"ts\">\nimport { getCategoriesCollection, type Category } from \"@@/types/content\";\n\nconst props = defineProps\u003C{ post: Article }>();\nconst { locale } = useI18n();\n\n// الحصول على عنوان الفئة باللغة الحالية\nconst { data: category } = await useAsyncData\u003CCategory | null>(\n  `category-${locale.value}-${props.post.category}`,\n  async () => {\n    const collection = getCategoriesCollection(locale.value);\n    const foundCategory = await queryCollection(collection)\n      .where(\"slug\", \"=\", props.post.category)\n      .first();\n    return foundCategory ?? null;\n  }\n);\n\nconst categoryTitle = computed(() => \n  category.value?.title || props.post.category\n);\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003C!-- سيظهر \"التطوير\" بدلاً من \"development\" في النسخة العربية -->\n    \u003CBadge>{{ categoryTitle }}\u003C/Badge>\n  \u003C/div>\n\u003C/template>\n",[448,15211,15212,15228,15250,15254,15274,15290,15294,15299,15329,15364,15374,15394,15412,15441,15449,15461,15465,15469,15473,15489,15515,15519,15527,15531,15539,15547,15552,15573,15581],{"__ignoreMap":16},[1608,15213,15214,15216,15218,15220,15222,15224,15226],{"class":1785,"line":1786},[1608,15215,2990],{"class":2989},[1608,15217,2994],{"class":2993},[1608,15219,2998],{"class":2997},[1608,15221,3001],{"class":2997},[1608,15223,2065],{"class":1959},[1608,15225,3006],{"class":2068},[1608,15227,2072],{"class":2989},[1608,15229,15230,15232,15234,15236,15238,15240,15242,15244,15246,15248],{"class":1785,"line":1260},[1608,15231,3013],{"class":2046},[1608,15233,2032],{"class":1959},[1608,15235,14814],{"class":2058},[1608,15237,3020],{"class":1959},[1608,15239,13290],{"class":2046},[1608,15241,12935],{"class":2058},[1608,15243,3037],{"class":1959},[1608,15245,3040],{"class":2046},[1608,15247,13299],{"class":2068},[1608,15249,1977],{"class":1959},[1608,15251,15252],{"class":1785,"line":17},[1608,15253,1805],{"emptyLinePlaceholder":1305},[1608,15255,15256,15258,15260,15262,15264,15266,15268,15270,15272],{"class":1785,"line":1802},[1608,15257,3059],{"class":1951},[1608,15259,4103],{"class":3062},[1608,15261,3066],{"class":1969},[1608,15263,4108],{"class":2017},[1608,15265,15119],{"class":1959},[1608,15267,8787],{"class":1965},[1608,15269,1970],{"class":1969},[1608,15271,12871],{"class":1955},[1608,15273,15128],{"class":1959},[1608,15275,15276,15278,15280,15282,15284,15286,15288],{"class":1785,"line":1808},[1608,15277,3059],{"class":1951},[1608,15279,2032],{"class":1959},[1608,15281,13106],{"class":3062},[1608,15283,3037],{"class":1959},[1608,15285,2065],{"class":1969},[1608,15287,13320],{"class":2017},[1608,15289,13323],{"class":1959},[1608,15291,15292],{"class":1785,"line":1814},[1608,15293,1805],{"emptyLinePlaceholder":1305},[1608,15295,15296],{"class":1785,"line":1820},[1608,15297,15298],{"class":1945},"// الحصول على عنوان الفئة باللغة الحالية\n",[1608,15300,15301,15303,15305,15307,15309,15311,15313,15315,15317,15319,15321,15323,15325,15327],{"class":1785,"line":1825},[1608,15302,3059],{"class":1951},[1608,15304,2032],{"class":1959},[1608,15306,8782],{"class":1965},[1608,15308,4147],{"class":1959},[1608,15310,14893],{"class":3062},[1608,15312,3037],{"class":1959},[1608,15314,2065],{"class":1969},[1608,15316,6920],{"class":2046},[1608,15318,6756],{"class":2017},[1608,15320,2990],{"class":1959},[1608,15322,14906],{"class":1955},[1608,15324,5871],{"class":1969},[1608,15326,5874],{"class":1973},[1608,15328,14913],{"class":1959},[1608,15330,15331,15334,15336,15338,15340,15342,15344,15346,15348,15350,15352,15354,15356,15358,15360,15362],{"class":1785,"line":1831},[1608,15332,15333],{"class":2068},"  `category-",[1608,15335,3206],{"class":3205},[1608,15337,13106],{"class":2058},[1608,15339,44],{"class":3268},[1608,15341,3144],{"class":2058},[1608,15343,2089],{"class":3205},[1608,15345,3942],{"class":2068},[1608,15347,3206],{"class":3205},[1608,15349,4193],{"class":2058},[1608,15351,44],{"class":3268},[1608,15353,8787],{"class":2058},[1608,15355,44],{"class":3268},[1608,15357,14893],{"class":2058},[1608,15359,2089],{"class":3205},[1608,15361,3222],{"class":2068},[1608,15363,3694],{"class":1959},[1608,15365,15366,15368,15370,15372],{"class":1785,"line":1333},[1608,15367,13399],{"class":1951},[1608,15369,5463],{"class":1959},[1608,15371,3137],{"class":1951},[1608,15373,1960],{"class":1959},[1608,15375,15376,15378,15380,15382,15384,15386,15388,15390,15392],{"class":1785,"line":2075},[1608,15377,6154],{"class":1951},[1608,15379,13412],{"class":3062},[1608,15381,3066],{"class":1969},[1608,15383,13153],{"class":2017},[1608,15385,3072],{"class":1959},[1608,15387,13106],{"class":2058},[1608,15389,44],{"class":1959},[1608,15391,3144],{"class":2058},[1608,15393,3079],{"class":1959},[1608,15395,15396,15398,15400,15402,15404,15406,15408,15410],{"class":1785,"line":2099},[1608,15397,6154],{"class":1951},[1608,15399,14979],{"class":3062},[1608,15401,3066],{"class":1969},[1608,15403,6920],{"class":2046},[1608,15405,13433],{"class":2017},[1608,15407,3072],{"class":1959},[1608,15409,13438],{"class":2058},[1608,15411,2419],{"class":1959},[1608,15413,15414,15417,15419,15421,15423,15425,15427,15429,15431,15433,15435,15437,15439],{"class":1785,"line":2119},[1608,15415,15416],{"class":1959},"      .",[1608,15418,14095],{"class":2017},[1608,15420,3072],{"class":1959},[1608,15422,15003],{"class":2068},[1608,15424,3020],{"class":1959},[1608,15426,15008],{"class":2068},[1608,15428,3020],{"class":1959},[1608,15430,4193],{"class":2058},[1608,15432,44],{"class":1959},[1608,15434,8787],{"class":2058},[1608,15436,44],{"class":1959},[1608,15438,14893],{"class":2058},[1608,15440,2419],{"class":1959},[1608,15442,15443,15445,15447],{"class":1785,"line":2129},[1608,15444,15416],{"class":1959},[1608,15446,15021],{"class":2017},[1608,15448,13323],{"class":1959},[1608,15450,15451,15453,15455,15457,15459],{"class":1785,"line":1635},[1608,15452,11684],{"class":2046},[1608,15454,14979],{"class":2058},[1608,15456,15033],{"class":1969},[1608,15458,5874],{"class":5031},[1608,15460,1977],{"class":1959},[1608,15462,15463],{"class":1785,"line":2296},[1608,15464,3619],{"class":1959},[1608,15466,15467],{"class":1785,"line":2302},[1608,15468,3079],{"class":1959},[1608,15470,15471],{"class":1785,"line":2308},[1608,15472,1805],{"emptyLinePlaceholder":1305},[1608,15474,15475,15477,15479,15481,15483,15485,15487],{"class":1785,"line":3279},[1608,15476,3059],{"class":1951},[1608,15478,15135],{"class":3062},[1608,15480,3066],{"class":1969},[1608,15482,3131],{"class":2017},[1608,15484,3134],{"class":1959},[1608,15486,3137],{"class":1951},[1608,15488,10656],{"class":1959},[1608,15490,15491,15494,15496,15498,15500,15502,15504,15506,15508,15510,15512],{"class":1785,"line":3284},[1608,15492,15493],{"class":2058},"  category",[1608,15495,44],{"class":1959},[1608,15497,3144],{"class":2058},[1608,15499,13509],{"class":1959},[1608,15501,8857],{"class":2058},[1608,15503,15073],{"class":1969},[1608,15505,4103],{"class":2058},[1608,15507,44],{"class":1959},[1608,15509,8787],{"class":2058},[1608,15511,44],{"class":1959},[1608,15513,15514],{"class":2058},"category\n",[1608,15516,15517],{"class":1785,"line":3293},[1608,15518,3079],{"class":1959},[1608,15520,15521,15523,15525],{"class":1785,"line":3298},[1608,15522,2092],{"class":2989},[1608,15524,2994],{"class":2993},[1608,15526,2072],{"class":2989},[1608,15528,15529],{"class":1785,"line":3308},[1608,15530,1805],{"emptyLinePlaceholder":1305},[1608,15532,15533,15535,15537],{"class":1785,"line":3318},[1608,15534,2990],{"class":2989},[1608,15536,3303],{"class":2993},[1608,15538,2072],{"class":2989},[1608,15540,15541,15543,15545],{"class":1785,"line":3342},[1608,15542,3311],{"class":2989},[1608,15544,2059],{"class":2993},[1608,15546,2072],{"class":2989},[1608,15548,15549],{"class":1785,"line":3365},[1608,15550,15551],{"class":1945},"    \u003C!-- سيظهر \"التطوير\" بدلاً من \"development\" في النسخة العربية -->\n",[1608,15553,15554,15556,15559,15561,15563,15565,15567,15569,15571],{"class":1785,"line":3402},[1608,15555,2055],{"class":2989},[1608,15557,15558],{"class":2993},"Badge",[1608,15560,3325],{"class":2989},[1608,15562,6634],{"class":1959},[1608,15564,15184],{"class":2058},[1608,15566,3333],{"class":1959},[1608,15568,2092],{"class":2989},[1608,15570,15558],{"class":2993},[1608,15572,2072],{"class":2989},[1608,15574,15575,15577,15579],{"class":1785,"line":3412},[1608,15576,3405],{"class":2989},[1608,15578,2059],{"class":2993},[1608,15580,2072],{"class":2989},[1608,15582,15583,15585,15587],{"class":1785,"line":3704},[1608,15584,2092],{"class":2989},[1608,15586,3303],{"class":2993},[1608,15588,2072],{"class":2989},[68,15590,15592],{"id":15591},"الخطوة-9-تحسين-محركات-البحث-seo","الخطوة 9: تحسين محركات البحث (SEO)",[30,15594,15595,15596,15599],{},"أضف علامات hreflang في التخطيطات (",[448,15597,15598],{},"app/layouts/default.vue","):",[441,15601,15603],{"className":2980,"code":15602,"language":2982,"meta":16,"style":16},"\u003Cscript setup lang=\"ts\">\nconst { locale } = useI18n();\n\nconst i18nHead = useLocaleHead({\n  addDirAttribute: true,\n  identifierAttribute: \"id\",\n  addSeoAttributes: true,\n});\n\nuseHead(() => ({\n  htmlAttrs: {\n    lang: i18nHead.value.htmlAttrs!.lang,\n    dir: locale.value === 'ar' ? 'rtl' : 'ltr',\n  },\n  link: [...(i18nHead.value.link || [])],\n  meta: [...(i18nHead.value.meta || [])],\n}));\n\u003C/script>\n",[448,15604,15605,15621,15637,15641,15655,15664,15674,15683,15687,15691,15701,15708,15733,15762,15766,15795,15820,15825],{"__ignoreMap":16},[1608,15606,15607,15609,15611,15613,15615,15617,15619],{"class":1785,"line":1786},[1608,15608,2990],{"class":2989},[1608,15610,2994],{"class":2993},[1608,15612,2998],{"class":2997},[1608,15614,3001],{"class":2997},[1608,15616,2065],{"class":1959},[1608,15618,3006],{"class":2068},[1608,15620,2072],{"class":2989},[1608,15622,15623,15625,15627,15629,15631,15633,15635],{"class":1785,"line":1260},[1608,15624,3059],{"class":1951},[1608,15626,2032],{"class":1959},[1608,15628,13106],{"class":3062},[1608,15630,3037],{"class":1959},[1608,15632,2065],{"class":1969},[1608,15634,13320],{"class":2017},[1608,15636,13323],{"class":1959},[1608,15638,15639],{"class":1785,"line":17},[1608,15640,1805],{"emptyLinePlaceholder":1305},[1608,15642,15643,15645,15648,15650,15653],{"class":1785,"line":1802},[1608,15644,3059],{"class":1951},[1608,15646,15647],{"class":3062}," i18nHead",[1608,15649,3066],{"class":1969},[1608,15651,15652],{"class":2017}," useLocaleHead",[1608,15654,7166],{"class":1959},[1608,15656,15657,15660,15662],{"class":1785,"line":1808},[1608,15658,15659],{"class":2058},"  addDirAttribute:",[1608,15661,5032],{"class":5031},[1608,15663,3694],{"class":1959},[1608,15665,15666,15669,15672],{"class":1785,"line":1814},[1608,15667,15668],{"class":2058},"  identifierAttribute:",[1608,15670,15671],{"class":2068}," \"id\"",[1608,15673,3694],{"class":1959},[1608,15675,15676,15679,15681],{"class":1785,"line":1820},[1608,15677,15678],{"class":2058},"  addSeoAttributes:",[1608,15680,5032],{"class":5031},[1608,15682,3694],{"class":1959},[1608,15684,15685],{"class":1785,"line":1825},[1608,15686,3229],{"class":1959},[1608,15688,15689],{"class":1785,"line":1831},[1608,15690,1805],{"emptyLinePlaceholder":1305},[1608,15692,15693,15695,15697,15699],{"class":1785,"line":1333},[1608,15694,14192],{"class":2017},[1608,15696,3134],{"class":1959},[1608,15698,3137],{"class":1951},[1608,15700,4180],{"class":1959},[1608,15702,15703,15706],{"class":1785,"line":2075},[1608,15704,15705],{"class":2058},"  htmlAttrs:",[1608,15707,1960],{"class":1959},[1608,15709,15710,15713,15715,15717,15719,15721,15724,15726,15728,15731],{"class":1785,"line":2099},[1608,15711,15712],{"class":2058},"    lang:",[1608,15714,15647],{"class":2058},[1608,15716,44],{"class":1959},[1608,15718,3144],{"class":2058},[1608,15720,44],{"class":1959},[1608,15722,15723],{"class":2058},"htmlAttrs",[1608,15725,11671],{"class":1969},[1608,15727,44],{"class":1959},[1608,15729,15730],{"class":2058},"lang",[1608,15732,3694],{"class":1959},[1608,15734,15735,15738,15740,15742,15744,15747,15750,15752,15755,15757,15760],{"class":1785,"line":2119},[1608,15736,15737],{"class":2058},"    dir:",[1608,15739,14626],{"class":2058},[1608,15741,44],{"class":1959},[1608,15743,3144],{"class":2058},[1608,15745,15746],{"class":1969}," ===",[1608,15748,15749],{"class":2068}," 'ar'",[1608,15751,6959],{"class":1969},[1608,15753,15754],{"class":2068}," 'rtl'",[1608,15756,4716],{"class":1969},[1608,15758,15759],{"class":2068}," 'ltr'",[1608,15761,3694],{"class":1959},[1608,15763,15764],{"class":1785,"line":2129},[1608,15765,7197],{"class":1959},[1608,15767,15768,15771,15773,15776,15778,15781,15783,15785,15787,15790,15792],{"class":1785,"line":1635},[1608,15769,15770],{"class":2058},"  link:",[1608,15772,4141],{"class":1959},[1608,15774,15775],{"class":1969},"...",[1608,15777,3072],{"class":1959},[1608,15779,15780],{"class":2058},"i18nHead",[1608,15782,44],{"class":1959},[1608,15784,3144],{"class":2058},[1608,15786,44],{"class":1959},[1608,15788,15789],{"class":2058},"link",[1608,15791,15073],{"class":1969},[1608,15793,15794],{"class":1959}," [])],\n",[1608,15796,15797,15799,15801,15803,15805,15807,15809,15811,15813,15816,15818],{"class":1785,"line":2296},[1608,15798,14216],{"class":2058},[1608,15800,4141],{"class":1959},[1608,15802,15775],{"class":1969},[1608,15804,3072],{"class":1959},[1608,15806,15780],{"class":2058},[1608,15808,44],{"class":1959},[1608,15810,3144],{"class":2058},[1608,15812,44],{"class":1959},[1608,15814,15815],{"class":2058},"meta",[1608,15817,15073],{"class":1969},[1608,15819,15794],{"class":1959},[1608,15821,15822],{"class":1785,"line":2302},[1608,15823,15824],{"class":1959},"}));\n",[1608,15826,15827,15829,15831],{"class":1785,"line":2308},[1608,15828,2092],{"class":2989},[1608,15830,2994],{"class":2993},[1608,15832,2072],{"class":2989},[68,15834,15836],{"id":15835},"الخطوة-10-دعم-rtl-مع-tailwind","الخطوة 10: دعم RTL مع Tailwind",[30,15838,12134,15839,1970],{},[448,15840,15841],{},"tailwind.config.ts",[441,15843,15845],{"className":1936,"code":15844,"language":1938,"meta":16,"style":16},"export default {\n  content: [\n    \"./components/**/*.{js,vue,ts}\",\n    \"./layouts/**/*.vue\",\n    \"./pages/**/*.vue\",\n    \"./app.vue\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [\n    require(\"@tailwindcss/typography\"),\n  ],\n};\n",[448,15846,15847,15855,15861,15868,15875,15882,15889,15893,15900,15908,15912,15918,15930,15934],{"__ignoreMap":16},[1608,15848,15849,15851,15853],{"class":1785,"line":1786},[1608,15850,3483],{"class":2046},[1608,15852,7160],{"class":2046},[1608,15854,1960],{"class":1959},[1608,15856,15857,15859],{"class":1785,"line":1260},[1608,15858,12414],{"class":2058},[1608,15860,12162],{"class":1959},[1608,15862,15863,15866],{"class":1785,"line":17},[1608,15864,15865],{"class":2068},"    \"./components/**/*.{js,vue,ts}\"",[1608,15867,3694],{"class":1959},[1608,15869,15870,15873],{"class":1785,"line":1802},[1608,15871,15872],{"class":2068},"    \"./layouts/**/*.vue\"",[1608,15874,3694],{"class":1959},[1608,15876,15877,15880],{"class":1785,"line":1808},[1608,15878,15879],{"class":2068},"    \"./pages/**/*.vue\"",[1608,15881,3694],{"class":1959},[1608,15883,15884,15887],{"class":1785,"line":1814},[1608,15885,15886],{"class":2068},"    \"./app.vue\"",[1608,15888,3694],{"class":1959},[1608,15890,15891],{"class":1785,"line":1820},[1608,15892,12186],{"class":1959},[1608,15894,15895,15898],{"class":1785,"line":1825},[1608,15896,15897],{"class":2058},"  theme:",[1608,15899,1960],{"class":1959},[1608,15901,15902,15905],{"class":1785,"line":1831},[1608,15903,15904],{"class":2058},"    extend:",[1608,15906,15907],{"class":1959}," {},\n",[1608,15909,15910],{"class":1785,"line":1333},[1608,15911,7197],{"class":1959},[1608,15913,15914,15916],{"class":1785,"line":2075},[1608,15915,7171],{"class":2058},[1608,15917,12162],{"class":1959},[1608,15919,15920,15923,15925,15928],{"class":1785,"line":2099},[1608,15921,15922],{"class":2017},"    require",[1608,15924,3072],{"class":1959},[1608,15926,15927],{"class":2068},"\"@tailwindcss/typography\"",[1608,15929,7031],{"class":1959},[1608,15931,15932],{"class":1785,"line":2119},[1608,15933,12186],{"class":1959},[1608,15935,15936],{"class":1785,"line":2129},[1608,15937,12922],{"class":1959},[30,15939,15940,15941,1970],{},"أضف فئات الأدوات لـ RTL في ",[448,15942,15943],{},"app/assets/css/tailwind.css",[441,15945,15949],{"className":15946,"code":15947,"language":15948,"meta":16,"style":16},"language-css shiki shiki-themes github-light dark-plus dark-plus","@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n  * {\n    @apply rtl:font-arabic ltr:font-latin;\n  }\n}\n","css",[448,15950,15951,15959,15966,15973,15977,15985,15992,16013,16017],{"__ignoreMap":16},[1608,15952,15953,15956],{"class":1785,"line":1786},[1608,15954,15955],{"class":2046},"@tailwind",[1608,15957,15958],{"class":1959}," base;\n",[1608,15960,15961,15963],{"class":1785,"line":1260},[1608,15962,15955],{"class":2046},[1608,15964,15965],{"class":1959}," components;\n",[1608,15967,15968,15970],{"class":1785,"line":17},[1608,15969,15955],{"class":2046},[1608,15971,15972],{"class":1959}," utilities;\n",[1608,15974,15975],{"class":1785,"line":1802},[1608,15976,1805],{"emptyLinePlaceholder":1305},[1608,15978,15979,15982],{"class":1785,"line":1808},[1608,15980,15981],{"class":2046},"@layer",[1608,15983,15984],{"class":1959}," base {\n",[1608,15986,15987,15990],{"class":1785,"line":1814},[1608,15988,15989],{"class":2993},"  *",[1608,15991,1960],{"class":1959},[1608,15993,15994,15997,16001,16004,16007,16010],{"class":1785,"line":1820},[1608,15995,15996],{"class":1959},"    @",[1608,15998,16000],{"class":15999},"se0Tf","apply",[1608,16002,16003],{"class":15999}," rtl",[1608,16005,16006],{"class":1959},":font-arabic ",[1608,16008,16009],{"class":9355},"ltr",[1608,16011,16012],{"class":1959},":font-latin;\n",[1608,16014,16015],{"class":1785,"line":1825},[1608,16016,3619],{"class":1959},[1608,16018,16019],{"class":1785,"line":1831},[1608,16020,2005],{"class":1959},[30,16022,16023,16024,1970],{},"كوّن الخطوط في ",[448,16025,10556],{},[441,16027,16029],{"className":1936,"code":16028,"language":1938,"meta":16,"style":16},"app: {\n  head: {\n    link: [\n      {\n        rel: 'stylesheet',\n        href: 'https://fonts.googleapis.com/css2?family=Almarai:wght@300;400;700&display=swap',\n      },\n      {\n        rel: 'stylesheet',\n        href: 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap',\n      },\n    ],\n  },\n},\n",[448,16030,16031,16039,16046,16054,16058,16068,16078,16082,16086,16094,16103,16107,16111,16115],{"__ignoreMap":16},[1608,16032,16033,16036],{"class":1785,"line":1786},[1608,16034,16035],{"class":4144},"app",[1608,16037,16038],{"class":1959},": {\n",[1608,16040,16041,16044],{"class":1785,"line":1260},[1608,16042,16043],{"class":4144},"  head",[1608,16045,16038],{"class":1959},[1608,16047,16048,16051],{"class":1785,"line":17},[1608,16049,16050],{"class":4144},"    link",[1608,16052,16053],{"class":1959},": [\n",[1608,16055,16056],{"class":1785,"line":1802},[1608,16057,12209],{"class":1959},[1608,16059,16060,16063,16066],{"class":1785,"line":1808},[1608,16061,16062],{"class":2058},"        rel:",[1608,16064,16065],{"class":2068}," 'stylesheet'",[1608,16067,3694],{"class":1959},[1608,16069,16070,16073,16076],{"class":1785,"line":1814},[1608,16071,16072],{"class":2058},"        href:",[1608,16074,16075],{"class":2068}," 'https://fonts.googleapis.com/css2?family=Almarai:wght@300;400;700&display=swap'",[1608,16077,3694],{"class":1959},[1608,16079,16080],{"class":1785,"line":1820},[1608,16081,12262],{"class":1959},[1608,16083,16084],{"class":1785,"line":1825},[1608,16085,12209],{"class":1959},[1608,16087,16088,16090,16092],{"class":1785,"line":1831},[1608,16089,16062],{"class":2058},[1608,16091,16065],{"class":2068},[1608,16093,3694],{"class":1959},[1608,16095,16096,16098,16101],{"class":1785,"line":1333},[1608,16097,16072],{"class":2058},[1608,16099,16100],{"class":2068}," 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap'",[1608,16102,3694],{"class":1959},[1608,16104,16105],{"class":1785,"line":2075},[1608,16106,12262],{"class":1959},[1608,16108,16109],{"class":1785,"line":2099},[1608,16110,12322],{"class":1959},[1608,16112,16113],{"class":1785,"line":2119},[1608,16114,7197],{"class":1959},[1608,16116,16117],{"class":1785,"line":2129},[1608,16118,16119],{"class":1959},"},\n",[68,16121,16123],{"id":16122},"أفضل-الممارسات-والنصائح","أفضل الممارسات والنصائح",[73,16125,16127],{"id":16126},"_1-استخدم-slugs-متسقة","1. استخدم slugs متسقة",[30,16129,16130],{},"احتفظ بنفس الـ slug عبر اللغات لسهولة الربط المتبادل:",[49,16132,16133,16139],{},[52,16134,16135,16136],{},"EN: ",[448,16137,16138],{},"content/en/articles/my-post.md",[52,16140,16141,16142],{},"AR: ",[448,16143,16144],{},"content/ar/articles/my-post.md",[73,16146,16148],{"id":16147},"_2-نفّذ-محتوى-احتياطي","2. نفّذ محتوى احتياطي",[30,16150,16151],{},"قدّم دائماً قيماً احتياطية عندما قد يكون المحتوى مفقوداً:",[441,16153,16155],{"className":2980,"code":16154,"language":2982,"meta":16,"style":16},"const categoryTitle = computed(() => \n  category.value?.title || post.category || 'غير مصنف'\n);\n",[448,16156,16157,16162,16167],{"__ignoreMap":16},[1608,16158,16159],{"class":1785,"line":1786},[1608,16160,16161],{"class":1959},"const categoryTitle = computed(() => \n",[1608,16163,16164],{"class":1785,"line":1260},[1608,16165,16166],{"class":1959},"  category.value?.title || post.category || 'غير مصنف'\n",[1608,16168,16169],{"class":1785,"line":17},[1608,16170,3079],{"class":1959},[73,16172,16174],{"id":16173},"_3-راقب-تغييرات-اللغة","3. راقب تغييرات اللغة",[30,16176,16177,16178,1970],{},"تأكد من مراقبة تغييرات اللغة في ",[448,16179,16180],{},"useAsyncData",[441,16182,16184],{"className":1936,"code":16183,"language":1938,"meta":16,"style":16},"const { data } = await useAsyncData(\n  `key-${locale.value}`,\n  () => fetchData(),\n  { watch: [locale] }  // مهم!\n);\n",[448,16185,16186,16204,16223,16235,16251],{"__ignoreMap":16},[1608,16187,16188,16190,16192,16194,16196,16198,16200,16202],{"class":1785,"line":1786},[1608,16189,3059],{"class":1951},[1608,16191,2032],{"class":1959},[1608,16193,8782],{"class":3062},[1608,16195,3037],{"class":1959},[1608,16197,2065],{"class":1969},[1608,16199,6920],{"class":2046},[1608,16201,6756],{"class":2017},[1608,16203,5098],{"class":1959},[1608,16205,16206,16209,16211,16213,16215,16217,16219,16221],{"class":1785,"line":1260},[1608,16207,16208],{"class":2068},"  `key-",[1608,16210,3206],{"class":3205},[1608,16212,13106],{"class":2058},[1608,16214,44],{"class":3268},[1608,16216,3144],{"class":2058},[1608,16218,2089],{"class":3205},[1608,16220,3222],{"class":2068},[1608,16222,3694],{"class":1959},[1608,16224,16225,16228,16230,16233],{"class":1785,"line":17},[1608,16226,16227],{"class":1959},"  () ",[1608,16229,3137],{"class":1951},[1608,16231,16232],{"class":2017}," fetchData",[1608,16234,12709],{"class":1959},[1608,16236,16237,16239,16241,16243,16245,16248],{"class":1785,"line":1802},[1608,16238,13454],{"class":1959},[1608,16240,13457],{"class":2058},[1608,16242,4141],{"class":1959},[1608,16244,13106],{"class":2058},[1608,16246,16247],{"class":1959},"] }  ",[1608,16249,16250],{"class":1945},"// مهم!\n",[1608,16252,16253],{"class":1785,"line":1808},[1608,16254,3079],{"class":1959},[73,16256,16258],{"id":16257},"_4-اختبر-كل-من-ltr-و-rtl","4. اختبر كل من LTR و RTL",[30,16260,16261],{},"اختبر دائماً تخطيطاتك في كلا الاتجاهين:",[49,16263,16264,16274,16277,16280],{},[52,16265,16266,16267,16270,16271,2950],{},"تحقق من الهوامش والحشوات (",[448,16268,16269],{},"ms-4"," بدلاً من ",[448,16272,16273],{},"ml-4",[52,16275,16276],{},"تحقق من مواضع الأيقونات",[52,16278,16279],{},"اختبر تخطيطات النماذج",[52,16281,16282],{},"تحقق من قوائم التنقل",[73,16284,16286],{"id":16285},"_5-حسّن-الصور","5. حسّن الصور",[30,16288,16289],{},"استخدم Nuxt Image للتحسين التلقائي:",[441,16291,16293],{"className":2980,"code":16292,"language":2982,"meta":16,"style":16},"\u003CNuxtImg\n  :src=\"post.image\"\n  :alt=\"post.title\"\n  width=\"800\"\n  height=\"400\"\n  format=\"webp\"\n  loading=\"lazy\"\n/>\n",[448,16294,16295,16302,16321,16339,16349,16359,16369,16378],{"__ignoreMap":16},[1608,16296,16297,16299],{"class":1785,"line":1786},[1608,16298,2990],{"class":2989},[1608,16300,16301],{"class":2993},"NuxtImg\n",[1608,16303,16304,16307,16309,16311,16313,16315,16317,16319],{"class":1785,"line":1260},[1608,16305,16306],{"class":1959},"  :",[1608,16308,13748],{"class":2997},[1608,16310,2065],{"class":1959},[1608,16312,3381],{"class":3268},[1608,16314,8787],{"class":2058},[1608,16316,44],{"class":1959},[1608,16318,13759],{"class":2058},[1608,16320,4316],{"class":3268},[1608,16322,16323,16325,16327,16329,16331,16333,16335,16337],{"class":1785,"line":17},[1608,16324,16306],{"class":1959},[1608,16326,13770],{"class":2997},[1608,16328,2065],{"class":1959},[1608,16330,3381],{"class":3268},[1608,16332,8787],{"class":2058},[1608,16334,44],{"class":1959},[1608,16336,8857],{"class":2058},[1608,16338,4316],{"class":3268},[1608,16340,16341,16344,16346],{"class":1785,"line":1802},[1608,16342,16343],{"class":2997},"  width",[1608,16345,2065],{"class":1959},[1608,16347,16348],{"class":2068},"\"800\"\n",[1608,16350,16351,16354,16356],{"class":1785,"line":1808},[1608,16352,16353],{"class":2997},"  height",[1608,16355,2065],{"class":1959},[1608,16357,16358],{"class":2068},"\"400\"\n",[1608,16360,16361,16364,16366],{"class":1785,"line":1814},[1608,16362,16363],{"class":2997},"  format",[1608,16365,2065],{"class":1959},[1608,16367,16368],{"class":2068},"\"webp\"\n",[1608,16370,16371,16373,16375],{"class":1785,"line":1820},[1608,16372,5618],{"class":2997},[1608,16374,2065],{"class":1959},[1608,16376,16377],{"class":2068},"\"lazy\"\n",[1608,16379,16380],{"class":1785,"line":1825},[1608,16381,16382],{"class":1959},"/>\n",[68,16384,16386],{"id":16385},"المشاكل-الشائعة-والحلول","المشاكل الشائعة والحلول",[73,16388,16390],{"id":16389},"المشكلة-اللغة-لا-تستمر","المشكلة: اللغة لا تستمر",[30,16392,16393,16396],{},[37,16394,16395],{},"الحل",": تأكد من تفعيل الكشف عن ملفات تعريف الارتباط في تكوين i18n:",[441,16398,16400],{"className":1936,"code":16399,"language":1938,"meta":16,"style":16},"detectBrowserLanguage: {\n  useCookie: true,\n  cookieKey: \"i18n_redirected\",\n}\n",[448,16401,16402,16409,16421,16433],{"__ignoreMap":16},[1608,16403,16404,16407],{"class":1785,"line":1786},[1608,16405,16406],{"class":4144},"detectBrowserLanguage",[1608,16408,16038],{"class":1959},[1608,16410,16411,16414,16416,16419],{"class":1785,"line":1260},[1608,16412,16413],{"class":4144},"  useCookie",[1608,16415,4147],{"class":1959},[1608,16417,16418],{"class":5031},"true",[1608,16420,3694],{"class":1959},[1608,16422,16423,16426,16428,16431],{"class":1785,"line":17},[1608,16424,16425],{"class":4144},"  cookieKey",[1608,16427,4147],{"class":1959},[1608,16429,16430],{"class":2068},"\"i18n_redirected\"",[1608,16432,3694],{"class":1959},[1608,16434,16435],{"class":1785,"line":1802},[1608,16436,2005],{"class":1959},[73,16438,16440],{"id":16439},"المشكلة-المحتوى-لا-يتحدث-عند-تبديل-اللغة","المشكلة: المحتوى لا يتحدث عند تبديل اللغة",[30,16442,16443,16445,16446,16448,16449,1970],{},[37,16444,16395],{},": استخدم خيار ",[448,16447,2959],{}," في ",[448,16450,16180],{},[441,16452,16454],{"className":1936,"code":16453,"language":1938,"meta":16,"style":16},"{ watch: [locale] }\n",[448,16455,16456],{"__ignoreMap":16},[1608,16457,16458,16461,16463,16466,16468],{"class":1785,"line":1786},[1608,16459,16460],{"class":1959},"{ ",[1608,16462,2959],{"class":4144},[1608,16464,16465],{"class":1959},": [",[1608,16467,13106],{"class":2058},[1608,16469,16470],{"class":1959},"] }\n",[73,16472,16474],{"id":16473},"المشكلة-تخطيط-rtl-ينكسر","المشكلة: تخطيط RTL ينكسر",[30,16476,16477,16479,16480,16270,16483,15599],{},[37,16478,16395],{},": استخدم الخصائص المنطقية (",[448,16481,16482],{},"start/end",[448,16484,16485],{},"left/right",[441,16487,16489],{"className":2980,"code":16488,"language":2982,"meta":16,"style":16},"\u003C!-- سيء -->\n\u003Cdiv class=\"ml-4\">\n\n\u003C!-- جيد -->\n\u003Cdiv class=\"ms-4\">\n",[448,16490,16491,16496,16511,16515,16520],{"__ignoreMap":16},[1608,16492,16493],{"class":1785,"line":1786},[1608,16494,16495],{"class":1945},"\u003C!-- سيء -->\n",[1608,16497,16498,16500,16502,16504,16506,16509],{"class":1785,"line":1260},[1608,16499,2990],{"class":2989},[1608,16501,2059],{"class":2993},[1608,16503,4251],{"class":2997},[1608,16505,2065],{"class":1959},[1608,16507,16508],{"class":2068},"\"ml-4\"",[1608,16510,2072],{"class":2989},[1608,16512,16513],{"class":1785,"line":17},[1608,16514,1805],{"emptyLinePlaceholder":1305},[1608,16516,16517],{"class":1785,"line":1802},[1608,16518,16519],{"class":1959},"\u003C!-- جيد -->\n",[1608,16521,16522],{"class":1785,"line":1808},[1608,16523,16524],{"class":1959},"\u003Cdiv class=\"ms-4\">\n",[68,16526,16528],{"id":16527},"اعتبارات-النشر","اعتبارات النشر",[73,16530,16532],{"id":16531},"_1-توليد-المسارات-الثابتة","1. توليد المسارات الثابتة",[30,16534,16535,16536,16538],{},"أضف هذا إلى ",[448,16537,10556],{}," للتوليد الثابت:",[441,16540,16542],{"className":1936,"code":16541,"language":1938,"meta":16,"style":16},"nitro: {\n  prerender: {\n    routes: [\"/\", \"/ar\"],\n    crawlLinks: true,\n  },\n},\n",[448,16543,16544,16551,16558,16575,16586,16590],{"__ignoreMap":16},[1608,16545,16546,16549],{"class":1785,"line":1786},[1608,16547,16548],{"class":4144},"nitro",[1608,16550,16038],{"class":1959},[1608,16552,16553,16556],{"class":1785,"line":1260},[1608,16554,16555],{"class":4144},"  prerender",[1608,16557,16038],{"class":1959},[1608,16559,16560,16563,16565,16567,16569,16572],{"class":1785,"line":17},[1608,16561,16562],{"class":4144},"    routes",[1608,16564,16465],{"class":1959},[1608,16566,8977],{"class":2068},[1608,16568,3020],{"class":1959},[1608,16570,16571],{"class":2068},"\"/ar\"",[1608,16573,16574],{"class":1959},"],\n",[1608,16576,16577,16580,16582,16584],{"class":1785,"line":1802},[1608,16578,16579],{"class":4144},"    crawlLinks",[1608,16581,4147],{"class":1959},[1608,16583,16418],{"class":5031},[1608,16585,3694],{"class":1959},[1608,16587,16588],{"class":1785,"line":1808},[1608,16589,7197],{"class":1959},[1608,16591,16592],{"class":1785,"line":1814},[1608,16593,16119],{"class":1959},[73,16595,16597],{"id":16596},"_2-كوّن-مسارات-الخادم","2. كوّن مسارات الخادم",[30,16599,16600],{},"تأكد من أن خادمك يتعامل مع بادئات اللغة بشكل صحيح.",[73,16602,16604],{"id":16603},"_3-أضف-خريطة-الموقع","3. أضف خريطة الموقع",[30,16606,16607,16608,16611],{},"ثبّت ",[448,16609,16610],{},"@nuxtjs/sitemap"," وكوّنها للغات متعددة:",[441,16613,16615],{"className":1936,"code":16614,"language":1938,"meta":16,"style":16},"sitemap: {\n  hostname: 'https://yourdomain.com',\n  i18n: true,\n}\n",[448,16616,16617,16624,16636,16647],{"__ignoreMap":16},[1608,16618,16619,16622],{"class":1785,"line":1786},[1608,16620,16621],{"class":4144},"sitemap",[1608,16623,16038],{"class":1959},[1608,16625,16626,16629,16631,16634],{"class":1785,"line":1260},[1608,16627,16628],{"class":4144},"  hostname",[1608,16630,4147],{"class":1959},[1608,16632,16633],{"class":2068},"'https://yourdomain.com'",[1608,16635,3694],{"class":1959},[1608,16637,16638,16641,16643,16645],{"class":1785,"line":17},[1608,16639,16640],{"class":4144},"  i18n",[1608,16642,4147],{"class":1959},[1608,16644,16418],{"class":5031},[1608,16646,3694],{"class":1959},[1608,16648,16649],{"class":1785,"line":1802},[1608,16650,2005],{"class":1959},[68,16652,1600],{"id":1600},[30,16654,16655],{},"بناء مدونة متعددة اللغات مع Nuxt 3 و Nuxt Content و Nuxt i18n أمر مباشر بمجرد فهم المفاهيم الأساسية. المفتاح هو:",[913,16657,16658,16661,16664,16667,16670],{},[52,16659,16660],{},"نظّم المحتوى حسب اللغة من البداية",[52,16662,16663],{},"استخدم تعريفات الأنواع المناسبة لتجربة تطوير أفضل",[52,16665,16666],{},"نفّذ composables متسقة للمهام الشائعة",[52,16668,16669],{},"اختبر بدقة في جميع اللغات المدعومة",[52,16671,16672],{},"حسّن لمحركات البحث مع علامات meta و hreflang المناسبة",[30,16674,16675],{},"هذا النهج يتوسع بشكل جيد - يمكنك إضافة لغات جديدة ببساطة عن طريق إنشاء مجلدات محتوى جديدة وتحديث تكوين i18n الخاص بك.",[30,16677,16678],{},"المدونة التي تقرأها الآن تستخدم هذه البنية بالضبط، وتتعامل مع الإنجليزية والعربية مع دعم RTL الكامل، وفئات موطّنة، وتحسين SEO. يمكنك استكشاف الكود المصدري وتكييفه لمشاريعك الخاصة.",[30,16680,2844],{},[2846,16682,16683],{},"html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .se2iQ, html code.shiki .se2iQ{--shiki-light:#032F62;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sffyN, html code.shiki .sffyN{--shiki-light:#24292E;--shiki-default:#808080;--shiki-dark:#808080}html pre.shiki code .ssFZ1, html code.shiki .ssFZ1{--shiki-light:#22863A;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sFcZJ, html code.shiki .sFcZJ{--shiki-light:#6F42C1;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s5T4v, html code.shiki .s5T4v{--shiki-light:#032F62;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .se0Tf, html code.shiki .se0Tf{--shiki-light:#005CC5;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sqBZk, html code.shiki .sqBZk{--shiki-light:#005CC5;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sGRYn, html code.shiki .sGRYn{--shiki-light:#6F42C1;--shiki-default:#C8C8C8;--shiki-dark:#C8C8C8}html pre.shiki code .sNX3-, html code.shiki .sNX3-{--shiki-light:#005CC5;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}",{"title":16,"searchDepth":17,"depth":17,"links":16685},[16686,16687,16688,16689,16690,16691,16692,16693,16694,16695,16696,16697,16698,16705,16710,16715],{"id":12007,"depth":1260,"text":12008},{"id":12040,"depth":1260,"text":12041},{"id":12064,"depth":1260,"text":12065},{"id":12130,"depth":1260,"text":12131},{"id":12451,"depth":1260,"text":12452},{"id":12635,"depth":1260,"text":12636},{"id":13249,"depth":1260,"text":13250},{"id":13930,"depth":1260,"text":13931},{"id":14480,"depth":1260,"text":14481},{"id":14791,"depth":1260,"text":14792},{"id":15591,"depth":1260,"text":15592},{"id":15835,"depth":1260,"text":15836},{"id":16122,"depth":1260,"text":16123,"children":16699},[16700,16701,16702,16703,16704],{"id":16126,"depth":17,"text":16127},{"id":16147,"depth":17,"text":16148},{"id":16173,"depth":17,"text":16174},{"id":16257,"depth":17,"text":16258},{"id":16285,"depth":17,"text":16286},{"id":16385,"depth":1260,"text":16386,"children":16706},[16707,16708,16709],{"id":16389,"depth":17,"text":16390},{"id":16439,"depth":17,"text":16440},{"id":16473,"depth":17,"text":16474},{"id":16527,"depth":1260,"text":16528,"children":16711},[16712,16713,16714],{"id":16531,"depth":17,"text":16532},{"id":16596,"depth":17,"text":16597},{"id":16603,"depth":17,"text":16604},{"id":1600,"depth":1260,"text":1600},"دليل شامل خطوة بخطوة لبناء مدونة متعددة اللغات كاملة باستخدام Nuxt 3 و Nuxt Content و Nuxt i18n، مع أمثلة حقيقية من هذه المدونة",{"excerpt":16718},{"type":13,"value":16719},[16720],[30,16721,12004],{},"/bnaa-mdwnh-mtaddh-allghat-bastkhdam-nuxt-content","2025-01-10",{"title":11999,"description":16716},"بناء-مدونة-متعددة-اللغات-باستخدام-nuxt-content",[11994,16727,16728,16729,16730,2982,1938,16731],"nuxt-content","nuxt-i18n","تدويل","مدونة","برمجة","kY_s-YgyPmMc_Q89VXFiB9zpzwrZIDK6lGrl4EKnDz0",{"id":16734,"title":16735,"author":26,"body":16736,"category":19,"description":18896,"extension":7,"image":18897,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":18898,"navigation":1305,"path":18905,"publishedAt":18906,"readingTime":1635,"seo":18907,"stem":18908,"tags":18909,"updatedAt":1342,"__hash__":18911},"articles_ar/تحسين-مهارات-تطوير-الويب-2025.md","كيفية تحسين مهارات تطوير الويب في 2025: دليل شامل",{"type":13,"value":16737,"toc":18841},[16738,16741,16744,16748,16752,16755,16759,16764,16790,16795,16821,16826,16852,16856,16862,16867,16892,16898,16918,16923,16937,16941,16944,16948,16953,16976,16981,17015,17020,17052,17056,17059,17085,17088,17102,17106,17109,17113,17118,17132,17137,17154,17158,17163,17177,17181,17198,17202,17207,17221,17225,17230,17238,17243,17251,17256,17267,17272,17283,17287,17291,17294,17299,17313,17318,17332,17336,17341,17352,17357,17368,17374,17388,17392,17395,17399,17404,17418,17423,17434,17439,17450,17454,17492,17496,17499,17503,17508,17522,17527,17541,17546,17557,17562,17573,17577,17582,17593,17598,17609,17614,17625,17629,17633,17638,17649,17654,17665,17670,17681,17686,17697,17702,17713,17718,17729,17733,17738,17752,17757,17771,17776,17790,17795,17809,17813,17816,17819,17845,17849,17854,18012,18017,18142,18147,18239,18244,18258,18262,18265,18269,18274,18305,18310,18327,18331,18336,18353,18355,18360,18374,18379,18396,18401,18415,18419,18422,18425,18430,18440,18445,18459,18464,18478,18483,18497,18500,18517,18521,18524,18528,18533,18544,18549,18560,18565,18576,18581,18592,18596,18601,18612,18617,18628,18633,18644,18649,18660,18664,18667,18671,18676,18687,18692,18703,18708,18721,18726,18740,18744,18749,18763,18768,18782,18787,18801,18806,18823,18827,18830,18833,18836,18838],[30,16739,16740],{},"تطور تطوير الويب أسرع من أي مجال آخر في التكنولوجيا. الأطر، الأدوات، وأفضل الممارسات منذ عامين فقط قد تكون قديمة بالفعل. سواء كنت مبتدئاً تبحث عن الدخول في المجال أو مطوراً ذا خبرة يريد البقاء تنافسياً، التعلم المستمر أمر أساسي.",[30,16742,16743],{},"يوفر هذا الدليل استراتيجيات عملية لتحسين مهارات تطوير الويب الخاصة بك، البقاء محدثاً مع الصناعة، وبناء مهنة تزدهر في مشهد متغير باستمرار.",[68,16745,16747],{"id":16746},"_1-بنِ-مشاريع-حقيقية-ليس-مجرد-دروس","1. بنِ مشاريع حقيقية (ليس مجرد دروس)",[73,16749,16751],{"id":16750},"فخ-الدروس","فخ الدروس",[30,16753,16754],{},"يعلق العديد من المطورين في \"جحيم الدروس\" - استهلاك الدروس بلا نهاية بدون بناء أي شيء أصلي. بينما الدروس قيمة لتعلم الصيغة والمفاهيم، النمو الحقيقي يحدث عندما تبني مشاريع بشكل مستقل.",[73,16756,16758],{"id":16757},"أفكار-مشاريع-لمستويات-مهارات-مختلفة","أفكار مشاريع لمستويات مهارات مختلفة",[30,16760,16761],{},[37,16762,16763],{},"مشاريع مبتدئة:",[49,16765,16766,16772,16778,16784],{},[52,16767,16768,16771],{},[37,16769,16770],{},"محفظة شخصية",": عرض عملك بـ HTML، CSS، وJavaScript نقي",[52,16773,16774,16777],{},[37,16775,16776],{},"تطبيق مهام",": تعلم إدارة الحالة وعمليات CRUD",[52,16779,16780,16783],{},[37,16781,16782],{},"تطبيق طقس",": تدريب العمل مع APIs",[52,16785,16786,16789],{},[37,16787,16788],{},"آلة حاسبة",": إتقان منطق JavaScript ومعالجة DOM",[30,16791,16792],{},[37,16793,16794],{},"مشاريع متوسطة:",[49,16796,16797,16803,16809,16815],{},[52,16798,16799,16802],{},[37,16800,16801],{},"منصة مدونة",": استخدم إطار عمل (React، Vue، Nuxt) مع دعم markdown",[52,16804,16805,16808],{},[37,16806,16807],{},"متجر تجارة إلكترونية",": تنفيذ وظيفة سلة التسوق، تدفق الدفع، وتكامل الدفع",[52,16810,16811,16814],{},[37,16812,16813],{},"نسخة وسائل تواصل اجتماعي",": بنِ مصادقة المستخدمين، المنشورات، التعليقات، والإعجابات",[52,16816,16817,16820],{},[37,16818,16819],{},"لوحة تحكم",": إنشاء تصورات بيانات مع رسوم بيانية وتحديثات فورية",[30,16822,16823],{},[37,16824,16825],{},"مشاريع متقدمة:",[49,16827,16828,16834,16840,16846],{},[52,16829,16830,16833],{},[37,16831,16832],{},"تطبيق SaaS",": معمارية متعددة المستأجرين، فوترة الاشتراكات، التحليلات",[52,16835,16836,16839],{},[37,16837,16838],{},"أداة تعاون فورية",": WebSockets، حل النزاعات، تحويلات تشغيلية",[52,16841,16842,16845],{},[37,16843,16844],{},"منصة بث فيديو",": ترميز الفيديو، بث معدل بت تكيفي، تكامل CDN",[52,16847,16848,16851],{},[37,16849,16850],{},"أداة بناء أو إطار عمل",": أنشئ أداة CLI الخاصة بك، مكون حزم، أو إطار عمل مصغر",[73,16853,16855],{"id":16854},"أفضل-الممارسات-للتعلم-المبني-على-المشاريع","أفضل الممارسات للتعلم المبني على المشاريع",[30,16857,16858,16861],{},[37,16859,16860],{},"1. ابدأ صغيراً، ثم توسع","\nابدأ بإصدار قابل للعيش الأدنى، ثم أضف ميزات تدريجياً.",[30,16863,16864],{},[37,16865,16866],{},"2. استخدم أدوات حديثة",[49,16868,16869,16875,16881,16887],{},[52,16870,16871,16874],{},[37,16872,16873],{},"مراقبة الإصدارات",": Git وGitHub من اليوم الأول",[52,16876,16877,16880],{},[37,16878,16879],{},"مديرو الحزم",": npm، pnpm، أو bun",[52,16882,16883,16886],{},[37,16884,16885],{},"أدوات البناء",": Vite، Next.js، أو Nuxt",[52,16888,16889,16891],{},[37,16890,8424],{},": أضف أمان الأنواع لالتقاط الأخطاء مبكراً",[30,16893,16894,16897],{},[37,16895,16896],{},"3. نشر مشاريعك","\nلا تدع المشاريع تجلس على جهازك:",[49,16899,16900,16906,16912],{},[52,16901,16902,16905],{},[37,16903,16904],{},"استضافة مجانية",": Vercel، Netlify، Cloudflare Pages، GitHub Pages",[52,16907,16908,16911],{},[37,16909,16910],{},"أسماء النطاقات",": احصل على نطاق مخصص لمحفظتك",[52,16913,16914,16917],{},[37,16915,16916],{},"CI/CD",": أعد إعداد النشر التلقائي عند git push",[30,16919,16920],{},[37,16921,16922],{},"4. وثق عملك",[49,16924,16925,16928,16931,16934],{},[52,16926,16927],{},"اكتب README يشرح المشروع",[52,16929,16930],{},"أضف تعليقات للكود المعقد",[52,16932,16933],{},"أنشئ عرض مشروع في محفظتك",[52,16935,16936],{},"اكتب منشور مدونة عن ما تعلمته",[68,16938,16940],{"id":16939},"_2-إتقان-الأساسيات","2. إتقان الأساسيات",[30,16942,16943],{},"قبل القفز لأحدث إطار عمل، تأكد من وجود أساس متين:",[73,16945,16947],{"id":16946},"التقنيات-الأساسية-للويب","التقنيات الأساسية للويب",[30,16949,16950],{},[37,16951,16952],{},"HTML5:",[49,16954,16955,16967,16970,16973],{},[52,16956,16957,16958,11906,16961,11906,16964,2950],{},"ترميز دلالي (",[448,16959,16960],{},"\u003Carticle>",[448,16962,16963],{},"\u003Csection>",[448,16965,16966],{},"\u003Cnav>",[52,16968,16969],{},"سمات إمكانية الوصول (ARIA، نص بديل، تنقل لوحة المفاتيح)",[52,16971,16972],{},"النماذج والتحقق",[52,16974,16975],{},"أفضل ممارسات SEO",[30,16977,16978],{},[37,16979,16980],{},"CSS:",[49,16982,16983,16989,16997,17003,17009],{},[52,16984,16985,16988],{},[37,16986,16987],{},"التخطيط",": إتقان Flexbox وGrid",[52,16990,16991,16994,16995],{},[37,16992,16993],{},"CSS الحديث",": خصائص مخصصة (متغيرات CSS)، استعلامات الحاوي، ",[448,16996,15981],{},[52,16998,16999,17002],{},[37,17000,17001],{},"التصميم المتجاوب",": نهج الهاتف أولاً، استعلامات الوسائط",[52,17004,17005,17008],{},[37,17006,17007],{},"الرسوم المتحركة",": الانتقالات، الإطارات الرئيسية، انتقالات العرض",[52,17010,17011,17014],{},[37,17012,17013],{},"معمارية CSS",": BEM، أول الأدوات (Tailwind)، وحدات CSS",[30,17016,17017],{},[37,17018,17019],{},"JavaScript (ES6+):",[49,17021,17022,17028,17034,17040,17046],{},[52,17023,17024,17027],{},[37,17025,17026],{},"الصيغة الحديثة",": تفكيك، عوامل الانتشار/الباقي، القوالب الحرفية",[52,17029,17030,17033],{},[37,17031,17032],{},"البرمجة غير المتزامنة",": Promises، async/await، معالجة الأخطاء",[52,17035,17036,17039],{},[37,17037,17038],{},"طرق المصفوفات",": map، filter، reduce، find، some، every",[52,17041,17042,17045],{},[37,17043,17044],{},"الوحدات",": import/export، imports ديناميكية",[52,17047,17048,17051],{},[37,17049,17050],{},"معالجة DOM",": محددات الاستعلام، معالجة الأحداث، محتوى ديناميكي",[73,17053,17055],{"id":17054},"أساسيات-علوم-الحاسوب","أساسيات علوم الحاسوب",[30,17057,17058],{},"فهم هذه المفاهيم سيجعلك مطوراً أفضل:",[49,17060,17061,17067,17073,17079],{},[52,17062,17063,17066],{},[37,17064,17065],{},"هياكل البيانات",": المصفوفات، الكائنات، الخرائط، المجموعات، الأشجار",[52,17068,17069,17072],{},[37,17070,17071],{},"الخوارزميات",": الترتيب، البحث، التكرار، البرمجة الديناميكية",[52,17074,17075,17078],{},[37,17076,17077],{},"تدوين Big O",": فهم تعقيد الوقت والمساحة",[52,17080,17081,17084],{},[37,17082,17083],{},"أنماط التصميم",": Singleton، factory، observer، أنماط الوحدة",[30,17086,17087],{},"الموارد:",[49,17089,17090,17096],{},[52,17091,17092,17095],{},[37,17093,17094],{},"مجاني",": قسم الخوارزميات في FreeCodeCamp، مشاكل LeetCode السهلة",[52,17097,17098,17101],{},[37,17099,17100],{},"مدفوع",": Frontend Masters، دورات Udemy حول الخوارزميات لـ JS",[68,17103,17105],{"id":17104},"_3-تعلم-إطار-عمل-حديث-وتعلمه-جيداً","3. تعلم إطار عمل حديث (وتعلمه جيداً)",[30,17107,17108],{},"لا تقفز بين الأطر. اختر واحداً وأتقنه:",[73,17110,17112],{"id":17111},"react-الأكثر-شعبية","React (الأكثر شعبية)",[30,17114,17115],{},[37,17116,17117],{},"لماذا React:",[49,17119,17120,17123,17126,17129],{},[52,17121,17122],{},"أكبر سوق وظائف",[52,17124,17125],{},"نظام بيئي ومجتمع هائل",[52,17127,17128],{},"مدعوم من Meta",[52,17130,17131],{},"يدير Instagram، Facebook، Netflix",[30,17133,17134],{},[37,17135,17136],{},"ما ستتعلمه:",[49,17138,17139,17142,17145,17148,17151],{},[52,17140,17141],{},"Hooks (useState، useEffect، useContext، useReducer، hooks مخصصة)",[52,17143,17144],{},"أنماط المكونات (التكوين، render props، HOCs)",[52,17146,17147],{},"إدارة الحالة (Context API، Zustand، Redux Toolkit)",[52,17149,17150],{},"Next.js للتطبيقات الإنتاجية (App Router، Server Components)",[52,17152,17153],{},"React Query لجلب البيانات",[73,17155,17157],{"id":17156},"vuenuxt-ودود-للمطورين","Vue/Nuxt (ودود للمطورين)",[30,17159,17160],{},[37,17161,17162],{},"لماذا Vue:",[49,17164,17165,17168,17171,17174],{},[52,17166,17167],{},"منحنى تعلم أسهل من React",[52,17169,17170],{},"توثيق رائع",[52,17172,17173],{},"مميز كاملاً خارج الصندوق",[52,17175,17176],{},"Nuxt لـ SSR/SSG",[30,17178,17179],{},[37,17180,17136],{},[49,17182,17183,17186,17189,17192,17195],{},[52,17184,17185],{},"Composition API",[52,17187,17188],{},"نظام التفاعل",[52,17190,17191],{},"Composables والأدوات",[52,17193,17194],{},"وحدات ومكونات Nuxt",[52,17196,17197],{},"Nuxt Content للمواقع المبنية على المحتوى",[73,17199,17201],{"id":17200},"svelte-الأداء-أولاً","Svelte (الأداء أولاً)",[30,17203,17204],{},[37,17205,17206],{},"لماذا Svelte:",[49,17208,17209,17212,17215,17218],{},[52,17210,17211],{},"يترجم لـ JS نقي (لا runtime)",[52,17213,17214],{},"أبسط صيغة",[52,17216,17217],{},"تفاعل مدمج",[52,17219,17220],{},"SvelteKit للتطبيقات الكاملة الواجهات",[73,17222,17224],{"id":17223},"استراتيجية-التعلم","استراتيجية التعلم",[30,17226,17227],{},[37,17228,17229],{},"المرحلة 1 (الأسابيع 1-2): الأساسيات",[49,17231,17232,17235],{},[52,17233,17234],{},"الدرس الرسمي والتوثيق",[52,17236,17237],{},"بنِ 2-3 مكونات صغيرة",[30,17239,17240],{},[37,17241,17242],{},"المرحلة 2 (الأسابيع 3-4): متوسط",[49,17244,17245,17248],{},[52,17246,17247],{},"تعلم التوجيه وإدارة الحالة",[52,17249,17250],{},"بنِ تطبيق متعدد الصفحات",[30,17252,17253],{},[37,17254,17255],{},"المرحلة 3 (الأسابيع 5-8): متقدم",[49,17257,17258,17261,17264],{},[52,17259,17260],{},"تحسين الأداء",[52,17262,17263],{},"الاختبار (Vitest، React Testing Library)",[52,17265,17266],{},"النشر الإنتاجي",[30,17268,17269],{},[37,17270,17271],{},"المرحلة 4 (مستمر): الإتقان",[49,17273,17274,17277,17280],{},[52,17275,17276],{},"المساهمة في المصدر المفتوح",[52,17278,17279],{},"بناء تطبيقات إنتاجية",[52,17281,17282],{},"تدريب الآخرين",[68,17284,17286],{"id":17285},"_4-تطوير-روتين-برمجة-متسق","4. تطوير روتين برمجة متسق",[73,17288,17290],{"id":17289},"تحدي-100-يوم-من-الكود","تحدي 100 يوم من الكود",[30,17292,17293],{},"التزم بالبرمجة لمدة ساعة على الأقل كل يوم لـ 100 يوم:",[30,17295,17296],{},[37,17297,17298],{},"القواعد:",[913,17300,17301,17304,17307,17310],{},[52,17302,17303],{},"برمجة كل يوم",[52,17305,17306],{},"نشر تقدمك مع #100DaysOfCode",[52,17308,17309],{},"تشجيع الآخرين في المجتمع",[52,17311,17312],{},"تتبع تقدمك في مذكرة",[30,17314,17315],{},[37,17316,17317],{},"الفوائد:",[49,17319,17320,17323,17326,17329],{},[52,17321,17322],{},"بناء عادة",[52,17324,17325],{},"إنشاء مساءلة",[52,17327,17328],{},"توليد محفظة عمل",[52,17330,17331],{},"ربطك بمطورين آخرين",[73,17333,17335],{"id":17334},"استراتيجيات-إدارة-الوقت","استراتيجيات إدارة الوقت",[30,17337,17338],{},[37,17339,17340],{},"تقنية Pomodoro:",[49,17342,17343,17346,17349],{},[52,17344,17345],{},"25 دقيقة من البرمجة المركزة",[52,17347,17348],{},"استراحة 5 دقائق",[52,17350,17351],{},"تكرار 4 مرات، ثم استراحة أطول",[30,17353,17354],{},[37,17355,17356],{},"حجب الوقت:",[49,17358,17359,17362,17365],{},[52,17360,17361],{},"الصباح: عمل عميق على الميزات المعقدة",[52,17363,17364],{},"الظهيرة: اجتماعات، مراجعات الكود، التعلم",[52,17366,17367],{},"المساء: مشاريع شخصية، القراءة",[30,17369,17370,17373],{},[37,17371,17372],{},"التدريب المتعمد:","\nركز على مهارة محددة واحدة في كل مرة:",[49,17375,17376,17379,17382,17385],{},[52,17377,17378],{},"الأسبوع 1: إتقان CSS Grid",[52,17380,17381],{},"الأسبوع 2: تعلم React hooks بعمق",[52,17383,17384],{},"الأسبوع 3: تدريب مشاكل الخوارزميات",[52,17386,17387],{},"الأسبوع 4: بناء ميزة بمهارة جديدة",[68,17389,17391],{"id":17390},"_5-اقرأ-الكود-كثيراً","5. اقرأ الكود (كثيراً)",[30,17393,17394],{},"قراءة الكود مهمة مثل كتابته.",[73,17396,17398],{"id":17397},"أين-تجد-كود-جيد","أين تجد كود جيد",[30,17400,17401],{},[37,17402,17403],{},"مشاريع المصدر المفتوح:",[49,17405,17406,17409,17412,17415],{},[52,17407,17408],{},"React: facebook/react",[52,17410,17411],{},"Vue: vuejs/core",[52,17413,17414],{},"Next.js: vercel/next.js",[52,17416,17417],{},"Tailwind CSS: tailwindlabs/tailwindcss",[30,17419,17420],{},[37,17421,17422],{},"استكشاف GitHub:",[49,17424,17425,17428,17431],{},[52,17426,17427],{},"ابحث عن تسميات \"good first issue\"",[52,17429,17430],{},"تصفح المستودعات الرائجة",[52,17432,17433],{},"تصفية بلغتك المفضلة",[30,17435,17436],{},[37,17437,17438],{},"منصات مراجعة الكود:",[49,17440,17441,17444,17447],{},[52,17442,17443],{},"CodeReview Stack Exchange",[52,17445,17446],{},"مراجعات pull request على GitHub",[52,17448,17449],{},"طلبات مراجعة الكود على Dev.to",[73,17451,17453],{"id":17452},"كيفية-قراءة-الكود-بفعالية","كيفية قراءة الكود بفعالية",[913,17455,17456,17462,17468,17474,17480,17486],{},[52,17457,17458,17461],{},[37,17459,17460],{},"ابدأ بـ README",": فهم غرض المشروع",[52,17463,17464,17467],{},[37,17465,17466],{},"استكشف هيكل الملفات",": رؤية كيفية تنظيم الكود",[52,17469,17470,17473],{},[37,17471,17472],{},"اقرأ الاختبارات",": تفسر السلوك المتوقع",[52,17475,17476,17479],{},[37,17477,17478],{},"اتبع تدفق البيانات",": تتبع كيف تتحرك البيانات عبر التطبيق",[52,17481,17482,17485],{},[37,17483,17484],{},"دراسة الأنماط",": لاحظ القرارات المعمارية المتكررة",[52,17487,17488,17491],{},[37,17489,17490],{},"اطرح أسئلة",": علق على الكود الذي لا تفهمه",[68,17493,17495],{"id":17494},"_6-انضم-لمجتمعات-المطورين","6. انضم لمجتمعات المطورين",[30,17497,17498],{},"التعلم وحده صعب. توفر المجتمعات الدعم، الدافع، والفرص.",[73,17500,17502],{"id":17501},"المجتمعات-عبر-الإنترنت","المجتمعات عبر الإنترنت",[30,17504,17505],{},[37,17506,17507],{},"خوادم Discord:",[49,17509,17510,17513,17516,17519],{},[52,17511,17512],{},"Reactiflux (مطورو React)",[52,17514,17515],{},"Vue Land (مطورو Vue)",[52,17517,17518],{},"The Odin Project",[52,17520,17521],{},"FreeCodeCamp",[30,17523,17524],{},[37,17525,17526],{},"Reddit:",[49,17528,17529,17532,17535,17538],{},[52,17530,17531],{},"r/webdev",[52,17533,17534],{},"r/learnprogramming",[52,17536,17537],{},"r/javascript",[52,17539,17540],{},"r/Frontend",[30,17542,17543],{},[37,17544,17545],{},"Twitter/X:",[49,17547,17548,17551,17554],{},[52,17549,17550],{},"تابع المطورين الذين تعجبهم",[52,17552,17553],{},"شارك رحلة تعلمك",[52,17555,17556],{},"تفاعل مع #DevCommunity",[30,17558,17559],{},[37,17560,17561],{},"Dev.to وHashnode:",[49,17563,17564,17567,17570],{},[52,17565,17566],{},"اكتب منشورات مدونة عن ما تتعلمه",[52,17568,17569],{},"اقرأ وعلق على منشورات الآخرين",[52,17571,17572],{},"بنِ حضورك عبر الإنترنت",[73,17574,17576],{"id":17575},"المجتمعات-المحلية","المجتمعات المحلية",[30,17578,17579],{},[37,17580,17581],{},"اللقاءات:",[49,17583,17584,17587,17590],{},[52,17585,17586],{},"ابحث Meetup.com عن مجموعات dev محلية",[52,17588,17589],{},"احضر المحادثات وفعاليات التواصل",[52,17591,17592],{},"قدم مشاريعك الخاصة",[30,17594,17595],{},[37,17596,17597],{},"هاكاثونات:",[49,17599,17600,17603,17606],{},[52,17601,17602],{},"بنِ مشاريع في 24-48 ساعة",[52,17604,17605],{},"تواصل مع مطورين آخرين",[52,17607,17608],{},"فز بجوائز واحصل على خبرة",[30,17610,17611],{},[37,17612,17613],{},"المؤتمرات:",[49,17615,17616,17619,17622],{},[52,17617,17618],{},"React Summit، Vue Conf، JSNation",[52,17620,17621],{},"احضر ورش العمل والمحادثات",[52,17623,17624],{},"قابل قادة الصناعة",[68,17626,17628],{"id":17627},"_7-ابق-محدثاً-بالأدوات-والممارسات-الحديثة","7. ابق محدثاً بالأدوات والممارسات الحديثة",[73,17630,17632],{"id":17631},"أدوات-التطوير-الأساسية-لعام-2025","أدوات التطوير الأساسية لعام 2025",[30,17634,17635],{},[37,17636,17637],{},"محررات الكود:",[49,17639,17640,17643,17646],{},[52,17641,17642],{},"VS Code (الأكثر شعبية)",[52,17644,17645],{},"Cursor (برمجة بالذكاء الاصطناعي)",[52,17647,17648],{},"WebStorm (IDE مميز كاملاً)",[30,17650,17651],{},[37,17652,17653],{},"أدوات المتصفح DevTools:",[49,17655,17656,17659,17662],{},[52,17657,17658],{},"Chrome DevTools: تحليل الأداء، تصحيح الأخطاء",[52,17660,17661],{},"React DevTools: فحص المكونات",[52,17663,17664],{},"Vue DevTools: تصحيح إدارة الحالة",[30,17666,17667],{},[37,17668,17669],{},"مراقبة الإصدارات:",[49,17671,17672,17675,17678],{},[52,17673,17674],{},"Git: التفريع، الدمج، إعادة التأسيس",[52,17676,17677],{},"GitHub Actions: أتمتة CI/CD",[52,17679,17680],{},"Conventional Commits: رسائل commit منظمة",[30,17682,17683],{},[37,17684,17685],{},"الاختبار:",[49,17687,17688,17691,17694],{},[52,17689,17690],{},"Vitest: اختبار وحدة سريع",[52,17692,17693],{},"Playwright: اختبار شامل",[52,17695,17696],{},"Testing Library: اختبار المكونات",[30,17698,17699],{},[37,17700,17701],{},"أدوات البناء:",[49,17703,17704,17707,17710],{},[52,17705,17706],{},"Vite: بناء سريع كالبرق",[52,17708,17709],{},"Turbopack: حزم الجيل التالي",[52,17711,17712],{},"esbuild: حزم سريع للغاية",[30,17714,17715],{},[37,17716,17717],{},"مساعدي البرمجة بالذكاء الاصطناعي:",[49,17719,17720,17723,17726],{},[52,17721,17722],{},"GitHub Copilot: إكمال الكود",[52,17724,17725],{},"Cursor: برمجة زوجية بالذكاء الاصطناعي",[52,17727,17728],{},"ChatGPT: تصحيح الأخطاء والتعلم",[73,17730,17732],{"id":17731},"أفضل-الممارسات-الحديثة","أفضل الممارسات الحديثة",[30,17734,17735],{},[37,17736,17737],{},"الأداء:",[49,17739,17740,17743,17746,17749],{},[52,17741,17742],{},"Core Web Vitals (LCP، FID، CLS)",[52,17744,17745],{},"تقسيم الكود والتحميل الكسول",[52,17747,17748],{},"تحسين الصور (WebP، AVIF)",[52,17750,17751],{},"استخدام CDN",[30,17753,17754],{},[37,17755,17756],{},"إمكانية الوصول:",[49,17758,17759,17762,17765,17768],{},[52,17760,17761],{},"تنقل لوحة المفاتيح",[52,17763,17764],{},"دعم قارئ الشاشة",[52,17766,17767],{},"سمات ARIA",[52,17769,17770],{},"نسب تباين الألوان",[30,17772,17773],{},[37,17774,17775],{},"SEO:",[49,17777,17778,17781,17784,17787],{},[52,17779,17780],{},"HTML دلالي",[52,17782,17783],{},"Meta tags وOpen Graph",[52,17785,17786],{},"بيانات منظمة (JSON-LD)",[52,17788,17789],{},"تحسين سرعة الموقع",[30,17791,17792],{},[37,17793,17794],{},"الأمان:",[49,17796,17797,17800,17803,17806],{},[52,17798,17799],{},"التحقق من صحة الإدخال وتعقيمه",[52,17801,17802],{},"HTTPS في كل مكان",[52,17804,17805],{},"سياسة أمان المحتوى (CSP)",[52,17807,17808],{},"أفضل ممارسات المصادقة",[68,17810,17812],{"id":17811},"_8-تعلم-typescript","8. تعلم TypeScript",[30,17814,17815],{},"أصبح TypeScript معيار الصناعة للتطبيقات واسعة النطاق.",[73,17817,1877],{"id":17818},"لماذا-typescript",[49,17820,17821,17827,17833,17839],{},[52,17822,17823,17826],{},[37,17824,17825],{},"التقاط الأخطاء مبكراً",": أخطاء الأنواع ملتقطة أثناء التطوير",[52,17828,17829,17832],{},[37,17830,17831],{},"دعم IDE أفضل",": الإكمال التلقائي، إعادة التصميم، التنقل",[52,17834,17835,17838],{},[37,17836,17837],{},"توثيق محسن",": الأنواع تعمل كتوثيق",[52,17840,17841,17844],{},[37,17842,17843],{},"معيار الصناعة",": معظم المشاريع الجديدة تستخدم TypeScript",[73,17846,17848],{"id":17847},"مسار-التعلم","مسار التعلم",[30,17850,17851],{},[37,17852,17853],{},"الأسبوع 1: الأساسيات",[441,17855,17857],{"className":1936,"code":17856,"language":1938,"meta":16,"style":16},"// الأنواع الأساسية\nlet name: string = \"John\";\nlet age: number = 30;\nlet isActive: boolean = true;\n\n// المصفوفات والكائنات\nlet numbers: number[] = [1, 2, 3];\nlet user: { name: string; age: number } = {\n  name: \"John\",\n  age: 30\n};\n",[448,17858,17859,17864,17882,17899,17917,17921,17926,17959,17991,18000,18008],{"__ignoreMap":16},[1608,17860,17861],{"class":1785,"line":1786},[1608,17862,17863],{"class":1945},"// الأنواع الأساسية\n",[1608,17865,17866,17869,17871,17873,17875,17877,17880],{"class":1785,"line":1260},[1608,17867,17868],{"class":1951},"let",[1608,17870,3535],{"class":2058},[1608,17872,1970],{"class":1969},[1608,17874,1987],{"class":1973},[1608,17876,3066],{"class":1969},[1608,17878,17879],{"class":2068}," \"John\"",[1608,17881,1977],{"class":1959},[1608,17883,17884,17886,17889,17891,17893,17895,17897],{"class":1785,"line":17},[1608,17885,17868],{"class":1951},[1608,17887,17888],{"class":2058}," age",[1608,17890,1970],{"class":1969},[1608,17892,1974],{"class":1973},[1608,17894,3066],{"class":1969},[1608,17896,3107],{"class":3075},[1608,17898,1977],{"class":1959},[1608,17900,17901,17903,17906,17908,17911,17913,17915],{"class":1785,"line":1802},[1608,17902,17868],{"class":1951},[1608,17904,17905],{"class":2058}," isActive",[1608,17907,1970],{"class":1969},[1608,17909,17910],{"class":1973}," boolean",[1608,17912,3066],{"class":1969},[1608,17914,5032],{"class":5031},[1608,17916,1977],{"class":1959},[1608,17918,17919],{"class":1785,"line":1808},[1608,17920,1805],{"emptyLinePlaceholder":1305},[1608,17922,17923],{"class":1785,"line":1814},[1608,17924,17925],{"class":1945},"// المصفوفات والكائنات\n",[1608,17927,17928,17930,17933,17935,17937,17940,17942,17944,17946,17948,17951,17953,17956],{"class":1785,"line":1820},[1608,17929,17868],{"class":1951},[1608,17931,17932],{"class":2058}," numbers",[1608,17934,1970],{"class":1969},[1608,17936,1974],{"class":1973},[1608,17938,17939],{"class":1959},"[] ",[1608,17941,2065],{"class":1969},[1608,17943,4141],{"class":1959},[1608,17945,6398],{"class":3075},[1608,17947,3020],{"class":1959},[1608,17949,17950],{"class":3075},"2",[1608,17952,3020],{"class":1959},[1608,17954,17955],{"class":3075},"3",[1608,17957,17958],{"class":1959},"];\n",[1608,17960,17961,17963,17965,17967,17969,17971,17973,17975,17978,17981,17983,17985,17987,17989],{"class":1785,"line":1825},[1608,17962,17868],{"class":1951},[1608,17964,3086],{"class":2058},[1608,17966,1970],{"class":1969},[1608,17968,2032],{"class":1959},[1608,17970,2086],{"class":1965},[1608,17972,1970],{"class":1969},[1608,17974,1987],{"class":1973},[1608,17976,17977],{"class":1959},"; ",[1608,17979,17980],{"class":1965},"age",[1608,17982,1970],{"class":1969},[1608,17984,1974],{"class":1973},[1608,17986,3037],{"class":1959},[1608,17988,2065],{"class":1969},[1608,17990,1960],{"class":1959},[1608,17992,17993,17996,17998],{"class":1785,"line":1831},[1608,17994,17995],{"class":2058},"  name:",[1608,17997,17879],{"class":2068},[1608,17999,3694],{"class":1959},[1608,18001,18002,18005],{"class":1785,"line":1333},[1608,18003,18004],{"class":2058},"  age:",[1608,18006,18007],{"class":3075}," 30\n",[1608,18009,18010],{"class":1785,"line":2075},[1608,18011,12922],{"class":1959},[30,18013,18014],{},[37,18015,18016],{},"الأسبوع 2: الواجهات والأنواع",[441,18018,18020],{"className":1936,"code":18019,"language":1938,"meta":16,"style":16},"interface User {\n  id: number;\n  name: string;\n  email: string;\n  isAdmin?: boolean; // اختياري\n}\n\ntype Status = \"active\" | \"inactive\" | \"pending\";\n\nfunction getUser(id: number): User {\n  // ...\n}\n",[448,18021,18022,18030,18040,18050,18060,18074,18078,18082,18106,18110,18133,18138],{"__ignoreMap":16},[1608,18023,18024,18026,18028],{"class":1785,"line":1786},[1608,18025,1952],{"class":1951},[1608,18027,1956],{"class":1955},[1608,18029,1960],{"class":1959},[1608,18031,18032,18034,18036,18038],{"class":1785,"line":1260},[1608,18033,1966],{"class":1965},[1608,18035,1970],{"class":1969},[1608,18037,1974],{"class":1973},[1608,18039,1977],{"class":1959},[1608,18041,18042,18044,18046,18048],{"class":1785,"line":17},[1608,18043,1982],{"class":1965},[1608,18045,1970],{"class":1969},[1608,18047,1987],{"class":1973},[1608,18049,1977],{"class":1959},[1608,18051,18052,18054,18056,18058],{"class":1785,"line":1802},[1608,18053,1994],{"class":1965},[1608,18055,1970],{"class":1969},[1608,18057,1987],{"class":1973},[1608,18059,1977],{"class":1959},[1608,18061,18062,18065,18067,18069,18071],{"class":1785,"line":1808},[1608,18063,18064],{"class":1965},"  isAdmin",[1608,18066,4086],{"class":1969},[1608,18068,17910],{"class":1973},[1608,18070,17977],{"class":1959},[1608,18072,18073],{"class":1945},"// اختياري\n",[1608,18075,18076],{"class":1785,"line":1814},[1608,18077,2005],{"class":1959},[1608,18079,18080],{"class":1785,"line":1820},[1608,18081,1805],{"emptyLinePlaceholder":1305},[1608,18083,18084,18086,18089,18091,18094,18096,18099,18101,18104],{"class":1785,"line":1825},[1608,18085,13290],{"class":1951},[1608,18087,18088],{"class":1955}," Status",[1608,18090,3066],{"class":1969},[1608,18092,18093],{"class":2068}," \"active\"",[1608,18095,5871],{"class":1969},[1608,18097,18098],{"class":2068}," \"inactive\"",[1608,18100,5871],{"class":1969},[1608,18102,18103],{"class":2068}," \"pending\"",[1608,18105,1977],{"class":1959},[1608,18107,18108],{"class":1785,"line":1831},[1608,18109,1805],{"emptyLinePlaceholder":1305},[1608,18111,18112,18114,18117,18119,18121,18123,18125,18127,18129,18131],{"class":1785,"line":1333},[1608,18113,2014],{"class":1951},[1608,18115,18116],{"class":2017}," getUser",[1608,18118,3072],{"class":1959},[1608,18120,5363],{"class":1965},[1608,18122,1970],{"class":1969},[1608,18124,1974],{"class":1973},[1608,18126,2950],{"class":1959},[1608,18128,1970],{"class":1969},[1608,18130,1956],{"class":1955},[1608,18132,1960],{"class":1959},[1608,18134,18135],{"class":1785,"line":2075},[1608,18136,18137],{"class":1945},"  // ...\n",[1608,18139,18140],{"class":1785,"line":2099},[1608,18141,2005],{"class":1959},[30,18143,18144],{},[37,18145,18146],{},"الأسبوع 3: Generics",[441,18148,18150],{"className":1936,"code":18149,"language":1938,"meta":16,"style":16},"function wrapInArray\u003CT>(value: T): T[] {\n  return [value];\n}\n\nconst numbers = wrapInArray(1); // number[]\nconst strings = wrapInArray(\"hello\"); // string[]\n",[448,18151,18152,18180,18190,18194,18198,18218],{"__ignoreMap":16},[1608,18153,18154,18156,18159,18161,18163,18165,18167,18169,18171,18173,18175,18177],{"class":1785,"line":1786},[1608,18155,2014],{"class":1951},[1608,18157,18158],{"class":2017}," wrapInArray",[1608,18160,2990],{"class":1959},[1608,18162,4809],{"class":1955},[1608,18164,4812],{"class":1959},[1608,18166,3144],{"class":1965},[1608,18168,1970],{"class":1969},[1608,18170,4829],{"class":1955},[1608,18172,2950],{"class":1959},[1608,18174,1970],{"class":1969},[1608,18176,4829],{"class":1955},[1608,18178,18179],{"class":1959},"[] {\n",[1608,18181,18182,18184,18186,18188],{"class":1785,"line":1260},[1608,18183,2047],{"class":2046},[1608,18185,4141],{"class":1959},[1608,18187,3144],{"class":2058},[1608,18189,17958],{"class":1959},[1608,18191,18192],{"class":1785,"line":17},[1608,18193,2005],{"class":1959},[1608,18195,18196],{"class":1785,"line":1802},[1608,18197,1805],{"emptyLinePlaceholder":1305},[1608,18199,18200,18202,18204,18206,18208,18210,18212,18215],{"class":1785,"line":1808},[1608,18201,3059],{"class":1951},[1608,18203,17932],{"class":3062},[1608,18205,3066],{"class":1969},[1608,18207,18158],{"class":2017},[1608,18209,3072],{"class":1959},[1608,18211,6398],{"class":3075},[1608,18213,18214],{"class":1959},"); ",[1608,18216,18217],{"class":1945},"// number[]\n",[1608,18219,18220,18222,18225,18227,18229,18231,18234,18236],{"class":1785,"line":1814},[1608,18221,3059],{"class":1951},[1608,18223,18224],{"class":3062}," strings",[1608,18226,3066],{"class":1969},[1608,18228,18158],{"class":2017},[1608,18230,3072],{"class":1959},[1608,18232,18233],{"class":2068},"\"hello\"",[1608,18235,18214],{"class":1959},[1608,18237,18238],{"class":1945},"// string[]\n",[30,18240,18241],{},[37,18242,18243],{},"الأسبوع 4: الأنماط المتقدمة",[49,18245,18246,18249,18252,18255],{},[52,18247,18248],{},"أنواع الأدوات (Partial، Required، Pick، Omit)",[52,18250,18251],{},"حارسات الأنواع وضيق النطاق",[52,18253,18254],{},"الاتحادات المميزة",[52,18256,18257],{},"الأنواع الشرطية",[68,18259,18261],{"id":18260},"_9-بنِ-حضوراً-قوياً-عبر-الإنترنت","9. بنِ حضوراً قوياً عبر الإنترنت",[30,18263,18264],{},"حضورك عبر الإنترنت هو سيرتك الذاتية الحديثة.",[73,18266,18268],{"id":18267},"موقع-المحفظة","موقع المحفظة",[30,18270,18271],{},[37,18272,18273],{},"الأقسام الواجبة:",[49,18275,18276,18282,18288,18294,18299],{},[52,18277,18278,18281],{},[37,18279,18280],{},"البطل",": الاسم، اللقب، مقدمة مختصرة",[52,18283,18284,18287],{},[37,18285,18286],{},"المشاريع",": 4-6 مشاريع أفضل مع أوصاف",[52,18289,18290,18293],{},[37,18291,18292],{},"المهارات",": التقنيات التي تعرفها",[52,18295,18296,18298],{},[37,18297,9006],{},": قصتك وخلفيتك",[52,18300,18301,18304],{},[37,18302,18303],{},"التواصل",": البريد الإلكتروني، LinkedIn، GitHub",[30,18306,18307],{},[37,18308,18309],{},"الاعتبارات التقنية:",[49,18311,18312,18315,18318,18321,18324],{},[52,18313,18314],{},"سرعة تحميل سريعة",[52,18316,18317],{},"متجاوب للهاتف",[52,18319,18320],{},"تصميم نظيف ومهني",[52,18322,18323],{},"محسن لـ SEO",[52,18325,18326],{},"نطاق مخصص",[73,18328,18330],{"id":18329},"ملف-github","ملف GitHub",[30,18332,18333],{},[37,18334,18335],{},"اجعله مميزاً:",[49,18337,18338,18341,18344,18347,18350],{},[52,18339,18340],{},"README مهني مع إحصائيات وشارات",[52,18342,18343],{},"تثبيت أفضل المستودعات",[52,18345,18346],{},"المساهمة بانتظام (المربعات الخضراء مهمة)",[52,18348,18349],{},"كتابة ملفات README واضحة للمشاريع",[52,18351,18352],{},"تضمين عروض حية ولقطات شاشة",[73,18354,9030],{"id":9030},[30,18356,18357],{},[37,18358,18359],{},"لماذا المدونة:",[49,18361,18362,18365,18368,18371],{},[52,18363,18364],{},"تعزيز تعلمك",[52,18366,18367],{},"بناء علامتك الشخصية",[52,18369,18370],{},"تحسين مهارات الكتابة",[52,18372,18373],{},"مساعدة الآخرين والعطاء",[30,18375,18376],{},[37,18377,18378],{},"ما تكتبه:",[49,18380,18381,18384,18387,18390,18393],{},[52,18382,18383],{},"حلول للمشاكل التي حللتها",[52,18385,18386],{},"درس لمفهوم تعلمته",[52,18388,18389],{},"مقارنة أدوات أو أطر عمل",[52,18391,18392],{},"رحلة تعلمك",[52,18394,18395],{},"تحديات الكود التي أكملتها",[30,18397,18398],{},[37,18399,18400],{},"أين تنشر:",[49,18402,18403,18406,18409,18412],{},[52,18404,18405],{},"موقعك الخاص (أفضل لـ SEO)",[52,18407,18408],{},"Dev.to (مجتمع رائع)",[52,18410,18411],{},"Hashnode (مركز على المطورين)",[52,18413,18414],{},"Medium (جمهور أكبر)",[68,18416,18418],{"id":18417},"_10-ساهم-في-المصدر-المفتوح","10. ساهم في المصدر المفتوح",[30,18420,18421],{},"مساهمات المصدر المفتوح تبدو رائعة على السير الذاتية وتعلمك مهارات العالم الحقيقي.",[73,18423,18424],{"id":18424},"البدء",[30,18426,18427],{},[37,18428,18429],{},"الخطوة 1: العثور على مشروع",[49,18431,18432,18434,18437],{},[52,18433,17427],{},[52,18435,18436],{},"اختر مشاريع تستخدمها فعلياً",[52,18438,18439],{},"ابدأ بتحسينات التوثيق",[30,18441,18442],{},[37,18443,18444],{},"الخطوة 2: فهم قاعدة الكود",[49,18446,18447,18450,18453,18456],{},[52,18448,18449],{},"اقرأ CONTRIBUTING.md",[52,18451,18452],{},"دراسة هيكل الكود",[52,18454,18455],{},"شغل المشروع محلياً",[52,18457,18458],{},"اقرأ المشاكل والـ PRs الموجودة",[30,18460,18461],{},[37,18462,18463],{},"الخطوة 3: أول مساهمة لك",[49,18465,18466,18469,18472,18475],{},[52,18467,18468],{},"إصلاح خطأ إملائي في التوثيق",[52,18470,18471],{},"تحسين رسائل الخطأ",[52,18473,18474],{},"إضافة اختبارات للكود الموجود",[52,18476,18477],{},"إصلاح خطأ صغير",[30,18479,18480],{},[37,18481,18482],{},"الخطوة 4: نمو تأثيرك",[49,18484,18485,18488,18491,18494],{},[52,18486,18487],{},"معالجة مشاكل أكبر",[52,18489,18490],{},"اقتراح ميزات جديدة",[52,18492,18493],{},"مساعدة مراجعة PRs أخرى",[52,18495,18496],{},"أصبح maintainer",[73,18498,18499],{"id":18499},"الفوائد",[49,18501,18502,18505,18508,18511,18514],{},[52,18503,18504],{},"تعلم من مطورين ذوي خبرة",[52,18506,18507],{},"بناء محفظة عامة",[52,18509,18510],{},"التواصل مع المجتمع",[52,18512,18513],{},"العطاء للأدوات التي تستخدمها",[52,18515,18516],{},"فرص وظائف محتملة",[68,18518,18520],{"id":18519},"_11-تدريب-حل-المشاكل","11. تدريب حل المشاكل",[30,18522,18523],{},"تركز مقابلات البرمجة غالباً على الخوارزميات وهياكل البيانات.",[73,18525,18527],{"id":18526},"منصات-التدريب","منصات التدريب",[30,18529,18530],{},[37,18531,18532],{},"LeetCode:",[49,18534,18535,18538,18541],{},[52,18536,18537],{},"ابدأ بمشاكل سهلة",[52,18539,18540],{},"ركز على الأنماط، لا الحفظ",[52,18542,18543],{},"افعل 1-2 مشكلة يومياً",[30,18545,18546],{},[37,18547,18548],{},"CodeWars:",[49,18550,18551,18554,18557],{},[52,18552,18553],{},"تحديات ممتعة ومغامرة",[52,18555,18556],{},"مستويات صعوبة متعددة",[52,18558,18559],{},"تعلم نهج مختلفة",[30,18561,18562],{},[37,18563,18564],{},"Frontend Mentor:",[49,18566,18567,18570,18573],{},[52,18568,18569],{},"تحديات UI واقعية",[52,18571,18572],{},"ملفات التصميم متوفرة",[52,18574,18575],{},"تدريب HTML، CSS، JS",[30,18577,18578],{},[37,18579,18580],{},"HackerRank:",[49,18582,18583,18586,18589],{},[52,18584,18585],{},"التحضير للمقابلات التقنية",[52,18587,18588],{},"شهادات لإكمال المسارات",[52,18590,18591],{},"تحديات محددة للشركات",[73,18593,18595],{"id":18594},"خطة-الدراسة","خطة الدراسة",[30,18597,18598],{},[37,18599,18600],{},"الأسبوع 1-2: المصفوفات والسلاسل",[49,18602,18603,18606,18609],{},[52,18604,18605],{},"تقنية المؤشرين",[52,18607,18608],{},"النافذة المنزلقة",[52,18610,18611],{},"معالجة السلاسل الأساسية",[30,18613,18614],{},[37,18615,18616],{},"الأسبوع 3-4: خرائط Hash والمجموعات",[49,18618,18619,18622,18625],{},[52,18620,18621],{},"عد التكرار",[52,18623,18624],{},"نمط مجموعتين",[52,18626,18627],{},"مشاكل التجميع",[30,18629,18630],{},[37,18631,18632],{},"الأسبوع 5-6: التكرار والعودية",[49,18634,18635,18638,18641],{},[52,18636,18637],{},"تحديد الحالة الأساسية",[52,18639,18640],{},"عبور الشجرة",[52,18642,18643],{},"مشاكل التركيبة",[30,18645,18646],{},[37,18647,18648],{},"الأسبوع 7-8: البرمجة الديناميكية",[49,18650,18651,18654,18657],{},[52,18652,18653],{},"التذكر",[52,18655,18656],{},"الجدولة",[52,18658,18659],{},"مشاكل DP الكلاسيكية",[68,18661,18663],{"id":18662},"_12-تعلم-أساسيات-الخلفية","12. تعلم أساسيات الخلفية",[30,18665,18666],{},"كونك مطوراً كامل الواجهات يزيد من قيمتك.",[73,18668,18670],{"id":18669},"تقنيات-الخلفية-للتعلم","تقنيات الخلفية للتعلم",[30,18672,18673],{},[37,18674,18675],{},"Node.js:",[49,18677,18678,18681,18684],{},[52,18679,18680],{},"Express.js أو Fastify للـ APIs",[52,18682,18683],{},"المصادقة (JWT، sessions)",[52,18685,18686],{},"تكامل قاعدة البيانات",[30,18688,18689],{},[37,18690,18691],{},"قواعد البيانات:",[49,18693,18694,18697,18700],{},[52,18695,18696],{},"SQL: PostgreSQL، MySQL",[52,18698,18699],{},"NoSQL: MongoDB، Firebase",[52,18701,18702],{},"ORMs: Prisma، Drizzle",[30,18704,18705],{},[37,18706,18707],{},"تصميم API:",[49,18709,18710,18713,18716,18719],{},[52,18711,18712],{},"مبادئ RESTful",[52,18714,18715],{},"أساسيات GraphQL",[52,18717,18718],{},"نسخ API",[52,18720,2827],{},[30,18722,18723],{},[37,18724,18725],{},"النشر:",[49,18727,18728,18731,18734,18737],{},[52,18729,18730],{},"حاويات Docker",[52,18732,18733],{},"خطوط أنابيب CI/CD",[52,18735,18736],{},"متغيرات البيئة",[52,18738,18739],{},"المراقبة والتسجيل",[68,18741,18743],{"id":18742},"الخاتمة-خطة-عملك-لـ-90-يوم","الخاتمة: خطة عملك لـ 90 يوم",[30,18745,18746],{},[37,18747,18748],{},"الأيام 1-30: الأساس",[49,18750,18751,18754,18757,18760],{},[52,18752,18753],{},"أكمل درساً شاملاً واحداً في إطار عملك المختار",[52,18755,18756],{},"بنِ 3 مشاريع صغيرة من الصفر",[52,18758,18759],{},"انضم لـ 2-3 مجتمعات مطورين",[52,18761,18762],{},"ابدأ مذكرة برمجة",[30,18764,18765],{},[37,18766,18767],{},"الأيام 31-60: العمق",[49,18769,18770,18773,18776,18779],{},[52,18771,18772],{},"بنِ مشروع كبير واحد (انشره!)",[52,18774,18775],{},"حل 30 مشكلة خوارزمية (واحدة يومياً)",[52,18777,18778],{},"اكتب 3 منشورات مدونة عن ما تعلمته",[52,18780,18781],{},"ساهم في مشروع مصدر مفتوح واحد",[30,18783,18784],{},[37,18785,18786],{},"الأيام 61-90: الإتقان",[49,18788,18789,18792,18795,18798],{},[52,18790,18791],{},"أعد بناء أحد مشاريعك بأفضل الممارسات",[52,18793,18794],{},"أنشئ موقع محفظتك",[52,18796,18797],{},"تقدم لـ 5 وظائف أو فرص freelance",[52,18799,18800],{},"ابدأ مساعدة الآخرين في المجتمعات",[30,18802,18803],{},[37,18804,18805],{},"مستمر: النمو",[49,18807,18808,18811,18814,18817,18820],{},[52,18809,18810],{},"برمجة يومية (حتى لو 30 دقيقة فقط)",[52,18812,18813],{},"تعلم شيء جديد أسبوعياً",[52,18815,18816],{},"شارك معرفتك من خلال المدونة أو التدريب",[52,18818,18819],{},"بنِ مشاريع تحل مشاكل حقيقية",[52,18821,18822],{},"ابق فضولياً ولا تتوقف عن التعلم",[68,18824,18826],{"id":18825},"الأفكار-النهائية","الأفكار النهائية",[30,18828,18829],{},"تحسين مهارات تطوير الويب الخاصة بك سباق ماراثون، ليس سباق قصير. ركز على التدريب المتسق والمتعمد على التلقين. بنِ مشاريع تهمك، تواصل مع مطورين آخرين، واستمر دائماً في التعلم.",[30,18831,18832],{},"سيستمر مشهد تطوير الويب في التغيير، لكن الأساسيات - حل المشاكل، الكود النظيف، والتعلم المستمر - ستظل دائماً قيمة.",[30,18834,18835],{},"ابدأ اليوم. اختر استراتيجية واحدة من هذا الدليل وتلتزم بها للأيام الـ 30 القادمة. نفسك المستقبلي سيشكرك.",[30,18837,2844],{},[2846,18839,18840],{},"html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}",{"title":16,"searchDepth":17,"depth":17,"links":18842},[18843,18848,18852,18858,18862,18866,18870,18874,18878,18883,18887,18891,18894,18895],{"id":16746,"depth":1260,"text":16747,"children":18844},[18845,18846,18847],{"id":16750,"depth":17,"text":16751},{"id":16757,"depth":17,"text":16758},{"id":16854,"depth":17,"text":16855},{"id":16939,"depth":1260,"text":16940,"children":18849},[18850,18851],{"id":16946,"depth":17,"text":16947},{"id":17054,"depth":17,"text":17055},{"id":17104,"depth":1260,"text":17105,"children":18853},[18854,18855,18856,18857],{"id":17111,"depth":17,"text":17112},{"id":17156,"depth":17,"text":17157},{"id":17200,"depth":17,"text":17201},{"id":17223,"depth":17,"text":17224},{"id":17285,"depth":1260,"text":17286,"children":18859},[18860,18861],{"id":17289,"depth":17,"text":17290},{"id":17334,"depth":17,"text":17335},{"id":17390,"depth":1260,"text":17391,"children":18863},[18864,18865],{"id":17397,"depth":17,"text":17398},{"id":17452,"depth":17,"text":17453},{"id":17494,"depth":1260,"text":17495,"children":18867},[18868,18869],{"id":17501,"depth":17,"text":17502},{"id":17575,"depth":17,"text":17576},{"id":17627,"depth":1260,"text":17628,"children":18871},[18872,18873],{"id":17631,"depth":17,"text":17632},{"id":17731,"depth":17,"text":17732},{"id":17811,"depth":1260,"text":17812,"children":18875},[18876,18877],{"id":17818,"depth":17,"text":1877},{"id":17847,"depth":17,"text":17848},{"id":18260,"depth":1260,"text":18261,"children":18879},[18880,18881,18882],{"id":18267,"depth":17,"text":18268},{"id":18329,"depth":17,"text":18330},{"id":9030,"depth":17,"text":9030},{"id":18417,"depth":1260,"text":18418,"children":18884},[18885,18886],{"id":18424,"depth":17,"text":18424},{"id":18499,"depth":17,"text":18499},{"id":18519,"depth":1260,"text":18520,"children":18888},[18889,18890],{"id":18526,"depth":17,"text":18527},{"id":18594,"depth":17,"text":18595},{"id":18662,"depth":1260,"text":18663,"children":18892},[18893],{"id":18669,"depth":17,"text":18670},{"id":18742,"depth":1260,"text":18743},{"id":18825,"depth":1260,"text":18826},"دليل شامل لرفع مستوى مهارات تطوير الويب الخاصة بك مع استراتيجيات عملية، أدوات حديثة، وطرق تعلم مثبتة لعام 2025 وما بعده.","https://images.unsplash.com/photo-1518818608552-195ed130cdf4?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI1fHxwcm9ncmFtbWluZyUyMGxhbmd1YWdlfGVufDB8fHx8MTY3MTE1NDE5OQ&ixlib=rb-4.0.3&q=80&w=2000",{"excerpt":18899},{"type":13,"value":18900},[18901,18903],[30,18902,16740],{},[30,18904,16743],{},"/thsyn-mharat-ttwyr-alwyb-2025","2022-12-16T09:53:38.000Z",{"title":16735,"description":18896},"تحسين-مهارات-تطوير-الويب-2025",[2886,1337,1338,2885,1938,18910,7289,8266],"react","JyCS14DBRQxKXTZfV6HbRgeTXhY6Vm_4sjreUGJlOo4",{"id":18913,"title":18914,"author":26,"body":18915,"category":19,"description":22912,"extension":7,"image":22913,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":22914,"navigation":1305,"path":22935,"publishedAt":22936,"readingTime":2099,"seo":22937,"stem":22938,"tags":22939,"updatedAt":1342,"__hash__":22942},"articles_ar/توليد-سلاسل-نصية-عشوائية-javascript-2025.md","الدليل الشامل لتوليد السلاسل النصية العشوائية في JavaScript (2025)",{"type":13,"value":18916,"toc":22874},[18917,18920,18925,18942,18946,18949,18955,18987,18993,19019,19023,19146,19150,19154,19157,19300,19306,19311,19322,19327,19335,19339,19342,19459,19464,19468,19479,19483,19486,19763,19768,19772,19783,19787,19790,19852,19857,19861,19872,19876,19884,19888,19892,19895,20050,20055,20059,20069,20073,20233,20237,20431,20435,20438,20590,20599,20603,20607,20621,20771,20776,20796,20800,20804,21271,21275,21540,21544,21707,21711,21937,21941,21944,22322,22326,22330,22432,22436,22550,22554,22558,22619,22623,22662,22666,22686,22690,22760,22764,22815,22817,22820,22860,22868,22871],[30,18918,18919],{},"توليد السلاسل النصية العشوائية مهمة شائعة في تطوير الويب - سواء كنت تقوم بإنشاء معرفات فريدة، رموز مميزة آمنة، كلمات مرور، أو معرفات جلسات. في هذا الدليل الشامل، سنستكشف جميع الطرق الحديثة لتوليد السلاسل النصية العشوائية في JavaScript، سواء على جانب العميل أو الخادم، مع التركيز على الأمان والأداء.",[30,18921,18922],{},[37,18923,18924],{},"ستتعلم:",[49,18926,18927,18930,18933,18936,18939],{},[52,18928,18929],{},"طرق آمنة مشفرة (لكلمات المرور، الرموز المميزة)",[52,18931,18932],{},"طرق سريعة (لحالات الاستخدام غير الحساسة أمنياً)",[52,18934,18935],{},"تقنيات ES6+ حديثة",[52,18937,18938],{},"مقارنات الأداء",[52,18940,18941],{},"حالات الاستخدام الواقعية وأفضل الممارسات",[68,18943,18945],{"id":18944},"متى-تحتاج-سلاسل-نصية-عشوائية","متى تحتاج سلاسل نصية عشوائية؟",[30,18947,18948],{},"قبل الغوص في الكود، دعنا نفهم حالات الاستخدام الشائعة:",[30,18950,18951,18954],{},[37,18952,18953],{},"حساسة أمنياً"," (استخدم طرق آمنة مشفرة):",[49,18956,18957,18963,18969,18975,18981],{},[52,18958,18959,18962],{},[37,18960,18961],{},"توليد كلمات المرور"," - كلمات مرور أولية للمستخدمين",[52,18964,18965,18968],{},[37,18966,18967],{},"رموز API"," - رموز المصادقة التي تدوم أسابيع/أشهر",[52,18970,18971,18974],{},[37,18972,18973],{},"معرفات الجلسات"," - معرفات فريدة لجلسات المستخدم",[52,18976,18977,18980],{},[37,18978,18979],{},"رموز إعادة تعيين كلمة المرور"," - رموز محدودة زمنياً ترسل عبر البريد الإلكتروني",[52,18982,18983,18986],{},[37,18984,18985],{},"رموز CSRF"," - حماية من تزوير الطلبات عبر المواقع",[30,18988,18989,18992],{},[37,18990,18991],{},"غير حساسة أمنياً"," (Math.random() مناسب):",[49,18994,18995,19001,19007,19013],{},[52,18996,18997,19000],{},[37,18998,18999],{},"معرفات العناصر الفريدة"," - مفاتيح React، معرفات عناصر DOM",[52,19002,19003,19006],{},[37,19004,19005],{},"كسر الذاكرة المؤقتة"," - معاملات استعلام عشوائية للموارد",[52,19008,19009,19012],{},[37,19010,19011],{},"أسماء الملفات المؤقتة"," - رفع الملفات قبل المعالجة",[52,19014,19015,19018],{},[37,19016,19017],{},"بيانات الاختبار"," - توليد بيانات وهمية للاختبار",[68,19020,19022],{"id":19021},"جدول-مقارنة-سريع","جدول مقارنة سريع",[507,19024,19025,19046],{},[510,19026,19027],{},[513,19028,19029,19032,19035,19037,19040,19043],{},[516,19030,19031],{},"الطريقة",[516,19033,19034],{},"حالة الاستخدام",[516,19036,2612],{},[516,19038,19039],{},"السرعة",[516,19041,19042],{},"المتصفح",[516,19044,19045],{},"Node.js",[523,19047,19048,19069,19087,19108,19127],{},[513,19049,19050,19055,19058,19061,19063,19066],{},[528,19051,19052],{},[448,19053,19054],{},"crypto.randomBytes()",[528,19056,19057],{},"رموز API، كلمات المرور",[528,19059,19060],{},"✅ عالي",[528,19062,2341],{},[528,19064,19065],{},"❌",[528,19067,19068],{},"✅",[513,19070,19071,19076,19079,19081,19083,19085],{},[528,19072,19073],{},[448,19074,19075],{},"crypto.getRandomValues()",[528,19077,19078],{},"رموز جانب العميل",[528,19080,19060],{},[528,19082,2341],{},[528,19084,19068],{},[528,19086,19065],{},[513,19088,19089,19094,19097,19099,19102,19105],{},[528,19090,19091],{},[448,19092,19093],{},"crypto.randomUUID()",[528,19095,19096],{},"معرفات فريدة",[528,19098,19060],{},[528,19100,19101],{},"أسرع",[528,19103,19104],{},"✅ (>15)",[528,19106,19107],{},"✅ (>14)",[513,19109,19110,19115,19118,19121,19123,19125],{},[528,19111,19112],{},[448,19113,19114],{},"Math.random()",[528,19116,19117],{},"غير أمني",[528,19119,19120],{},"❌ منخفض",[528,19122,19101],{},[528,19124,19068],{},[528,19126,19068],{},[513,19128,19129,19134,19137,19139,19142,19144],{},[528,19130,19131],{},[448,19132,19133],{},"nanoid",[528,19135,19136],{},"معرفات فريدة قصيرة",[528,19138,19060],{},[528,19140,19141],{},"سريع جداً",[528,19143,19068],{},[528,19145,19068],{},[68,19147,19149],{"id":19148},"طرق-nodejs-جانب-الخادم","طرق Node.js (جانب الخادم)",[73,19151,19153],{"id":19152},"_1-سلسلة-hex-آمنة-مشفرة","1. سلسلة hex آمنة مشفرة",[30,19155,19156],{},"مثالية لرموز API ومعرفات الجلسات:",[441,19158,19161],{"className":19159,"code":19160,"language":2885,"meta":16,"style":16},"language-javascript shiki shiki-themes github-light dark-plus dark-plus","import crypto from 'crypto';\n\nfunction generateToken(length = 32) {\n  return crypto\n    .randomBytes(Math.ceil(length / 2))\n    .toString('hex')\n    .slice(0, length);\n}\n\nconsole.log(generateToken(32));\n// الناتج: \"a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1\"\n",[448,19162,19163,19177,19181,19200,19207,19234,19248,19265,19269,19273,19295],{"__ignoreMap":16},[1608,19164,19165,19167,19170,19172,19175],{"class":1785,"line":1786},[1608,19166,3013],{"class":2046},[1608,19168,19169],{"class":2058}," crypto",[1608,19171,6107],{"class":2046},[1608,19173,19174],{"class":2068}," 'crypto'",[1608,19176,1977],{"class":1959},[1608,19178,19179],{"class":1785,"line":1260},[1608,19180,1805],{"emptyLinePlaceholder":1305},[1608,19182,19183,19185,19188,19190,19193,19195,19198],{"class":1785,"line":17},[1608,19184,2014],{"class":1951},[1608,19186,19187],{"class":2017}," generateToken",[1608,19189,3072],{"class":1959},[1608,19191,19192],{"class":1965},"length",[1608,19194,3066],{"class":1969},[1608,19196,19197],{"class":3075}," 32",[1608,19199,4832],{"class":1959},[1608,19201,19202,19204],{"class":1785,"line":1802},[1608,19203,2047],{"class":2046},[1608,19205,19206],{"class":2058}," crypto\n",[1608,19208,19209,19211,19214,19216,19219,19221,19224,19226,19228,19230,19232],{"class":1785,"line":1808},[1608,19210,14092],{"class":1959},[1608,19212,19213],{"class":2017},"randomBytes",[1608,19215,3072],{"class":1959},[1608,19217,19218],{"class":2058},"Math",[1608,19220,44],{"class":1959},[1608,19222,19223],{"class":2017},"ceil",[1608,19225,3072],{"class":1959},[1608,19227,19192],{"class":2058},[1608,19229,4744],{"class":1969},[1608,19231,3150],{"class":3075},[1608,19233,5020],{"class":1959},[1608,19235,19236,19238,19241,19243,19246],{"class":1785,"line":1814},[1608,19237,14092],{"class":1959},[1608,19239,19240],{"class":2017},"toString",[1608,19242,3072],{"class":1959},[1608,19244,19245],{"class":2068},"'hex'",[1608,19247,2419],{"class":1959},[1608,19249,19250,19252,19255,19257,19259,19261,19263],{"class":1785,"line":1820},[1608,19251,14092],{"class":1959},[1608,19253,19254],{"class":2017},"slice",[1608,19256,3072],{"class":1959},[1608,19258,3076],{"class":3075},[1608,19260,3020],{"class":1959},[1608,19262,19192],{"class":2058},[1608,19264,3079],{"class":1959},[1608,19266,19267],{"class":1785,"line":1825},[1608,19268,2005],{"class":1959},[1608,19270,19271],{"class":1785,"line":1831},[1608,19272,1805],{"emptyLinePlaceholder":1305},[1608,19274,19275,19278,19280,19282,19284,19287,19289,19292],{"class":1785,"line":1333},[1608,19276,19277],{"class":2058},"console",[1608,19279,44],{"class":1959},[1608,19281,3197],{"class":2017},[1608,19283,3072],{"class":1959},[1608,19285,19286],{"class":2017},"generateToken",[1608,19288,3072],{"class":1959},[1608,19290,19291],{"class":3075},"32",[1608,19293,19294],{"class":1959},"));\n",[1608,19296,19297],{"class":1785,"line":2075},[1608,19298,19299],{"class":1945},"// الناتج: \"a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1\"\n",[30,19301,19302,19305],{},[37,19303,19304],{},"متى تستخدم:"," رموز API، معرفات الجلسات، معرفات قاعدة البيانات",[30,19307,19308],{},[37,19309,19310],{},"المزايا:",[49,19312,19313,19316,19319],{},[52,19314,19315],{},"آمنة مشفرة",[52,19317,19318],{},"لا تبعيات خارجية",[52,19320,19321],{},"أداء سريع",[30,19323,19324],{},[37,19325,19326],{},"العيوب:",[49,19328,19329,19332],{},[52,19330,19331],{},"تعمل فقط في Node.js",[52,19333,19334],{},"محدودة بحروف hex (0-9، a-f)",[73,19336,19338],{"id":19337},"_2-سلسلة-base64-آمنة-مشفرة","2. سلسلة Base64 آمنة مشفرة",[30,19340,19341],{},"أكثر إحكاماً من hex، جيد للروابط:",[441,19343,19345],{"className":19159,"code":19344,"language":2885,"meta":16,"style":16},"import crypto from 'crypto';\n\nfunction generateUrlSafeToken(length = 32) {\n  return crypto\n    .randomBytes(length)\n    .toString('base64url')\n    .slice(0, length);\n}\n\nconsole.log(generateUrlSafeToken(32));\n// الناتج: \"K7xP-zQ2mR8vN5tL3wY6jF9cH4dS1aE0\"\n",[448,19346,19347,19359,19363,19380,19386,19398,19411,19427,19431,19435,19454],{"__ignoreMap":16},[1608,19348,19349,19351,19353,19355,19357],{"class":1785,"line":1786},[1608,19350,3013],{"class":2046},[1608,19352,19169],{"class":2058},[1608,19354,6107],{"class":2046},[1608,19356,19174],{"class":2068},[1608,19358,1977],{"class":1959},[1608,19360,19361],{"class":1785,"line":1260},[1608,19362,1805],{"emptyLinePlaceholder":1305},[1608,19364,19365,19367,19370,19372,19374,19376,19378],{"class":1785,"line":17},[1608,19366,2014],{"class":1951},[1608,19368,19369],{"class":2017}," generateUrlSafeToken",[1608,19371,3072],{"class":1959},[1608,19373,19192],{"class":1965},[1608,19375,3066],{"class":1969},[1608,19377,19197],{"class":3075},[1608,19379,4832],{"class":1959},[1608,19381,19382,19384],{"class":1785,"line":1802},[1608,19383,2047],{"class":2046},[1608,19385,19206],{"class":2058},[1608,19387,19388,19390,19392,19394,19396],{"class":1785,"line":1808},[1608,19389,14092],{"class":1959},[1608,19391,19213],{"class":2017},[1608,19393,3072],{"class":1959},[1608,19395,19192],{"class":2058},[1608,19397,2419],{"class":1959},[1608,19399,19400,19402,19404,19406,19409],{"class":1785,"line":1814},[1608,19401,14092],{"class":1959},[1608,19403,19240],{"class":2017},[1608,19405,3072],{"class":1959},[1608,19407,19408],{"class":2068},"'base64url'",[1608,19410,2419],{"class":1959},[1608,19412,19413,19415,19417,19419,19421,19423,19425],{"class":1785,"line":1820},[1608,19414,14092],{"class":1959},[1608,19416,19254],{"class":2017},[1608,19418,3072],{"class":1959},[1608,19420,3076],{"class":3075},[1608,19422,3020],{"class":1959},[1608,19424,19192],{"class":2058},[1608,19426,3079],{"class":1959},[1608,19428,19429],{"class":1785,"line":1825},[1608,19430,2005],{"class":1959},[1608,19432,19433],{"class":1785,"line":1831},[1608,19434,1805],{"emptyLinePlaceholder":1305},[1608,19436,19437,19439,19441,19443,19445,19448,19450,19452],{"class":1785,"line":1333},[1608,19438,19277],{"class":2058},[1608,19440,44],{"class":1959},[1608,19442,3197],{"class":2017},[1608,19444,3072],{"class":1959},[1608,19446,19447],{"class":2017},"generateUrlSafeToken",[1608,19449,3072],{"class":1959},[1608,19451,19291],{"class":3075},[1608,19453,19294],{"class":1959},[1608,19455,19456],{"class":1785,"line":2075},[1608,19457,19458],{"class":1945},"// الناتج: \"K7xP-zQ2mR8vN5tL3wY6jF9cH4dS1aE0\"\n",[30,19460,19461,19463],{},[37,19462,19304],{}," رموز آمنة للروابط، رموز التحقق من البريد الإلكتروني",[30,19465,19466],{},[37,19467,19310],{},[49,19469,19470,19473,19476],{},[52,19471,19472],{},"آمن للروابط (لا يحتاج ترميز خاص)",[52,19474,19475],{},"أكثر إحكاماً من hex",[52,19477,19478],{},"آمن مشفرة",[73,19480,19482],{"id":19481},"_3-مجموعة-أحرف-مخصصة","3. مجموعة أحرف مخصصة",[30,19484,19485],{},"لكلمات المرور أو المتطلبات المحددة:",[441,19487,19489],{"className":19159,"code":19488,"language":2885,"meta":16,"style":16},"import crypto from 'crypto';\n\nfunction generatePassword(\n  length = 16,\n  charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'\n) {\n  const randomBytes = crypto.randomBytes(length);\n  const result = [];\n  \n  for (let i = 0; i \u003C length; i++) {\n    const randomIndex = randomBytes[i] % charset.length;\n    result.push(charset[randomIndex]);\n  }\n  \n  return result.join('');\n}\n\nconsole.log(generatePassword(16));\n// الناتج: \"X7$mK#9pL2@vR5tQ\"\n\n// أبجدي رقمي فقط\nconsole.log(generatePassword(12, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'));\n// الناتج: \"K7xPzQ2mR8vN\"\n",[448,19490,19491,19503,19507,19516,19528,19538,19542,19563,19575,19579,19614,19644,19666,19670,19674,19692,19696,19700,19720,19725,19729,19734,19758],{"__ignoreMap":16},[1608,19492,19493,19495,19497,19499,19501],{"class":1785,"line":1786},[1608,19494,3013],{"class":2046},[1608,19496,19169],{"class":2058},[1608,19498,6107],{"class":2046},[1608,19500,19174],{"class":2068},[1608,19502,1977],{"class":1959},[1608,19504,19505],{"class":1785,"line":1260},[1608,19506,1805],{"emptyLinePlaceholder":1305},[1608,19508,19509,19511,19514],{"class":1785,"line":17},[1608,19510,2014],{"class":1951},[1608,19512,19513],{"class":2017}," generatePassword",[1608,19515,5098],{"class":1959},[1608,19517,19518,19521,19523,19526],{"class":1785,"line":1802},[1608,19519,19520],{"class":1965},"  length",[1608,19522,3066],{"class":1969},[1608,19524,19525],{"class":3075}," 16",[1608,19527,3694],{"class":1959},[1608,19529,19530,19533,19535],{"class":1785,"line":1808},[1608,19531,19532],{"class":1965},"  charset",[1608,19534,3066],{"class":1969},[1608,19536,19537],{"class":2068}," 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'\n",[1608,19539,19540],{"class":1785,"line":1814},[1608,19541,4832],{"class":1959},[1608,19543,19544,19546,19549,19551,19553,19555,19557,19559,19561],{"class":1785,"line":1820},[1608,19545,3516],{"class":1951},[1608,19547,19548],{"class":3062}," randomBytes",[1608,19550,3066],{"class":1969},[1608,19552,19169],{"class":2058},[1608,19554,44],{"class":1959},[1608,19556,19213],{"class":2017},[1608,19558,3072],{"class":1959},[1608,19560,19192],{"class":2058},[1608,19562,3079],{"class":1959},[1608,19564,19565,19567,19570,19572],{"class":1785,"line":1825},[1608,19566,3516],{"class":1951},[1608,19568,19569],{"class":3062}," result",[1608,19571,3066],{"class":1969},[1608,19573,19574],{"class":1959}," [];\n",[1608,19576,19577],{"class":1785,"line":1831},[1608,19578,10139],{"class":1959},[1608,19580,19581,19584,19586,19588,19591,19593,19595,19597,19600,19603,19606,19608,19610,19612],{"class":1785,"line":1333},[1608,19582,19583],{"class":2046},"  for",[1608,19585,4554],{"class":1959},[1608,19587,17868],{"class":1951},[1608,19589,19590],{"class":2058}," i",[1608,19592,3066],{"class":1969},[1608,19594,10220],{"class":3075},[1608,19596,17977],{"class":1959},[1608,19598,19599],{"class":2058},"i",[1608,19601,19602],{"class":1969}," \u003C",[1608,19604,19605],{"class":2058}," length",[1608,19607,17977],{"class":1959},[1608,19609,19599],{"class":2058},[1608,19611,3386],{"class":1969},[1608,19613,4832],{"class":1959},[1608,19615,19616,19618,19621,19623,19625,19627,19629,19632,19635,19638,19640,19642],{"class":1785,"line":2075},[1608,19617,6154],{"class":1951},[1608,19619,19620],{"class":3062}," randomIndex",[1608,19622,3066],{"class":1969},[1608,19624,19548],{"class":2058},[1608,19626,5375],{"class":1959},[1608,19628,19599],{"class":2058},[1608,19630,19631],{"class":1959},"] ",[1608,19633,19634],{"class":1969},"%",[1608,19636,19637],{"class":2058}," charset",[1608,19639,44],{"class":1959},[1608,19641,19192],{"class":9349},[1608,19643,1977],{"class":1959},[1608,19645,19646,19649,19651,19653,19655,19658,19660,19663],{"class":1785,"line":2099},[1608,19647,19648],{"class":2058},"    result",[1608,19650,44],{"class":1959},[1608,19652,5985],{"class":2017},[1608,19654,3072],{"class":1959},[1608,19656,19657],{"class":2058},"charset",[1608,19659,5375],{"class":1959},[1608,19661,19662],{"class":2058},"randomIndex",[1608,19664,19665],{"class":1959},"]);\n",[1608,19667,19668],{"class":1785,"line":2119},[1608,19669,3619],{"class":1959},[1608,19671,19672],{"class":1785,"line":2129},[1608,19673,10139],{"class":1959},[1608,19675,19676,19678,19680,19682,19685,19687,19690],{"class":1785,"line":1635},[1608,19677,2047],{"class":2046},[1608,19679,19569],{"class":2058},[1608,19681,44],{"class":1959},[1608,19683,19684],{"class":2017},"join",[1608,19686,3072],{"class":1959},[1608,19688,19689],{"class":2068},"''",[1608,19691,3079],{"class":1959},[1608,19693,19694],{"class":1785,"line":2296},[1608,19695,2005],{"class":1959},[1608,19697,19698],{"class":1785,"line":2302},[1608,19699,1805],{"emptyLinePlaceholder":1305},[1608,19701,19702,19704,19706,19708,19710,19713,19715,19718],{"class":1785,"line":2308},[1608,19703,19277],{"class":2058},[1608,19705,44],{"class":1959},[1608,19707,3197],{"class":2017},[1608,19709,3072],{"class":1959},[1608,19711,19712],{"class":2017},"generatePassword",[1608,19714,3072],{"class":1959},[1608,19716,19717],{"class":3075},"16",[1608,19719,19294],{"class":1959},[1608,19721,19722],{"class":1785,"line":3279},[1608,19723,19724],{"class":1945},"// الناتج: \"X7$mK#9pL2@vR5tQ\"\n",[1608,19726,19727],{"class":1785,"line":3284},[1608,19728,1805],{"emptyLinePlaceholder":1305},[1608,19730,19731],{"class":1785,"line":3293},[1608,19732,19733],{"class":1945},"// أبجدي رقمي فقط\n",[1608,19735,19736,19738,19740,19742,19744,19746,19748,19751,19753,19756],{"class":1785,"line":3298},[1608,19737,19277],{"class":2058},[1608,19739,44],{"class":1959},[1608,19741,3197],{"class":2017},[1608,19743,3072],{"class":1959},[1608,19745,19712],{"class":2017},[1608,19747,3072],{"class":1959},[1608,19749,19750],{"class":3075},"12",[1608,19752,3020],{"class":1959},[1608,19754,19755],{"class":2068},"'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'",[1608,19757,19294],{"class":1959},[1608,19759,19760],{"class":1785,"line":3308},[1608,19761,19762],{"class":1945},"// الناتج: \"K7xPzQ2mR8vN\"\n",[30,19764,19765,19767],{},[37,19766,19304],{}," توليد كلمات المرور، رموز بتنسيق مخصص",[30,19769,19770],{},[37,19771,19310],{},[49,19773,19774,19777,19780],{},[52,19775,19776],{},"تحكم كامل في مجموعة الأحرف",[52,19778,19779],{},"عشوائية آمنة",[52,19781,19782],{},"مرن لأي حالة استخدام",[73,19784,19786],{"id":19785},"_4-uuid-v4-معرف-فريد-عالمياً","4. UUID v4 (معرف فريد عالمياً)",[30,19788,19789],{},"المتصفحات الحديثة وNode.js تدعم هذا محلياً الآن:",[441,19791,19793],{"className":19159,"code":19792,"language":2885,"meta":16,"style":16},"import crypto from 'crypto';\n\n// طريقة crypto محلية (Node.js 14.17+)\nconst id = crypto.randomUUID();\nconsole.log(id);\n// الناتج: \"9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d\"\n",[448,19794,19795,19807,19811,19816,19833,19847],{"__ignoreMap":16},[1608,19796,19797,19799,19801,19803,19805],{"class":1785,"line":1786},[1608,19798,3013],{"class":2046},[1608,19800,19169],{"class":2058},[1608,19802,6107],{"class":2046},[1608,19804,19174],{"class":2068},[1608,19806,1977],{"class":1959},[1608,19808,19809],{"class":1785,"line":1260},[1608,19810,1805],{"emptyLinePlaceholder":1305},[1608,19812,19813],{"class":1785,"line":17},[1608,19814,19815],{"class":1945},"// طريقة crypto محلية (Node.js 14.17+)\n",[1608,19817,19818,19820,19822,19824,19826,19828,19831],{"class":1785,"line":1802},[1608,19819,3059],{"class":1951},[1608,19821,10118],{"class":3062},[1608,19823,3066],{"class":1969},[1608,19825,19169],{"class":2058},[1608,19827,44],{"class":1959},[1608,19829,19830],{"class":2017},"randomUUID",[1608,19832,13323],{"class":1959},[1608,19834,19835,19837,19839,19841,19843,19845],{"class":1785,"line":1808},[1608,19836,19277],{"class":2058},[1608,19838,44],{"class":1959},[1608,19840,3197],{"class":2017},[1608,19842,3072],{"class":1959},[1608,19844,5363],{"class":2058},[1608,19846,3079],{"class":1959},[1608,19848,19849],{"class":1785,"line":1814},[1608,19850,19851],{"class":1945},"// الناتج: \"9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d\"\n",[30,19853,19854,19856],{},[37,19855,19304],{}," مفاتيح أساسية لقاعدة البيانات، معرفات فريدة",[30,19858,19859],{},[37,19860,19310],{},[49,19862,19863,19866,19869],{},[52,19864,19865],{},"تنسيق قياسي (RFC 4122)",[52,19867,19868],{},"فريد عالمياً",[52,19870,19871],{},"دعم محلي (لا حاجة لحزم)",[30,19873,19874],{},[37,19875,19326],{},[49,19877,19878,19881],{},[52,19879,19880],{},"تنسيق ثابت (36 حرف مع شرطات)",[52,19882,19883],{},"غير قابل للتخصيص",[68,19885,19887],{"id":19886},"طرق-المتصفح-جانب-العميل","طرق المتصفح (جانب العميل)",[73,19889,19891],{"id":19890},"_1-سلسلة-عشوائية-آمنة-مشفرة","1. سلسلة عشوائية آمنة مشفرة",[30,19893,19894],{},"باستخدام Web Crypto API (متوفر في جميع المتصفحات الحديثة):",[441,19896,19898],{"className":19159,"code":19897,"language":2885,"meta":16,"style":16},"function generateSecureToken(length = 32) {\n  const array = new Uint8Array(length / 2);\n  crypto.getRandomValues(array);\n  \n  return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\nconsole.log(generateSecureToken(32));\n// الناتج: \"7a3f9e2d8c1b6a4f7e0d9c2b5a8f3e1c\"\n",[448,19899,19900,19917,19941,19957,19961,20018,20022,20026,20045],{"__ignoreMap":16},[1608,19901,19902,19904,19907,19909,19911,19913,19915],{"class":1785,"line":1786},[1608,19903,2014],{"class":1951},[1608,19905,19906],{"class":2017}," generateSecureToken",[1608,19908,3072],{"class":1959},[1608,19910,19192],{"class":1965},[1608,19912,3066],{"class":1969},[1608,19914,19197],{"class":3075},[1608,19916,4832],{"class":1959},[1608,19918,19919,19921,19924,19926,19928,19931,19933,19935,19937,19939],{"class":1785,"line":1260},[1608,19920,3516],{"class":1951},[1608,19922,19923],{"class":3062}," array",[1608,19925,3066],{"class":1969},[1608,19927,9962],{"class":1951},[1608,19929,19930],{"class":2017}," Uint8Array",[1608,19932,3072],{"class":1959},[1608,19934,19192],{"class":2058},[1608,19936,4744],{"class":1969},[1608,19938,3150],{"class":3075},[1608,19940,3079],{"class":1959},[1608,19942,19943,19946,19948,19951,19953,19955],{"class":1785,"line":17},[1608,19944,19945],{"class":2058},"  crypto",[1608,19947,44],{"class":1959},[1608,19949,19950],{"class":2017},"getRandomValues",[1608,19952,3072],{"class":1959},[1608,19954,12772],{"class":2058},[1608,19956,3079],{"class":1959},[1608,19958,19959],{"class":1785,"line":1802},[1608,19960,10139],{"class":1959},[1608,19962,19963,19965,19967,19969,19971,19973,19975,19977,19980,19982,19985,19987,19989,19991,19993,19995,19998,20000,20002,20004,20007,20010,20012,20014,20016],{"class":1785,"line":1808},[1608,19964,2047],{"class":2046},[1608,19966,14580],{"class":2058},[1608,19968,44],{"class":1959},[1608,19970,3040],{"class":2017},[1608,19972,3072],{"class":1959},[1608,19974,12772],{"class":2058},[1608,19976,3020],{"class":1959},[1608,19978,19979],{"class":1965},"byte",[1608,19981,13519],{"class":1951},[1608,19983,19984],{"class":2058}," byte",[1608,19986,44],{"class":1959},[1608,19988,19240],{"class":2017},[1608,19990,3072],{"class":1959},[1608,19992,19717],{"class":3075},[1608,19994,6390],{"class":1959},[1608,19996,19997],{"class":2017},"padStart",[1608,19999,3072],{"class":1959},[1608,20001,17950],{"class":3075},[1608,20003,3020],{"class":1959},[1608,20005,20006],{"class":2068},"'0'",[1608,20008,20009],{"class":1959},")).",[1608,20011,19684],{"class":2017},[1608,20013,3072],{"class":1959},[1608,20015,19689],{"class":2068},[1608,20017,3079],{"class":1959},[1608,20019,20020],{"class":1785,"line":1814},[1608,20021,2005],{"class":1959},[1608,20023,20024],{"class":1785,"line":1820},[1608,20025,1805],{"emptyLinePlaceholder":1305},[1608,20027,20028,20030,20032,20034,20036,20039,20041,20043],{"class":1785,"line":1825},[1608,20029,19277],{"class":2058},[1608,20031,44],{"class":1959},[1608,20033,3197],{"class":2017},[1608,20035,3072],{"class":1959},[1608,20037,20038],{"class":2017},"generateSecureToken",[1608,20040,3072],{"class":1959},[1608,20042,19291],{"class":3075},[1608,20044,19294],{"class":1959},[1608,20046,20047],{"class":1785,"line":1831},[1608,20048,20049],{"class":1945},"// الناتج: \"7a3f9e2d8c1b6a4f7e0d9c2b5a8f3e1c\"\n",[30,20051,20052,20054],{},[37,20053,19304],{}," رموز جانب العميل، معرفات جلسات مؤقتة",[30,20056,20057],{},[37,20058,19310],{},[49,20060,20061,20064,20066],{},[52,20062,20063],{},"تعمل في جميع المتصفحات الحديثة",[52,20065,19315],{},[52,20067,20068],{},"لا تبعيات",[73,20070,20072],{"id":20071},"_2-مجموعة-أحرف-مخصصة-المتصفح","2. مجموعة أحرف مخصصة (المتصفح)",[441,20074,20076],{"className":19159,"code":20075,"language":2885,"meta":16,"style":16},"function generateRandomString(length, charset) {\n  const array = new Uint8Array(length);\n  crypto.getRandomValues(array);\n  \n  return Array.from(array, byte => charset[byte % charset.length]).join('');\n}\n\n// الاستخدام\nconst alphanumeric = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\nconsole.log(generateRandomString(16, alphanumeric));\n// الناتج: \"K7xPzQ2mR8vNtL3w\"\n",[448,20077,20078,20095,20113,20127,20131,20177,20181,20185,20190,20204,20228],{"__ignoreMap":16},[1608,20079,20080,20082,20085,20087,20089,20091,20093],{"class":1785,"line":1786},[1608,20081,2014],{"class":1951},[1608,20083,20084],{"class":2017}," generateRandomString",[1608,20086,3072],{"class":1959},[1608,20088,19192],{"class":1965},[1608,20090,3020],{"class":1959},[1608,20092,19657],{"class":1965},[1608,20094,4832],{"class":1959},[1608,20096,20097,20099,20101,20103,20105,20107,20109,20111],{"class":1785,"line":1260},[1608,20098,3516],{"class":1951},[1608,20100,19923],{"class":3062},[1608,20102,3066],{"class":1969},[1608,20104,9962],{"class":1951},[1608,20106,19930],{"class":2017},[1608,20108,3072],{"class":1959},[1608,20110,19192],{"class":2058},[1608,20112,3079],{"class":1959},[1608,20114,20115,20117,20119,20121,20123,20125],{"class":1785,"line":17},[1608,20116,19945],{"class":2058},[1608,20118,44],{"class":1959},[1608,20120,19950],{"class":2017},[1608,20122,3072],{"class":1959},[1608,20124,12772],{"class":2058},[1608,20126,3079],{"class":1959},[1608,20128,20129],{"class":1785,"line":1802},[1608,20130,10139],{"class":1959},[1608,20132,20133,20135,20137,20139,20141,20143,20145,20147,20149,20151,20153,20155,20157,20160,20162,20164,20166,20169,20171,20173,20175],{"class":1785,"line":1808},[1608,20134,2047],{"class":2046},[1608,20136,14580],{"class":2058},[1608,20138,44],{"class":1959},[1608,20140,3040],{"class":2017},[1608,20142,3072],{"class":1959},[1608,20144,12772],{"class":2058},[1608,20146,3020],{"class":1959},[1608,20148,19979],{"class":1965},[1608,20150,13519],{"class":1951},[1608,20152,19637],{"class":2058},[1608,20154,5375],{"class":1959},[1608,20156,19979],{"class":2058},[1608,20158,20159],{"class":1969}," %",[1608,20161,19637],{"class":2058},[1608,20163,44],{"class":1959},[1608,20165,19192],{"class":9349},[1608,20167,20168],{"class":1959},"]).",[1608,20170,19684],{"class":2017},[1608,20172,3072],{"class":1959},[1608,20174,19689],{"class":2068},[1608,20176,3079],{"class":1959},[1608,20178,20179],{"class":1785,"line":1814},[1608,20180,2005],{"class":1959},[1608,20182,20183],{"class":1785,"line":1820},[1608,20184,1805],{"emptyLinePlaceholder":1305},[1608,20186,20187],{"class":1785,"line":1825},[1608,20188,20189],{"class":1945},"// الاستخدام\n",[1608,20191,20192,20194,20197,20199,20202],{"class":1785,"line":1831},[1608,20193,3059],{"class":1951},[1608,20195,20196],{"class":3062}," alphanumeric",[1608,20198,3066],{"class":1969},[1608,20200,20201],{"class":2068}," 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'",[1608,20203,1977],{"class":1959},[1608,20205,20206,20208,20210,20212,20214,20217,20219,20221,20223,20226],{"class":1785,"line":1333},[1608,20207,19277],{"class":2058},[1608,20209,44],{"class":1959},[1608,20211,3197],{"class":2017},[1608,20213,3072],{"class":1959},[1608,20215,20216],{"class":2017},"generateRandomString",[1608,20218,3072],{"class":1959},[1608,20220,19717],{"class":3075},[1608,20222,3020],{"class":1959},[1608,20224,20225],{"class":2058},"alphanumeric",[1608,20227,19294],{"class":1959},[1608,20229,20230],{"class":1785,"line":2075},[1608,20231,20232],{"class":1945},"// الناتج: \"K7xPzQ2mR8vNtL3w\"\n",[73,20234,20236],{"id":20235},"_3-uuid-في-المتصفح","3. UUID في المتصفح",[441,20238,20240],{"className":19159,"code":20239,"language":2885,"meta":16,"style":16},"// طريقة محلية (Chrome 92+، Firefox 95+، Safari 15.4+)\nconst id = crypto.randomUUID();\nconsole.log(id);\n// الناتج: \"9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d\"\n\n// Polyfill للمتصفحات القديمة\nfunction generateUUID() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n    const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) | (c === 'x' ? 0 : 0x08);\n    return r.toString(16);\n  });\n}\n",[448,20241,20242,20247,20263,20277,20281,20285,20290,20299,20341,20407,20423,20427],{"__ignoreMap":16},[1608,20243,20244],{"class":1785,"line":1786},[1608,20245,20246],{"class":1945},"// طريقة محلية (Chrome 92+، Firefox 95+، Safari 15.4+)\n",[1608,20248,20249,20251,20253,20255,20257,20259,20261],{"class":1785,"line":1260},[1608,20250,3059],{"class":1951},[1608,20252,10118],{"class":3062},[1608,20254,3066],{"class":1969},[1608,20256,19169],{"class":2058},[1608,20258,44],{"class":1959},[1608,20260,19830],{"class":2017},[1608,20262,13323],{"class":1959},[1608,20264,20265,20267,20269,20271,20273,20275],{"class":1785,"line":17},[1608,20266,19277],{"class":2058},[1608,20268,44],{"class":1959},[1608,20270,3197],{"class":2017},[1608,20272,3072],{"class":1959},[1608,20274,5363],{"class":2058},[1608,20276,3079],{"class":1959},[1608,20278,20279],{"class":1785,"line":1802},[1608,20280,19851],{"class":1945},[1608,20282,20283],{"class":1785,"line":1808},[1608,20284,1805],{"emptyLinePlaceholder":1305},[1608,20286,20287],{"class":1785,"line":1814},[1608,20288,20289],{"class":1945},"// Polyfill للمتصفحات القديمة\n",[1608,20291,20292,20294,20297],{"class":1785,"line":1820},[1608,20293,2014],{"class":1951},[1608,20295,20296],{"class":2017}," generateUUID",[1608,20298,3602],{"class":1959},[1608,20300,20301,20303,20306,20308,20311,20313,20317,20319,20323,20325,20327,20330,20332,20335,20337,20339],{"class":1785,"line":1825},[1608,20302,2047],{"class":2046},[1608,20304,20305],{"class":2068}," 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'",[1608,20307,44],{"class":1959},[1608,20309,20310],{"class":2017},"replace",[1608,20312,3072],{"class":1959},[1608,20314,20316],{"class":20315},"s4XyT","/",[1608,20318,5375],{"class":9355},[1608,20320,20322],{"class":20321},"suOk-","xy",[1608,20324,5393],{"class":9355},[1608,20326,20316],{"class":20315},[1608,20328,20329],{"class":1951},"g",[1608,20331,3172],{"class":1959},[1608,20333,20334],{"class":1965},"c",[1608,20336,3183],{"class":1959},[1608,20338,3137],{"class":1951},[1608,20340,1960],{"class":1959},[1608,20342,20343,20345,20348,20350,20352,20355,20357,20359,20361,20364,20366,20368,20370,20373,20375,20377,20379,20382,20384,20387,20389,20391,20393,20396,20398,20400,20402,20405],{"class":1785,"line":1831},[1608,20344,6154],{"class":1951},[1608,20346,20347],{"class":3062}," r",[1608,20349,3066],{"class":1969},[1608,20351,4554],{"class":1959},[1608,20353,20354],{"class":2058},"crypto",[1608,20356,44],{"class":1959},[1608,20358,19950],{"class":2017},[1608,20360,3072],{"class":1959},[1608,20362,20363],{"class":1951},"new",[1608,20365,19930],{"class":2017},[1608,20367,3072],{"class":1959},[1608,20369,6398],{"class":3075},[1608,20371,20372],{"class":1959},"))[",[1608,20374,3076],{"class":3075},[1608,20376,19631],{"class":1959},[1608,20378,12893],{"class":1969},[1608,20380,20381],{"class":3075}," 0x0f",[1608,20383,3183],{"class":1959},[1608,20385,20386],{"class":1969},"|",[1608,20388,4554],{"class":1959},[1608,20390,20334],{"class":2058},[1608,20392,15746],{"class":1969},[1608,20394,20395],{"class":2068}," 'x'",[1608,20397,6959],{"class":1969},[1608,20399,10220],{"class":3075},[1608,20401,4716],{"class":1969},[1608,20403,20404],{"class":3075}," 0x08",[1608,20406,3079],{"class":1959},[1608,20408,20409,20411,20413,20415,20417,20419,20421],{"class":1785,"line":1333},[1608,20410,11684],{"class":2046},[1608,20412,20347],{"class":2058},[1608,20414,44],{"class":1959},[1608,20416,19240],{"class":2017},[1608,20418,3072],{"class":1959},[1608,20420,19717],{"class":3075},[1608,20422,3079],{"class":1959},[1608,20424,20425],{"class":1785,"line":2075},[1608,20426,14174],{"class":1959},[1608,20428,20429],{"class":1785,"line":2099},[1608,20430,2005],{"class":1959},[73,20432,20434],{"id":20433},"_4-معرفات-سريعة-غير-آمنة-عناصر-dom-مفاتيح-react","4. معرفات سريعة غير آمنة (عناصر DOM، مفاتيح React)",[30,20436,20437],{},"عندما لا يهم الأمان:",[441,20439,20441],{"className":19159,"code":20440,"language":2885,"meta":16,"style":16},"// بسيط وسريع\nfunction generateId() {\n  return Date.now().toString(36) + Math.random().toString(36).substring(2);\n}\n\nconsole.log(generateId());\n// الناتج: \"ld3x7q9m5k2p8\"\n\n// أبسط لمفاتيح React\nconst key = `item-${Date.now()}-${Math.random()}`;\n",[448,20442,20443,20448,20457,20508,20512,20516,20532,20537,20541,20546],{"__ignoreMap":16},[1608,20444,20445],{"class":1785,"line":1786},[1608,20446,20447],{"class":1945},"// بسيط وسريع\n",[1608,20449,20450,20452,20455],{"class":1785,"line":1260},[1608,20451,2014],{"class":1951},[1608,20453,20454],{"class":2017}," generateId",[1608,20456,3602],{"class":1959},[1608,20458,20459,20461,20463,20465,20468,20470,20472,20474,20477,20479,20481,20484,20486,20489,20491,20493,20495,20497,20499,20502,20504,20506],{"class":1785,"line":17},[1608,20460,2047],{"class":2046},[1608,20462,9965],{"class":2058},[1608,20464,44],{"class":1959},[1608,20466,20467],{"class":2017},"now",[1608,20469,9968],{"class":1959},[1608,20471,19240],{"class":2017},[1608,20473,3072],{"class":1959},[1608,20475,20476],{"class":3075},"36",[1608,20478,3183],{"class":1959},[1608,20480,3908],{"class":1969},[1608,20482,20483],{"class":2058}," Math",[1608,20485,44],{"class":1959},[1608,20487,20488],{"class":2017},"random",[1608,20490,9968],{"class":1959},[1608,20492,19240],{"class":2017},[1608,20494,3072],{"class":1959},[1608,20496,20476],{"class":3075},[1608,20498,6390],{"class":1959},[1608,20500,20501],{"class":2017},"substring",[1608,20503,3072],{"class":1959},[1608,20505,17950],{"class":3075},[1608,20507,3079],{"class":1959},[1608,20509,20510],{"class":1785,"line":1802},[1608,20511,2005],{"class":1959},[1608,20513,20514],{"class":1785,"line":1808},[1608,20515,1805],{"emptyLinePlaceholder":1305},[1608,20517,20518,20520,20522,20524,20526,20529],{"class":1785,"line":1814},[1608,20519,19277],{"class":2058},[1608,20521,44],{"class":1959},[1608,20523,3197],{"class":2017},[1608,20525,3072],{"class":1959},[1608,20527,20528],{"class":2017},"generateId",[1608,20530,20531],{"class":1959},"());\n",[1608,20533,20534],{"class":1785,"line":1820},[1608,20535,20536],{"class":1945},"// الناتج: \"ld3x7q9m5k2p8\"\n",[1608,20538,20539],{"class":1785,"line":1825},[1608,20540,1805],{"emptyLinePlaceholder":1305},[1608,20542,20543],{"class":1785,"line":1831},[1608,20544,20545],{"class":1945},"// أبسط لمفاتيح React\n",[1608,20547,20548,20550,20553,20555,20558,20560,20563,20565,20567,20570,20572,20574,20576,20578,20580,20582,20584,20586,20588],{"class":1785,"line":1333},[1608,20549,3059],{"class":1951},[1608,20551,20552],{"class":3062}," key",[1608,20554,3066],{"class":1969},[1608,20556,20557],{"class":2068}," `item-",[1608,20559,3206],{"class":3205},[1608,20561,20562],{"class":2058},"Date",[1608,20564,44],{"class":3268},[1608,20566,20467],{"class":2017},[1608,20568,20569],{"class":3268},"()",[1608,20571,2089],{"class":3205},[1608,20573,3942],{"class":2068},[1608,20575,3206],{"class":3205},[1608,20577,19218],{"class":2058},[1608,20579,44],{"class":3268},[1608,20581,20488],{"class":2017},[1608,20583,20569],{"class":3268},[1608,20585,2089],{"class":3205},[1608,20587,3222],{"class":2068},[1608,20589,1977],{"class":1959},[30,20591,20592,20595,20596,20598],{},[37,20593,20594],{},"⚠️ تحذير:"," لا تستخدم أبداً ",[448,20597,19114],{}," للتطبيقات الحساسة أمنياً!",[68,20600,20602],{"id":20601},"طرق-عالمية-تعمل-في-كل-مكان","طرق عالمية (تعمل في كل مكان)",[73,20604,20606],{"id":20605},"استخدام-nano-id-موصى-به-لمعظم-الحالات","استخدام Nano ID (موصى به لمعظم الحالات)",[441,20608,20610],{"className":8465,"code":20609,"language":8467,"meta":16,"style":16},"npm install nanoid\n",[448,20611,20612],{"__ignoreMap":16},[1608,20613,20614,20616,20618],{"class":1785,"line":1786},[1608,20615,8535],{"class":2017},[1608,20617,10548],{"class":2068},[1608,20619,20620],{"class":2068}," nanoid\n",[441,20622,20624],{"className":19159,"code":20623,"language":2885,"meta":16,"style":16},"import { nanoid } from 'nanoid';\n\n// افتراضي: 21 حرف، آمن للروابط\nconsole.log(nanoid());\n// الناتج: \"V1StGXR8_Z5jdHi6B-myT\"\n\n// طول مخصص\nconsole.log(nanoid(10));\n// الناتج: \"IRFa-VaY2b\"\n\n// أبجدية مخصصة\nimport { customAlphabet } from 'nanoid';\nconst nanoid = customAlphabet('0123456789abcdef', 16);\nconsole.log(nanoid());\n// الناتج: \"4f90d13a42\"\n",[448,20625,20626,20643,20647,20652,20666,20671,20675,20680,20698,20703,20707,20712,20729,20752,20766],{"__ignoreMap":16},[1608,20627,20628,20630,20632,20634,20636,20638,20641],{"class":1785,"line":1786},[1608,20629,3013],{"class":2046},[1608,20631,2032],{"class":1959},[1608,20633,19133],{"class":2058},[1608,20635,3037],{"class":1959},[1608,20637,3040],{"class":2046},[1608,20639,20640],{"class":2068}," 'nanoid'",[1608,20642,1977],{"class":1959},[1608,20644,20645],{"class":1785,"line":1260},[1608,20646,1805],{"emptyLinePlaceholder":1305},[1608,20648,20649],{"class":1785,"line":17},[1608,20650,20651],{"class":1945},"// افتراضي: 21 حرف، آمن للروابط\n",[1608,20653,20654,20656,20658,20660,20662,20664],{"class":1785,"line":1802},[1608,20655,19277],{"class":2058},[1608,20657,44],{"class":1959},[1608,20659,3197],{"class":2017},[1608,20661,3072],{"class":1959},[1608,20663,19133],{"class":2017},[1608,20665,20531],{"class":1959},[1608,20667,20668],{"class":1785,"line":1808},[1608,20669,20670],{"class":1945},"// الناتج: \"V1StGXR8_Z5jdHi6B-myT\"\n",[1608,20672,20673],{"class":1785,"line":1814},[1608,20674,1805],{"emptyLinePlaceholder":1305},[1608,20676,20677],{"class":1785,"line":1820},[1608,20678,20679],{"class":1945},"// طول مخصص\n",[1608,20681,20682,20684,20686,20688,20690,20692,20694,20696],{"class":1785,"line":1825},[1608,20683,19277],{"class":2058},[1608,20685,44],{"class":1959},[1608,20687,3197],{"class":2017},[1608,20689,3072],{"class":1959},[1608,20691,19133],{"class":2017},[1608,20693,3072],{"class":1959},[1608,20695,10402],{"class":3075},[1608,20697,19294],{"class":1959},[1608,20699,20700],{"class":1785,"line":1831},[1608,20701,20702],{"class":1945},"// الناتج: \"IRFa-VaY2b\"\n",[1608,20704,20705],{"class":1785,"line":1333},[1608,20706,1805],{"emptyLinePlaceholder":1305},[1608,20708,20709],{"class":1785,"line":2075},[1608,20710,20711],{"class":1945},"// أبجدية مخصصة\n",[1608,20713,20714,20716,20718,20721,20723,20725,20727],{"class":1785,"line":2099},[1608,20715,3013],{"class":2046},[1608,20717,2032],{"class":1959},[1608,20719,20720],{"class":2058},"customAlphabet",[1608,20722,3037],{"class":1959},[1608,20724,3040],{"class":2046},[1608,20726,20640],{"class":2068},[1608,20728,1977],{"class":1959},[1608,20730,20731,20733,20736,20738,20741,20743,20746,20748,20750],{"class":1785,"line":2119},[1608,20732,3059],{"class":1951},[1608,20734,20735],{"class":3062}," nanoid",[1608,20737,3066],{"class":1969},[1608,20739,20740],{"class":2017}," customAlphabet",[1608,20742,3072],{"class":1959},[1608,20744,20745],{"class":2068},"'0123456789abcdef'",[1608,20747,3020],{"class":1959},[1608,20749,19717],{"class":3075},[1608,20751,3079],{"class":1959},[1608,20753,20754,20756,20758,20760,20762,20764],{"class":1785,"line":2129},[1608,20755,19277],{"class":2058},[1608,20757,44],{"class":1959},[1608,20759,3197],{"class":2017},[1608,20761,3072],{"class":1959},[1608,20763,19133],{"class":2017},[1608,20765,20531],{"class":1959},[1608,20767,20768],{"class":1785,"line":1635},[1608,20769,20770],{"class":1945},"// الناتج: \"4f90d13a42\"\n",[30,20772,20773],{},[37,20774,20775],{},"لماذا Nano ID رائع:",[49,20777,20778,20781,20784,20787,20790,20793],{},[52,20779,20780],{},"✅ أصغر 60% من UUID",[52,20782,20783],{},"✅ أسرع 2x من UUID",[52,20785,20786],{},"✅ يعمل في المتصفح وNode.js",[52,20788,20789],{},"✅ آمن للروابط افتراضياً",[52,20791,20792],{},"✅ آمن مشفرة",[52,20794,20795],{},"✅ قابل للتخصيص",[68,20797,20799],{"id":20798},"أمثلة-واقعية","أمثلة واقعية",[73,20801,20803],{"id":20802},"مولد-كلمات-المرور","مولد كلمات المرور",[441,20805,20807],{"className":19159,"code":20806,"language":2885,"meta":16,"style":16},"import crypto from 'crypto';\n\nclass PasswordGenerator {\n  static generate(options = {}) {\n    const {\n      length = 16,\n      numbers = true,\n      symbols = true,\n      lowercase = true,\n      uppercase = true,\n      excludeSimilar = true // استثناء i, l, 1, L, o, 0, O\n    } = options;\n\n    let charset = '';\n    if (lowercase) charset += 'abcdefghijkmnpqrstuvwxyz';\n    if (uppercase) charset += 'ABCDEFGHJKLMNPQRSTUVWXYZ';\n    if (numbers) charset += excludeSimilar ? '23456789' : '0123456789';\n    if (symbols) charset += '!@#$%^&*()-_=+[]{}|;:,.\u003C>?';\n\n    if (charset.length === 0) {\n      throw new Error('يجب تحديد نوع حرف واحد على الأقل');\n    }\n\n    const password = [];\n    const randomBytes = crypto.randomBytes(length);\n\n    for (let i = 0; i \u003C length; i++) {\n      password.push(charset[randomBytes[i] % charset.length]);\n    }\n\n    return password.join('');\n  }\n}\n\n// الاستخدام\nconsole.log(PasswordGenerator.generate({ length: 20, symbols: true }));\n// الناتج: \"K7$mP#9L2@vR5tQ$X3nF\"\n",[448,20808,20809,20821,20825,20834,20851,20857,20868,20879,20890,20901,20912,20924,20935,20939,20953,20975,20995,21025,21045,21049,21067,21083,21087,21091,21102,21122,21126,21157,21190,21194,21198,21214,21218,21222,21226,21230,21266],{"__ignoreMap":16},[1608,20810,20811,20813,20815,20817,20819],{"class":1785,"line":1786},[1608,20812,3013],{"class":2046},[1608,20814,19169],{"class":2058},[1608,20816,6107],{"class":2046},[1608,20818,19174],{"class":2068},[1608,20820,1977],{"class":1959},[1608,20822,20823],{"class":1785,"line":1260},[1608,20824,1805],{"emptyLinePlaceholder":1305},[1608,20826,20827,20829,20832],{"class":1785,"line":17},[1608,20828,4361],{"class":1951},[1608,20830,20831],{"class":1955}," PasswordGenerator",[1608,20833,1960],{"class":1959},[1608,20835,20836,20839,20841,20843,20846,20848],{"class":1785,"line":1802},[1608,20837,20838],{"class":1951},"  static",[1608,20840,10933],{"class":2017},[1608,20842,3072],{"class":1959},[1608,20844,20845],{"class":1965},"options",[1608,20847,3066],{"class":1969},[1608,20849,20850],{"class":1959}," {}) {\n",[1608,20852,20853,20855],{"class":1785,"line":1808},[1608,20854,6154],{"class":1951},[1608,20856,1960],{"class":1959},[1608,20858,20859,20862,20864,20866],{"class":1785,"line":1814},[1608,20860,20861],{"class":3062},"      length",[1608,20863,3066],{"class":1969},[1608,20865,19525],{"class":3075},[1608,20867,3694],{"class":1959},[1608,20869,20870,20873,20875,20877],{"class":1785,"line":1820},[1608,20871,20872],{"class":3062},"      numbers",[1608,20874,3066],{"class":1969},[1608,20876,5032],{"class":5031},[1608,20878,3694],{"class":1959},[1608,20880,20881,20884,20886,20888],{"class":1785,"line":1825},[1608,20882,20883],{"class":3062},"      symbols",[1608,20885,3066],{"class":1969},[1608,20887,5032],{"class":5031},[1608,20889,3694],{"class":1959},[1608,20891,20892,20895,20897,20899],{"class":1785,"line":1831},[1608,20893,20894],{"class":3062},"      lowercase",[1608,20896,3066],{"class":1969},[1608,20898,5032],{"class":5031},[1608,20900,3694],{"class":1959},[1608,20902,20903,20906,20908,20910],{"class":1785,"line":1333},[1608,20904,20905],{"class":3062},"      uppercase",[1608,20907,3066],{"class":1969},[1608,20909,5032],{"class":5031},[1608,20911,3694],{"class":1959},[1608,20913,20914,20917,20919,20921],{"class":1785,"line":2075},[1608,20915,20916],{"class":3062},"      excludeSimilar",[1608,20918,3066],{"class":1969},[1608,20920,5032],{"class":5031},[1608,20922,20923],{"class":1945}," // استثناء i, l, 1, L, o, 0, O\n",[1608,20925,20926,20928,20930,20933],{"class":1785,"line":2099},[1608,20927,4934],{"class":1959},[1608,20929,2065],{"class":1969},[1608,20931,20932],{"class":2058}," options",[1608,20934,1977],{"class":1959},[1608,20936,20937],{"class":1785,"line":2119},[1608,20938,1805],{"emptyLinePlaceholder":1305},[1608,20940,20941,20944,20946,20948,20951],{"class":1785,"line":2129},[1608,20942,20943],{"class":1951},"    let",[1608,20945,19637],{"class":2058},[1608,20947,3066],{"class":1969},[1608,20949,20950],{"class":2068}," ''",[1608,20952,1977],{"class":1959},[1608,20954,20955,20958,20960,20963,20965,20967,20970,20973],{"class":1785,"line":1635},[1608,20956,20957],{"class":2046},"    if",[1608,20959,4554],{"class":1959},[1608,20961,20962],{"class":2058},"lowercase",[1608,20964,3183],{"class":1959},[1608,20966,19657],{"class":2058},[1608,20968,20969],{"class":1969}," +=",[1608,20971,20972],{"class":2068}," 'abcdefghijkmnpqrstuvwxyz'",[1608,20974,1977],{"class":1959},[1608,20976,20977,20979,20981,20984,20986,20988,20990,20993],{"class":1785,"line":2296},[1608,20978,20957],{"class":2046},[1608,20980,4554],{"class":1959},[1608,20982,20983],{"class":2058},"uppercase",[1608,20985,3183],{"class":1959},[1608,20987,19657],{"class":2058},[1608,20989,20969],{"class":1969},[1608,20991,20992],{"class":2068}," 'ABCDEFGHJKLMNPQRSTUVWXYZ'",[1608,20994,1977],{"class":1959},[1608,20996,20997,20999,21001,21004,21006,21008,21010,21013,21015,21018,21020,21023],{"class":1785,"line":2302},[1608,20998,20957],{"class":2046},[1608,21000,4554],{"class":1959},[1608,21002,21003],{"class":2058},"numbers",[1608,21005,3183],{"class":1959},[1608,21007,19657],{"class":2058},[1608,21009,20969],{"class":1969},[1608,21011,21012],{"class":2058}," excludeSimilar",[1608,21014,6959],{"class":1969},[1608,21016,21017],{"class":2068}," '23456789'",[1608,21019,4716],{"class":1969},[1608,21021,21022],{"class":2068}," '0123456789'",[1608,21024,1977],{"class":1959},[1608,21026,21027,21029,21031,21034,21036,21038,21040,21043],{"class":1785,"line":2308},[1608,21028,20957],{"class":2046},[1608,21030,4554],{"class":1959},[1608,21032,21033],{"class":2058},"symbols",[1608,21035,3183],{"class":1959},[1608,21037,19657],{"class":2058},[1608,21039,20969],{"class":1969},[1608,21041,21042],{"class":2068}," '!@#$%^&*()-_=+[]{}|;:,.\u003C>?'",[1608,21044,1977],{"class":1959},[1608,21046,21047],{"class":1785,"line":3279},[1608,21048,1805],{"emptyLinePlaceholder":1305},[1608,21050,21051,21053,21055,21057,21059,21061,21063,21065],{"class":1785,"line":3284},[1608,21052,20957],{"class":2046},[1608,21054,4554],{"class":1959},[1608,21056,19657],{"class":2058},[1608,21058,44],{"class":1959},[1608,21060,19192],{"class":9349},[1608,21062,15746],{"class":1969},[1608,21064,10220],{"class":3075},[1608,21066,4832],{"class":1959},[1608,21068,21069,21072,21074,21076,21078,21081],{"class":1785,"line":3293},[1608,21070,21071],{"class":2046},"      throw",[1608,21073,9962],{"class":1951},[1608,21075,6533],{"class":2017},[1608,21077,3072],{"class":1959},[1608,21079,21080],{"class":2068},"'يجب تحديد نوع حرف واحد على الأقل'",[1608,21082,3079],{"class":1959},[1608,21084,21085],{"class":1785,"line":3298},[1608,21086,2305],{"class":1959},[1608,21088,21089],{"class":1785,"line":3308},[1608,21090,1805],{"emptyLinePlaceholder":1305},[1608,21092,21093,21095,21098,21100],{"class":1785,"line":3318},[1608,21094,6154],{"class":1951},[1608,21096,21097],{"class":3062}," password",[1608,21099,3066],{"class":1969},[1608,21101,19574],{"class":1959},[1608,21103,21104,21106,21108,21110,21112,21114,21116,21118,21120],{"class":1785,"line":3342},[1608,21105,6154],{"class":1951},[1608,21107,19548],{"class":3062},[1608,21109,3066],{"class":1969},[1608,21111,19169],{"class":2058},[1608,21113,44],{"class":1959},[1608,21115,19213],{"class":2017},[1608,21117,3072],{"class":1959},[1608,21119,19192],{"class":2058},[1608,21121,3079],{"class":1959},[1608,21123,21124],{"class":1785,"line":3365},[1608,21125,1805],{"emptyLinePlaceholder":1305},[1608,21127,21128,21131,21133,21135,21137,21139,21141,21143,21145,21147,21149,21151,21153,21155],{"class":1785,"line":3402},[1608,21129,21130],{"class":2046},"    for",[1608,21132,4554],{"class":1959},[1608,21134,17868],{"class":1951},[1608,21136,19590],{"class":2058},[1608,21138,3066],{"class":1969},[1608,21140,10220],{"class":3075},[1608,21142,17977],{"class":1959},[1608,21144,19599],{"class":2058},[1608,21146,19602],{"class":1969},[1608,21148,19605],{"class":2058},[1608,21150,17977],{"class":1959},[1608,21152,19599],{"class":2058},[1608,21154,3386],{"class":1969},[1608,21156,4832],{"class":1959},[1608,21158,21159,21162,21164,21166,21168,21170,21172,21174,21176,21178,21180,21182,21184,21186,21188],{"class":1785,"line":3412},[1608,21160,21161],{"class":2058},"      password",[1608,21163,44],{"class":1959},[1608,21165,5985],{"class":2017},[1608,21167,3072],{"class":1959},[1608,21169,19657],{"class":2058},[1608,21171,5375],{"class":1959},[1608,21173,19213],{"class":2058},[1608,21175,5375],{"class":1959},[1608,21177,19599],{"class":2058},[1608,21179,19631],{"class":1959},[1608,21181,19634],{"class":1969},[1608,21183,19637],{"class":2058},[1608,21185,44],{"class":1959},[1608,21187,19192],{"class":9349},[1608,21189,19665],{"class":1959},[1608,21191,21192],{"class":1785,"line":3704},[1608,21193,2305],{"class":1959},[1608,21195,21196],{"class":1785,"line":3712},[1608,21197,1805],{"emptyLinePlaceholder":1305},[1608,21199,21200,21202,21204,21206,21208,21210,21212],{"class":1785,"line":3720},[1608,21201,11684],{"class":2046},[1608,21203,21097],{"class":2058},[1608,21205,44],{"class":1959},[1608,21207,19684],{"class":2017},[1608,21209,3072],{"class":1959},[1608,21211,19689],{"class":2068},[1608,21213,3079],{"class":1959},[1608,21215,21216],{"class":1785,"line":3728},[1608,21217,3619],{"class":1959},[1608,21219,21220],{"class":1785,"line":3734},[1608,21221,2005],{"class":1959},[1608,21223,21224],{"class":1785,"line":3739},[1608,21225,1805],{"emptyLinePlaceholder":1305},[1608,21227,21228],{"class":1785,"line":4422},[1608,21229,20189],{"class":1945},[1608,21231,21232,21234,21236,21238,21240,21243,21245,21248,21250,21253,21256,21258,21261,21263],{"class":1785,"line":4431},[1608,21233,19277],{"class":2058},[1608,21235,44],{"class":1959},[1608,21237,3197],{"class":2017},[1608,21239,3072],{"class":1959},[1608,21241,21242],{"class":2058},"PasswordGenerator",[1608,21244,44],{"class":1959},[1608,21246,21247],{"class":2017},"generate",[1608,21249,2021],{"class":1959},[1608,21251,21252],{"class":2058},"length:",[1608,21254,21255],{"class":3075}," 20",[1608,21257,3020],{"class":1959},[1608,21259,21260],{"class":2058},"symbols:",[1608,21262,5032],{"class":5031},[1608,21264,21265],{"class":1959}," }));\n",[1608,21267,21268],{"class":1785,"line":4440},[1608,21269,21270],{"class":1945},"// الناتج: \"K7$mP#9L2@vR5tQ$X3nF\"\n",[73,21272,21274],{"id":21273},"مولد-رموز-api","مولد رموز API",[441,21276,21278],{"className":19159,"code":21277,"language":2885,"meta":16,"style":16},"import crypto from 'crypto';\n\nclass TokenGenerator {\n  static generateApiKey(prefix = 'sk') {\n    const token = crypto.randomBytes(32).toString('base64url');\n    return `${prefix}_${token}`;\n  }\n\n  static generateSessionId() {\n    return crypto.randomBytes(32).toString('hex');\n  }\n\n  static generateResetToken() {\n    // قصير الأمد، تنتهي صلاحيته بعد الاستخدام\n    return crypto.randomBytes(32).toString('hex');\n  }\n}\n\n// الاستخدام\nconsole.log(TokenGenerator.generateApiKey('pk'));\n// الناتج: \"pk_K7xP-zQ2mR8vN5tL3wY6jF9cH4dS1aE0K7xPzQ2m\"\n\nconsole.log(TokenGenerator.generateSessionId());\n// الناتج: \"a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1\"\n",[448,21279,21280,21292,21296,21305,21324,21353,21379,21383,21387,21396,21420,21424,21428,21437,21442,21466,21470,21474,21478,21482,21507,21512,21516,21535],{"__ignoreMap":16},[1608,21281,21282,21284,21286,21288,21290],{"class":1785,"line":1786},[1608,21283,3013],{"class":2046},[1608,21285,19169],{"class":2058},[1608,21287,6107],{"class":2046},[1608,21289,19174],{"class":2068},[1608,21291,1977],{"class":1959},[1608,21293,21294],{"class":1785,"line":1260},[1608,21295,1805],{"emptyLinePlaceholder":1305},[1608,21297,21298,21300,21303],{"class":1785,"line":17},[1608,21299,4361],{"class":1951},[1608,21301,21302],{"class":1955}," TokenGenerator",[1608,21304,1960],{"class":1959},[1608,21306,21307,21309,21312,21314,21317,21319,21322],{"class":1785,"line":1802},[1608,21308,20838],{"class":1951},[1608,21310,21311],{"class":2017}," generateApiKey",[1608,21313,3072],{"class":1959},[1608,21315,21316],{"class":1965},"prefix",[1608,21318,3066],{"class":1969},[1608,21320,21321],{"class":2068}," 'sk'",[1608,21323,4832],{"class":1959},[1608,21325,21326,21328,21331,21333,21335,21337,21339,21341,21343,21345,21347,21349,21351],{"class":1785,"line":1808},[1608,21327,6154],{"class":1951},[1608,21329,21330],{"class":3062}," token",[1608,21332,3066],{"class":1969},[1608,21334,19169],{"class":2058},[1608,21336,44],{"class":1959},[1608,21338,19213],{"class":2017},[1608,21340,3072],{"class":1959},[1608,21342,19291],{"class":3075},[1608,21344,6390],{"class":1959},[1608,21346,19240],{"class":2017},[1608,21348,3072],{"class":1959},[1608,21350,19408],{"class":2068},[1608,21352,3079],{"class":1959},[1608,21354,21355,21357,21359,21361,21363,21365,21368,21370,21373,21375,21377],{"class":1785,"line":1814},[1608,21356,11684],{"class":2046},[1608,21358,13123],{"class":2068},[1608,21360,3206],{"class":3205},[1608,21362,21316],{"class":2058},[1608,21364,2089],{"class":3205},[1608,21366,21367],{"class":2068},"_",[1608,21369,3206],{"class":3205},[1608,21371,21372],{"class":2058},"token",[1608,21374,2089],{"class":3205},[1608,21376,3222],{"class":2068},[1608,21378,1977],{"class":1959},[1608,21380,21381],{"class":1785,"line":1820},[1608,21382,3619],{"class":1959},[1608,21384,21385],{"class":1785,"line":1825},[1608,21386,1805],{"emptyLinePlaceholder":1305},[1608,21388,21389,21391,21394],{"class":1785,"line":1831},[1608,21390,20838],{"class":1951},[1608,21392,21393],{"class":2017}," generateSessionId",[1608,21395,3602],{"class":1959},[1608,21397,21398,21400,21402,21404,21406,21408,21410,21412,21414,21416,21418],{"class":1785,"line":1333},[1608,21399,11684],{"class":2046},[1608,21401,19169],{"class":2058},[1608,21403,44],{"class":1959},[1608,21405,19213],{"class":2017},[1608,21407,3072],{"class":1959},[1608,21409,19291],{"class":3075},[1608,21411,6390],{"class":1959},[1608,21413,19240],{"class":2017},[1608,21415,3072],{"class":1959},[1608,21417,19245],{"class":2068},[1608,21419,3079],{"class":1959},[1608,21421,21422],{"class":1785,"line":2075},[1608,21423,3619],{"class":1959},[1608,21425,21426],{"class":1785,"line":2099},[1608,21427,1805],{"emptyLinePlaceholder":1305},[1608,21429,21430,21432,21435],{"class":1785,"line":2119},[1608,21431,20838],{"class":1951},[1608,21433,21434],{"class":2017}," generateResetToken",[1608,21436,3602],{"class":1959},[1608,21438,21439],{"class":1785,"line":2129},[1608,21440,21441],{"class":1945},"    // قصير الأمد، تنتهي صلاحيته بعد الاستخدام\n",[1608,21443,21444,21446,21448,21450,21452,21454,21456,21458,21460,21462,21464],{"class":1785,"line":1635},[1608,21445,11684],{"class":2046},[1608,21447,19169],{"class":2058},[1608,21449,44],{"class":1959},[1608,21451,19213],{"class":2017},[1608,21453,3072],{"class":1959},[1608,21455,19291],{"class":3075},[1608,21457,6390],{"class":1959},[1608,21459,19240],{"class":2017},[1608,21461,3072],{"class":1959},[1608,21463,19245],{"class":2068},[1608,21465,3079],{"class":1959},[1608,21467,21468],{"class":1785,"line":2296},[1608,21469,3619],{"class":1959},[1608,21471,21472],{"class":1785,"line":2302},[1608,21473,2005],{"class":1959},[1608,21475,21476],{"class":1785,"line":2308},[1608,21477,1805],{"emptyLinePlaceholder":1305},[1608,21479,21480],{"class":1785,"line":3279},[1608,21481,20189],{"class":1945},[1608,21483,21484,21486,21488,21490,21492,21495,21497,21500,21502,21505],{"class":1785,"line":3284},[1608,21485,19277],{"class":2058},[1608,21487,44],{"class":1959},[1608,21489,3197],{"class":2017},[1608,21491,3072],{"class":1959},[1608,21493,21494],{"class":2058},"TokenGenerator",[1608,21496,44],{"class":1959},[1608,21498,21499],{"class":2017},"generateApiKey",[1608,21501,3072],{"class":1959},[1608,21503,21504],{"class":2068},"'pk'",[1608,21506,19294],{"class":1959},[1608,21508,21509],{"class":1785,"line":3293},[1608,21510,21511],{"class":1945},"// الناتج: \"pk_K7xP-zQ2mR8vN5tL3wY6jF9cH4dS1aE0K7xPzQ2m\"\n",[1608,21513,21514],{"class":1785,"line":3298},[1608,21515,1805],{"emptyLinePlaceholder":1305},[1608,21517,21518,21520,21522,21524,21526,21528,21530,21533],{"class":1785,"line":3308},[1608,21519,19277],{"class":2058},[1608,21521,44],{"class":1959},[1608,21523,3197],{"class":2017},[1608,21525,3072],{"class":1959},[1608,21527,21494],{"class":2058},[1608,21529,44],{"class":1959},[1608,21531,21532],{"class":2017},"generateSessionId",[1608,21534,20531],{"class":1959},[1608,21536,21537],{"class":1785,"line":3318},[1608,21538,21539],{"class":1945},"// الناتج: \"a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1\"\n",[73,21541,21543],{"id":21542},"مولد-روابط-قصيرة","مولد روابط قصيرة",[441,21545,21547],{"className":19159,"code":21546,"language":2885,"meta":16,"style":16},"import { customAlphabet } from 'nanoid';\n\n// استخدم فقط أحرف آمنة للروابط، استثنِ المربكة\nconst generateShortId = customAlphabet(\n  'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789',\n  8\n);\n\nfunction createShortUrl(longUrl) {\n  const shortId = generateShortId();\n  const shortUrl = `https://myapp.com/${shortId}`;\n  \n  // احفظ في قاعدة البيانات: { shortId, longUrl }\n  return shortUrl;\n}\n\nconsole.log(createShortUrl('https://example.com/very/long/url'));\n// الناتج: \"https://myapp.com/K7xPzQ2m\"\n",[448,21548,21549,21565,21569,21574,21587,21594,21599,21603,21607,21621,21634,21657,21661,21666,21674,21678,21682,21702],{"__ignoreMap":16},[1608,21550,21551,21553,21555,21557,21559,21561,21563],{"class":1785,"line":1786},[1608,21552,3013],{"class":2046},[1608,21554,2032],{"class":1959},[1608,21556,20720],{"class":2058},[1608,21558,3037],{"class":1959},[1608,21560,3040],{"class":2046},[1608,21562,20640],{"class":2068},[1608,21564,1977],{"class":1959},[1608,21566,21567],{"class":1785,"line":1260},[1608,21568,1805],{"emptyLinePlaceholder":1305},[1608,21570,21571],{"class":1785,"line":17},[1608,21572,21573],{"class":1945},"// استخدم فقط أحرف آمنة للروابط، استثنِ المربكة\n",[1608,21575,21576,21578,21581,21583,21585],{"class":1785,"line":1802},[1608,21577,3059],{"class":1951},[1608,21579,21580],{"class":3062}," generateShortId",[1608,21582,3066],{"class":1969},[1608,21584,20740],{"class":2017},[1608,21586,5098],{"class":1959},[1608,21588,21589,21592],{"class":1785,"line":1808},[1608,21590,21591],{"class":2068},"  'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'",[1608,21593,3694],{"class":1959},[1608,21595,21596],{"class":1785,"line":1814},[1608,21597,21598],{"class":3075},"  8\n",[1608,21600,21601],{"class":1785,"line":1820},[1608,21602,3079],{"class":1959},[1608,21604,21605],{"class":1785,"line":1825},[1608,21606,1805],{"emptyLinePlaceholder":1305},[1608,21608,21609,21611,21614,21616,21619],{"class":1785,"line":1831},[1608,21610,2014],{"class":1951},[1608,21612,21613],{"class":2017}," createShortUrl",[1608,21615,3072],{"class":1959},[1608,21617,21618],{"class":1965},"longUrl",[1608,21620,4832],{"class":1959},[1608,21622,21623,21625,21628,21630,21632],{"class":1785,"line":1333},[1608,21624,3516],{"class":1951},[1608,21626,21627],{"class":3062}," shortId",[1608,21629,3066],{"class":1969},[1608,21631,21580],{"class":2017},[1608,21633,13323],{"class":1959},[1608,21635,21636,21638,21641,21643,21646,21648,21651,21653,21655],{"class":1785,"line":2075},[1608,21637,3516],{"class":1951},[1608,21639,21640],{"class":3062}," shortUrl",[1608,21642,3066],{"class":1969},[1608,21644,21645],{"class":2068}," `https://myapp.com/",[1608,21647,3206],{"class":3205},[1608,21649,21650],{"class":2058},"shortId",[1608,21652,2089],{"class":3205},[1608,21654,3222],{"class":2068},[1608,21656,1977],{"class":1959},[1608,21658,21659],{"class":1785,"line":2099},[1608,21660,10139],{"class":1959},[1608,21662,21663],{"class":1785,"line":2119},[1608,21664,21665],{"class":1945},"  // احفظ في قاعدة البيانات: { shortId, longUrl }\n",[1608,21667,21668,21670,21672],{"class":1785,"line":2129},[1608,21669,2047],{"class":2046},[1608,21671,21640],{"class":2058},[1608,21673,1977],{"class":1959},[1608,21675,21676],{"class":1785,"line":1635},[1608,21677,2005],{"class":1959},[1608,21679,21680],{"class":1785,"line":2296},[1608,21681,1805],{"emptyLinePlaceholder":1305},[1608,21683,21684,21686,21688,21690,21692,21695,21697,21700],{"class":1785,"line":2302},[1608,21685,19277],{"class":2058},[1608,21687,44],{"class":1959},[1608,21689,3197],{"class":2017},[1608,21691,3072],{"class":1959},[1608,21693,21694],{"class":2017},"createShortUrl",[1608,21696,3072],{"class":1959},[1608,21698,21699],{"class":2068},"'https://example.com/very/long/url'",[1608,21701,19294],{"class":1959},[1608,21703,21704],{"class":1785,"line":2308},[1608,21705,21706],{"class":1945},"// الناتج: \"https://myapp.com/K7xPzQ2m\"\n",[73,21708,21710],{"id":21709},"أسماء-ملفات-فريدة-للرفع","أسماء ملفات فريدة للرفع",[441,21712,21714],{"className":19159,"code":21713,"language":2885,"meta":16,"style":16},"import crypto from 'crypto';\nimport path from 'path';\n\nfunction generateUniqueFilename(originalFilename) {\n  const timestamp = Date.now();\n  const randomString = crypto.randomBytes(8).toString('hex');\n  const extension = path.extname(originalFilename);\n  const nameWithoutExt = path.basename(originalFilename, extension);\n  \n  // التنسيق: originalname_timestamp_random.ext\n  return `${nameWithoutExt}_${timestamp}_${randomString}${extension}`;\n}\n\nconsole.log(generateUniqueFilename('photo.jpg'));\n// الناتج: \"photo_1704931200000_a7f5c3e9d2b1.jpg\"\n",[448,21715,21716,21728,21741,21745,21759,21776,21806,21828,21855,21859,21864,21904,21908,21912,21932],{"__ignoreMap":16},[1608,21717,21718,21720,21722,21724,21726],{"class":1785,"line":1786},[1608,21719,3013],{"class":2046},[1608,21721,19169],{"class":2058},[1608,21723,6107],{"class":2046},[1608,21725,19174],{"class":2068},[1608,21727,1977],{"class":1959},[1608,21729,21730,21732,21734,21736,21739],{"class":1785,"line":1260},[1608,21731,3013],{"class":2046},[1608,21733,14002],{"class":2058},[1608,21735,6107],{"class":2046},[1608,21737,21738],{"class":2068}," 'path'",[1608,21740,1977],{"class":1959},[1608,21742,21743],{"class":1785,"line":17},[1608,21744,1805],{"emptyLinePlaceholder":1305},[1608,21746,21747,21749,21752,21754,21757],{"class":1785,"line":1802},[1608,21748,2014],{"class":1951},[1608,21750,21751],{"class":2017}," generateUniqueFilename",[1608,21753,3072],{"class":1959},[1608,21755,21756],{"class":1965},"originalFilename",[1608,21758,4832],{"class":1959},[1608,21760,21761,21763,21766,21768,21770,21772,21774],{"class":1785,"line":1808},[1608,21762,3516],{"class":1951},[1608,21764,21765],{"class":3062}," timestamp",[1608,21767,3066],{"class":1969},[1608,21769,9965],{"class":2058},[1608,21771,44],{"class":1959},[1608,21773,20467],{"class":2017},[1608,21775,13323],{"class":1959},[1608,21777,21778,21780,21783,21785,21787,21789,21791,21793,21796,21798,21800,21802,21804],{"class":1785,"line":1814},[1608,21779,3516],{"class":1951},[1608,21781,21782],{"class":3062}," randomString",[1608,21784,3066],{"class":1969},[1608,21786,19169],{"class":2058},[1608,21788,44],{"class":1959},[1608,21790,19213],{"class":2017},[1608,21792,3072],{"class":1959},[1608,21794,21795],{"class":3075},"8",[1608,21797,6390],{"class":1959},[1608,21799,19240],{"class":2017},[1608,21801,3072],{"class":1959},[1608,21803,19245],{"class":2068},[1608,21805,3079],{"class":1959},[1608,21807,21808,21810,21813,21815,21817,21819,21822,21824,21826],{"class":1785,"line":1820},[1608,21809,3516],{"class":1951},[1608,21811,21812],{"class":3062}," extension",[1608,21814,3066],{"class":1969},[1608,21816,14002],{"class":2058},[1608,21818,44],{"class":1959},[1608,21820,21821],{"class":2017},"extname",[1608,21823,3072],{"class":1959},[1608,21825,21756],{"class":2058},[1608,21827,3079],{"class":1959},[1608,21829,21830,21832,21835,21837,21839,21841,21844,21846,21848,21850,21853],{"class":1785,"line":1825},[1608,21831,3516],{"class":1951},[1608,21833,21834],{"class":3062}," nameWithoutExt",[1608,21836,3066],{"class":1969},[1608,21838,14002],{"class":2058},[1608,21840,44],{"class":1959},[1608,21842,21843],{"class":2017},"basename",[1608,21845,3072],{"class":1959},[1608,21847,21756],{"class":2058},[1608,21849,3020],{"class":1959},[1608,21851,21852],{"class":2058},"extension",[1608,21854,3079],{"class":1959},[1608,21856,21857],{"class":1785,"line":1831},[1608,21858,10139],{"class":1959},[1608,21860,21861],{"class":1785,"line":1333},[1608,21862,21863],{"class":1945},"  // التنسيق: originalname_timestamp_random.ext\n",[1608,21865,21866,21868,21870,21872,21875,21877,21879,21881,21884,21886,21888,21890,21893,21896,21898,21900,21902],{"class":1785,"line":2075},[1608,21867,2047],{"class":2046},[1608,21869,13123],{"class":2068},[1608,21871,3206],{"class":3205},[1608,21873,21874],{"class":2058},"nameWithoutExt",[1608,21876,2089],{"class":3205},[1608,21878,21367],{"class":2068},[1608,21880,3206],{"class":3205},[1608,21882,21883],{"class":2058},"timestamp",[1608,21885,2089],{"class":3205},[1608,21887,21367],{"class":2068},[1608,21889,3206],{"class":3205},[1608,21891,21892],{"class":2058},"randomString",[1608,21894,21895],{"class":3205},"}${",[1608,21897,21852],{"class":2058},[1608,21899,2089],{"class":3205},[1608,21901,3222],{"class":2068},[1608,21903,1977],{"class":1959},[1608,21905,21906],{"class":1785,"line":2099},[1608,21907,2005],{"class":1959},[1608,21909,21910],{"class":1785,"line":2119},[1608,21911,1805],{"emptyLinePlaceholder":1305},[1608,21913,21914,21916,21918,21920,21922,21925,21927,21930],{"class":1785,"line":2129},[1608,21915,19277],{"class":2058},[1608,21917,44],{"class":1959},[1608,21919,3197],{"class":2017},[1608,21921,3072],{"class":1959},[1608,21923,21924],{"class":2017},"generateUniqueFilename",[1608,21926,3072],{"class":1959},[1608,21928,21929],{"class":2068},"'photo.jpg'",[1608,21931,19294],{"class":1959},[1608,21933,21934],{"class":1785,"line":1635},[1608,21935,21936],{"class":1945},"// الناتج: \"photo_1704931200000_a7f5c3e9d2b1.jpg\"\n",[68,21938,21940],{"id":21939},"مقارنة-الأداء","مقارنة الأداء",[30,21942,21943],{},"إليك معيار للطرق المختلفة (100,000 تكرار):",[441,21945,21947],{"className":19159,"code":21946,"language":2885,"meta":16,"style":16},"import crypto from 'crypto';\nimport { nanoid } from 'nanoid';\n\nfunction benchmark(fn, iterations = 100000) {\n  const start = performance.now();\n  for (let i = 0; i \u003C iterations; i++) {\n    fn();\n  }\n  const end = performance.now();\n  return `${(end - start).toFixed(2)}ms`;\n}\n\nconsole.log('crypto.randomUUID():', benchmark(() => crypto.randomUUID()));\n// الناتج: ~45ms (أسرع!)\n\nconsole.log('crypto.randomBytes(16).toString(\"hex\"):', benchmark(() => \n  crypto.randomBytes(16).toString('hex')\n));\n// الناتج: ~60ms\n\nconsole.log('nanoid():', benchmark(() => nanoid()));\n// الناتج: ~75ms\n\nconsole.log('Math.random() (غير آمن!):', benchmark(() => \n  Math.random().toString(36).substring(2, 15)\n));\n// الناتج: ~25ms (أسرع لكن غير آمن!)\n",[448,21948,21949,21961,21977,21981,22005,22023,22054,22061,22065,22082,22118,22122,22126,22157,22162,22166,22189,22211,22215,22220,22224,22249,22254,22258,22281,22313,22317],{"__ignoreMap":16},[1608,21950,21951,21953,21955,21957,21959],{"class":1785,"line":1786},[1608,21952,3013],{"class":2046},[1608,21954,19169],{"class":2058},[1608,21956,6107],{"class":2046},[1608,21958,19174],{"class":2068},[1608,21960,1977],{"class":1959},[1608,21962,21963,21965,21967,21969,21971,21973,21975],{"class":1785,"line":1260},[1608,21964,3013],{"class":2046},[1608,21966,2032],{"class":1959},[1608,21968,19133],{"class":2058},[1608,21970,3037],{"class":1959},[1608,21972,3040],{"class":2046},[1608,21974,20640],{"class":2068},[1608,21976,1977],{"class":1959},[1608,21978,21979],{"class":1785,"line":17},[1608,21980,1805],{"emptyLinePlaceholder":1305},[1608,21982,21983,21985,21988,21990,21993,21995,21998,22000,22003],{"class":1785,"line":1802},[1608,21984,2014],{"class":1951},[1608,21986,21987],{"class":2017}," benchmark",[1608,21989,3072],{"class":1959},[1608,21991,21992],{"class":1965},"fn",[1608,21994,3020],{"class":1959},[1608,21996,21997],{"class":1965},"iterations",[1608,21999,3066],{"class":1969},[1608,22001,22002],{"class":3075}," 100000",[1608,22004,4832],{"class":1959},[1608,22006,22007,22009,22012,22014,22017,22019,22021],{"class":1785,"line":1808},[1608,22008,3516],{"class":1951},[1608,22010,22011],{"class":3062}," start",[1608,22013,3066],{"class":1969},[1608,22015,22016],{"class":2058}," performance",[1608,22018,44],{"class":1959},[1608,22020,20467],{"class":2017},[1608,22022,13323],{"class":1959},[1608,22024,22025,22027,22029,22031,22033,22035,22037,22039,22041,22043,22046,22048,22050,22052],{"class":1785,"line":1814},[1608,22026,19583],{"class":2046},[1608,22028,4554],{"class":1959},[1608,22030,17868],{"class":1951},[1608,22032,19590],{"class":2058},[1608,22034,3066],{"class":1969},[1608,22036,10220],{"class":3075},[1608,22038,17977],{"class":1959},[1608,22040,19599],{"class":2058},[1608,22042,19602],{"class":1969},[1608,22044,22045],{"class":2058}," iterations",[1608,22047,17977],{"class":1959},[1608,22049,19599],{"class":2058},[1608,22051,3386],{"class":1969},[1608,22053,4832],{"class":1959},[1608,22055,22056,22059],{"class":1785,"line":1820},[1608,22057,22058],{"class":2017},"    fn",[1608,22060,13323],{"class":1959},[1608,22062,22063],{"class":1785,"line":1825},[1608,22064,3619],{"class":1959},[1608,22066,22067,22069,22072,22074,22076,22078,22080],{"class":1785,"line":1831},[1608,22068,3516],{"class":1951},[1608,22070,22071],{"class":3062}," end",[1608,22073,3066],{"class":1969},[1608,22075,22016],{"class":2058},[1608,22077,44],{"class":1959},[1608,22079,20467],{"class":2017},[1608,22081,13323],{"class":1959},[1608,22083,22084,22086,22088,22090,22092,22095,22098,22100,22102,22105,22107,22109,22111,22113,22116],{"class":1785,"line":1333},[1608,22085,2047],{"class":2046},[1608,22087,13123],{"class":2068},[1608,22089,3206],{"class":3205},[1608,22091,3072],{"class":3268},[1608,22093,22094],{"class":2058},"end",[1608,22096,22097],{"class":1969}," -",[1608,22099,22011],{"class":2058},[1608,22101,6390],{"class":3268},[1608,22103,22104],{"class":2017},"toFixed",[1608,22106,3072],{"class":3268},[1608,22108,17950],{"class":3075},[1608,22110,2950],{"class":3268},[1608,22112,2089],{"class":3205},[1608,22114,22115],{"class":2068},"ms`",[1608,22117,1977],{"class":1959},[1608,22119,22120],{"class":1785,"line":2075},[1608,22121,2005],{"class":1959},[1608,22123,22124],{"class":1785,"line":2099},[1608,22125,1805],{"emptyLinePlaceholder":1305},[1608,22127,22128,22130,22132,22134,22136,22139,22141,22144,22146,22148,22150,22152,22154],{"class":1785,"line":2119},[1608,22129,19277],{"class":2058},[1608,22131,44],{"class":1959},[1608,22133,3197],{"class":2017},[1608,22135,3072],{"class":1959},[1608,22137,22138],{"class":2068},"'crypto.randomUUID():'",[1608,22140,3020],{"class":1959},[1608,22142,22143],{"class":2017},"benchmark",[1608,22145,3134],{"class":1959},[1608,22147,3137],{"class":1951},[1608,22149,19169],{"class":2058},[1608,22151,44],{"class":1959},[1608,22153,19830],{"class":2017},[1608,22155,22156],{"class":1959},"()));\n",[1608,22158,22159],{"class":1785,"line":2129},[1608,22160,22161],{"class":1945},"// الناتج: ~45ms (أسرع!)\n",[1608,22163,22164],{"class":1785,"line":1635},[1608,22165,1805],{"emptyLinePlaceholder":1305},[1608,22167,22168,22170,22172,22174,22176,22179,22181,22183,22185,22187],{"class":1785,"line":2296},[1608,22169,19277],{"class":2058},[1608,22171,44],{"class":1959},[1608,22173,3197],{"class":2017},[1608,22175,3072],{"class":1959},[1608,22177,22178],{"class":2068},"'crypto.randomBytes(16).toString(\"hex\"):'",[1608,22180,3020],{"class":1959},[1608,22182,22143],{"class":2017},[1608,22184,3134],{"class":1959},[1608,22186,3137],{"class":1951},[1608,22188,10656],{"class":1959},[1608,22190,22191,22193,22195,22197,22199,22201,22203,22205,22207,22209],{"class":1785,"line":2302},[1608,22192,19945],{"class":2058},[1608,22194,44],{"class":1959},[1608,22196,19213],{"class":2017},[1608,22198,3072],{"class":1959},[1608,22200,19717],{"class":3075},[1608,22202,6390],{"class":1959},[1608,22204,19240],{"class":2017},[1608,22206,3072],{"class":1959},[1608,22208,19245],{"class":2068},[1608,22210,2419],{"class":1959},[1608,22212,22213],{"class":1785,"line":2308},[1608,22214,19294],{"class":1959},[1608,22216,22217],{"class":1785,"line":3279},[1608,22218,22219],{"class":1945},"// الناتج: ~60ms\n",[1608,22221,22222],{"class":1785,"line":3284},[1608,22223,1805],{"emptyLinePlaceholder":1305},[1608,22225,22226,22228,22230,22232,22234,22237,22239,22241,22243,22245,22247],{"class":1785,"line":3293},[1608,22227,19277],{"class":2058},[1608,22229,44],{"class":1959},[1608,22231,3197],{"class":2017},[1608,22233,3072],{"class":1959},[1608,22235,22236],{"class":2068},"'nanoid():'",[1608,22238,3020],{"class":1959},[1608,22240,22143],{"class":2017},[1608,22242,3134],{"class":1959},[1608,22244,3137],{"class":1951},[1608,22246,20735],{"class":2017},[1608,22248,22156],{"class":1959},[1608,22250,22251],{"class":1785,"line":3298},[1608,22252,22253],{"class":1945},"// الناتج: ~75ms\n",[1608,22255,22256],{"class":1785,"line":3308},[1608,22257,1805],{"emptyLinePlaceholder":1305},[1608,22259,22260,22262,22264,22266,22268,22271,22273,22275,22277,22279],{"class":1785,"line":3318},[1608,22261,19277],{"class":2058},[1608,22263,44],{"class":1959},[1608,22265,3197],{"class":2017},[1608,22267,3072],{"class":1959},[1608,22269,22270],{"class":2068},"'Math.random() (غير آمن!):'",[1608,22272,3020],{"class":1959},[1608,22274,22143],{"class":2017},[1608,22276,3134],{"class":1959},[1608,22278,3137],{"class":1951},[1608,22280,10656],{"class":1959},[1608,22282,22283,22286,22288,22290,22292,22294,22296,22298,22300,22302,22304,22306,22308,22311],{"class":1785,"line":3342},[1608,22284,22285],{"class":2058},"  Math",[1608,22287,44],{"class":1959},[1608,22289,20488],{"class":2017},[1608,22291,9968],{"class":1959},[1608,22293,19240],{"class":2017},[1608,22295,3072],{"class":1959},[1608,22297,20476],{"class":3075},[1608,22299,6390],{"class":1959},[1608,22301,20501],{"class":2017},[1608,22303,3072],{"class":1959},[1608,22305,17950],{"class":3075},[1608,22307,3020],{"class":1959},[1608,22309,22310],{"class":3075},"15",[1608,22312,2419],{"class":1959},[1608,22314,22315],{"class":1785,"line":3365},[1608,22316,19294],{"class":1959},[1608,22318,22319],{"class":1785,"line":3402},[1608,22320,22321],{"class":1945},"// الناتج: ~25ms (أسرع لكن غير آمن!)\n",[68,22323,22325],{"id":22324},"أفضل-ممارسات-الأمان","أفضل ممارسات الأمان",[73,22327,22329],{"id":22328},"افعل","✅ افعل:",[441,22331,22333],{"className":19159,"code":22332,"language":2885,"meta":16,"style":16},"// استخدم طرق آمنة مشفرة للرموز\nconst token = crypto.randomBytes(32).toString('hex');\n\n// استخدم طول كافي (32 حرف كحد أدنى للرموز)\nconst sessionId = nanoid(32);\n\n// استخدم base64url للرموز الآمنة للروابط\nconst resetToken = crypto.randomBytes(32).toString('base64url');\n",[448,22334,22335,22340,22368,22372,22377,22394,22398,22403],{"__ignoreMap":16},[1608,22336,22337],{"class":1785,"line":1786},[1608,22338,22339],{"class":1945},"// استخدم طرق آمنة مشفرة للرموز\n",[1608,22341,22342,22344,22346,22348,22350,22352,22354,22356,22358,22360,22362,22364,22366],{"class":1785,"line":1260},[1608,22343,3059],{"class":1951},[1608,22345,21330],{"class":3062},[1608,22347,3066],{"class":1969},[1608,22349,19169],{"class":2058},[1608,22351,44],{"class":1959},[1608,22353,19213],{"class":2017},[1608,22355,3072],{"class":1959},[1608,22357,19291],{"class":3075},[1608,22359,6390],{"class":1959},[1608,22361,19240],{"class":2017},[1608,22363,3072],{"class":1959},[1608,22365,19245],{"class":2068},[1608,22367,3079],{"class":1959},[1608,22369,22370],{"class":1785,"line":17},[1608,22371,1805],{"emptyLinePlaceholder":1305},[1608,22373,22374],{"class":1785,"line":1802},[1608,22375,22376],{"class":1945},"// استخدم طول كافي (32 حرف كحد أدنى للرموز)\n",[1608,22378,22379,22381,22384,22386,22388,22390,22392],{"class":1785,"line":1808},[1608,22380,3059],{"class":1951},[1608,22382,22383],{"class":3062}," sessionId",[1608,22385,3066],{"class":1969},[1608,22387,20735],{"class":2017},[1608,22389,3072],{"class":1959},[1608,22391,19291],{"class":3075},[1608,22393,3079],{"class":1959},[1608,22395,22396],{"class":1785,"line":1814},[1608,22397,1805],{"emptyLinePlaceholder":1305},[1608,22399,22400],{"class":1785,"line":1820},[1608,22401,22402],{"class":1945},"// استخدم base64url للرموز الآمنة للروابط\n",[1608,22404,22405,22407,22410,22412,22414,22416,22418,22420,22422,22424,22426,22428,22430],{"class":1785,"line":1825},[1608,22406,3059],{"class":1951},[1608,22408,22409],{"class":3062}," resetToken",[1608,22411,3066],{"class":1969},[1608,22413,19169],{"class":2058},[1608,22415,44],{"class":1959},[1608,22417,19213],{"class":2017},[1608,22419,3072],{"class":1959},[1608,22421,19291],{"class":3075},[1608,22423,6390],{"class":1959},[1608,22425,19240],{"class":2017},[1608,22427,3072],{"class":1959},[1608,22429,19408],{"class":2068},[1608,22431,3079],{"class":1959},[73,22433,22435],{"id":22434},"لا-تفعل","❌ لا تفعل:",[441,22437,22439],{"className":19159,"code":22438,"language":2885,"meta":16,"style":16},"// لا تستخدم Math.random() للأمان\nconst insecureToken = Math.random().toString(36); // ⚠️ أبداً!\n\n// لا تستخدم أطوال قصيرة للرموز الأمنية\nconst weakToken = crypto.randomBytes(4).toString('hex'); // ⚠️ قصير جداً!\n\n// لا تستخدم Date.now() وحده للفرادة\nconst notUnique = Date.now().toString(); // ⚠️ تصادمات ممكنة!\n",[448,22440,22441,22446,22474,22478,22483,22516,22520,22525],{"__ignoreMap":16},[1608,22442,22443],{"class":1785,"line":1786},[1608,22444,22445],{"class":1945},"// لا تستخدم Math.random() للأمان\n",[1608,22447,22448,22450,22453,22455,22457,22459,22461,22463,22465,22467,22469,22471],{"class":1785,"line":1260},[1608,22449,3059],{"class":1951},[1608,22451,22452],{"class":3062}," insecureToken",[1608,22454,3066],{"class":1969},[1608,22456,20483],{"class":2058},[1608,22458,44],{"class":1959},[1608,22460,20488],{"class":2017},[1608,22462,9968],{"class":1959},[1608,22464,19240],{"class":2017},[1608,22466,3072],{"class":1959},[1608,22468,20476],{"class":3075},[1608,22470,18214],{"class":1959},[1608,22472,22473],{"class":1945},"// ⚠️ أبداً!\n",[1608,22475,22476],{"class":1785,"line":17},[1608,22477,1805],{"emptyLinePlaceholder":1305},[1608,22479,22480],{"class":1785,"line":1802},[1608,22481,22482],{"class":1945},"// لا تستخدم أطوال قصيرة للرموز الأمنية\n",[1608,22484,22485,22487,22490,22492,22494,22496,22498,22500,22503,22505,22507,22509,22511,22513],{"class":1785,"line":1808},[1608,22486,3059],{"class":1951},[1608,22488,22489],{"class":3062}," weakToken",[1608,22491,3066],{"class":1969},[1608,22493,19169],{"class":2058},[1608,22495,44],{"class":1959},[1608,22497,19213],{"class":2017},[1608,22499,3072],{"class":1959},[1608,22501,22502],{"class":3075},"4",[1608,22504,6390],{"class":1959},[1608,22506,19240],{"class":2017},[1608,22508,3072],{"class":1959},[1608,22510,19245],{"class":2068},[1608,22512,18214],{"class":1959},[1608,22514,22515],{"class":1945},"// ⚠️ قصير جداً!\n",[1608,22517,22518],{"class":1785,"line":1814},[1608,22519,1805],{"emptyLinePlaceholder":1305},[1608,22521,22522],{"class":1785,"line":1820},[1608,22523,22524],{"class":1945},"// لا تستخدم Date.now() وحده للفرادة\n",[1608,22526,22527,22529,22532,22534,22536,22538,22540,22542,22544,22547],{"class":1785,"line":1825},[1608,22528,3059],{"class":1951},[1608,22530,22531],{"class":3062}," notUnique",[1608,22533,3066],{"class":1969},[1608,22535,9965],{"class":2058},[1608,22537,44],{"class":1959},[1608,22539,20467],{"class":2017},[1608,22541,9968],{"class":1959},[1608,22543,19240],{"class":2017},[1608,22545,22546],{"class":1959},"(); ",[1608,22548,22549],{"class":1945},"// ⚠️ تصادمات ممكنة!\n",[68,22551,22553],{"id":22552},"أي-طريقة-يجب-أن-تستخدمها","أي طريقة يجب أن تستخدمها؟",[73,22555,22557],{"id":22556},"لرموز-api-معرفات-الجلسات","لرموز API / معرفات الجلسات:",[441,22559,22561],{"className":19159,"code":22560,"language":2885,"meta":16,"style":16},"// Node.js\ncrypto.randomBytes(32).toString('hex')\n\n// المتصفح\ncrypto.getRandomValues(new Uint8Array(32))\n",[448,22562,22563,22568,22590,22594,22599],{"__ignoreMap":16},[1608,22564,22565],{"class":1785,"line":1786},[1608,22566,22567],{"class":1945},"// Node.js\n",[1608,22569,22570,22572,22574,22576,22578,22580,22582,22584,22586,22588],{"class":1785,"line":1260},[1608,22571,20354],{"class":2058},[1608,22573,44],{"class":1959},[1608,22575,19213],{"class":2017},[1608,22577,3072],{"class":1959},[1608,22579,19291],{"class":3075},[1608,22581,6390],{"class":1959},[1608,22583,19240],{"class":2017},[1608,22585,3072],{"class":1959},[1608,22587,19245],{"class":2068},[1608,22589,2419],{"class":1959},[1608,22591,22592],{"class":1785,"line":17},[1608,22593,1805],{"emptyLinePlaceholder":1305},[1608,22595,22596],{"class":1785,"line":1802},[1608,22597,22598],{"class":1945},"// المتصفح\n",[1608,22600,22601,22603,22605,22607,22609,22611,22613,22615,22617],{"class":1785,"line":1808},[1608,22602,20354],{"class":2058},[1608,22604,44],{"class":1959},[1608,22606,19950],{"class":2017},[1608,22608,3072],{"class":1959},[1608,22610,20363],{"class":1951},[1608,22612,19930],{"class":2017},[1608,22614,3072],{"class":1959},[1608,22616,19291],{"class":3075},[1608,22618,5020],{"class":1959},[73,22620,22622],{"id":22621},"لمعرفات-قاعدة-البيانات-روابط-قصيرة","لمعرفات قاعدة البيانات / روابط قصيرة:",[441,22624,22626],{"className":19159,"code":22625,"language":2885,"meta":16,"style":16},"// عالمي (Node.js + المتصفح)\nimport { nanoid } from 'nanoid';\nnanoid(10); // سريع، قصير، آمن\n",[448,22627,22628,22633,22649],{"__ignoreMap":16},[1608,22629,22630],{"class":1785,"line":1786},[1608,22631,22632],{"class":1945},"// عالمي (Node.js + المتصفح)\n",[1608,22634,22635,22637,22639,22641,22643,22645,22647],{"class":1785,"line":1260},[1608,22636,3013],{"class":2046},[1608,22638,2032],{"class":1959},[1608,22640,19133],{"class":2058},[1608,22642,3037],{"class":1959},[1608,22644,3040],{"class":2046},[1608,22646,20640],{"class":2068},[1608,22648,1977],{"class":1959},[1608,22650,22651,22653,22655,22657,22659],{"class":1785,"line":17},[1608,22652,19133],{"class":2017},[1608,22654,3072],{"class":1959},[1608,22656,10402],{"class":3075},[1608,22658,18214],{"class":1959},[1608,22660,22661],{"class":1945},"// سريع، قصير، آمن\n",[73,22663,22665],{"id":22664},"للـ-uuid-المفاتيح-الأساسية","للـ UUID (المفاتيح الأساسية):",[441,22667,22669],{"className":19159,"code":22668,"language":2885,"meta":16,"style":16},"// Node.js حديث (14.17+) / المتصفح (Chrome 92+)\ncrypto.randomUUID()\n",[448,22670,22671,22676],{"__ignoreMap":16},[1608,22672,22673],{"class":1785,"line":1786},[1608,22674,22675],{"class":1945},"// Node.js حديث (14.17+) / المتصفح (Chrome 92+)\n",[1608,22677,22678,22680,22682,22684],{"class":1785,"line":1260},[1608,22679,20354],{"class":2058},[1608,22681,44],{"class":1959},[1608,22683,19830],{"class":2017},[1608,22685,3801],{"class":1959},[73,22687,22689],{"id":22688},"لكلمات-المرور","لكلمات المرور:",[441,22691,22693],{"className":19159,"code":22692,"language":2885,"meta":16,"style":16},"// مجموعة أحرف مخصصة مع crypto\nconst charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()';\ncrypto.randomBytes(16).map(byte => charset[byte % charset.length]).join('');\n",[448,22694,22695,22700,22713],{"__ignoreMap":16},[1608,22696,22697],{"class":1785,"line":1786},[1608,22698,22699],{"class":1945},"// مجموعة أحرف مخصصة مع crypto\n",[1608,22701,22702,22704,22706,22708,22711],{"class":1785,"line":1260},[1608,22703,3059],{"class":1951},[1608,22705,19637],{"class":3062},[1608,22707,3066],{"class":1969},[1608,22709,22710],{"class":2068}," 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'",[1608,22712,1977],{"class":1959},[1608,22714,22715,22717,22719,22721,22723,22725,22727,22730,22732,22734,22736,22738,22740,22742,22744,22746,22748,22750,22752,22754,22756,22758],{"class":1785,"line":17},[1608,22716,20354],{"class":2058},[1608,22718,44],{"class":1959},[1608,22720,19213],{"class":2017},[1608,22722,3072],{"class":1959},[1608,22724,19717],{"class":3075},[1608,22726,6390],{"class":1959},[1608,22728,22729],{"class":2017},"map",[1608,22731,3072],{"class":1959},[1608,22733,19979],{"class":1965},[1608,22735,13519],{"class":1951},[1608,22737,19637],{"class":2058},[1608,22739,5375],{"class":1959},[1608,22741,19979],{"class":2058},[1608,22743,20159],{"class":1969},[1608,22745,19637],{"class":2058},[1608,22747,44],{"class":1959},[1608,22749,19192],{"class":9349},[1608,22751,20168],{"class":1959},[1608,22753,19684],{"class":2017},[1608,22755,3072],{"class":1959},[1608,22757,19689],{"class":2068},[1608,22759,3079],{"class":1959},[73,22761,22763],{"id":22762},"لغير-الأمني-مفاتيح-react-معرفات-مؤقتة","لغير الأمني (مفاتيح React، معرفات مؤقتة):",[441,22765,22767],{"className":19159,"code":22766,"language":2885,"meta":16,"style":16},"// سريع وبسيط\n`${Date.now()}-${Math.random().toString(36)}`\n",[448,22768,22769,22774],{"__ignoreMap":16},[1608,22770,22771],{"class":1785,"line":1786},[1608,22772,22773],{"class":1945},"// سريع وبسيط\n",[1608,22775,22776,22778,22780,22782,22784,22786,22788,22790,22792,22794,22796,22798,22800,22802,22804,22806,22808,22810,22812],{"class":1785,"line":1260},[1608,22777,3222],{"class":2068},[1608,22779,3206],{"class":3205},[1608,22781,20562],{"class":2058},[1608,22783,44],{"class":3268},[1608,22785,20467],{"class":2017},[1608,22787,20569],{"class":3268},[1608,22789,2089],{"class":3205},[1608,22791,3942],{"class":2068},[1608,22793,3206],{"class":3205},[1608,22795,19218],{"class":2058},[1608,22797,44],{"class":3268},[1608,22799,20488],{"class":2017},[1608,22801,9968],{"class":3268},[1608,22803,19240],{"class":2017},[1608,22805,3072],{"class":3268},[1608,22807,20476],{"class":3075},[1608,22809,2950],{"class":3268},[1608,22811,2089],{"class":3205},[1608,22813,22814],{"class":2068},"`\n",[68,22816,7222],{"id":7222},[30,22818,22819],{},"توليد السلاسل النصية العشوائية في JavaScript أمر مباشر عندما تفهم المقايضات:",[49,22821,22822,22834,22843,22851],{},[52,22823,22824,22827,22828,22830,22831,22833],{},[37,22825,22826],{},"للأمان:"," استخدم دائماً ",[448,22829,20354],{}," (Node.js) أو ",[448,22832,19075],{}," (المتصفح)",[52,22835,22836,22839,22840,22842],{},[37,22837,22838],{},"للراحة:"," استخدم ",[448,22841,19133],{}," - سريع، آمن، ويعمل في كل مكان",[52,22844,22845,22839,22848,22850],{},[37,22846,22847],{},"للمعايير:",[448,22849,19093],{}," لمعرفات قاعدة البيانات",[52,22852,22853,22856,22857,22859],{},[37,22854,22855],{},"للسرعة (غير أمني):"," ",[448,22858,19114],{}," مناسب لمفاتيح React والمعرفات المؤقتة",[30,22861,22862],{},[37,22863,22864,22865,22867],{},"لا تستخدم أبداً ",[448,22866,19114],{}," لكلمات المرور، الرموز المميزة، أو أي تطبيق حساس أمنياً!",[30,22869,22870],{},"نظام JavaScript الحديث يمنحك أدوات قوية لتوليد السلاسل النصية العشوائية. اختر الأداة المناسبة لحالة الاستخدام الخاصة بك، ودائماً أولوية الأمان عندما يهم الأمر.",[2846,22872,22873],{},"html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .sps74, html code.shiki .sps74{--shiki-light:#005CC5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s4XyT, html code.shiki .s4XyT{--shiki-light:#032F62;--shiki-default:#D16969;--shiki-dark:#D16969}html pre.shiki code .sqBZk, html code.shiki .sqBZk{--shiki-light:#005CC5;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .suOk-, html code.shiki .suOk-{--shiki-light:#005CC5;--shiki-default:#D16969;--shiki-dark:#D16969}html pre.shiki code .se2iQ, html code.shiki .se2iQ{--shiki-light:#032F62;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s5T4v, html code.shiki .s5T4v{--shiki-light:#032F62;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}",{"title":16,"searchDepth":17,"depth":17,"links":22875},[22876,22877,22878,22884,22890,22893,22899,22900,22904,22911],{"id":18944,"depth":1260,"text":18945},{"id":19021,"depth":1260,"text":19022},{"id":19148,"depth":1260,"text":19149,"children":22879},[22880,22881,22882,22883],{"id":19152,"depth":17,"text":19153},{"id":19337,"depth":17,"text":19338},{"id":19481,"depth":17,"text":19482},{"id":19785,"depth":17,"text":19786},{"id":19886,"depth":1260,"text":19887,"children":22885},[22886,22887,22888,22889],{"id":19890,"depth":17,"text":19891},{"id":20071,"depth":17,"text":20072},{"id":20235,"depth":17,"text":20236},{"id":20433,"depth":17,"text":20434},{"id":20601,"depth":1260,"text":20602,"children":22891},[22892],{"id":20605,"depth":17,"text":20606},{"id":20798,"depth":1260,"text":20799,"children":22894},[22895,22896,22897,22898],{"id":20802,"depth":17,"text":20803},{"id":21273,"depth":17,"text":21274},{"id":21542,"depth":17,"text":21543},{"id":21709,"depth":17,"text":21710},{"id":21939,"depth":1260,"text":21940},{"id":22324,"depth":1260,"text":22325,"children":22901},[22902,22903],{"id":22328,"depth":17,"text":22329},{"id":22434,"depth":17,"text":22435},{"id":22552,"depth":1260,"text":22553,"children":22905},[22906,22907,22908,22909,22910],{"id":22556,"depth":17,"text":22557},{"id":22621,"depth":17,"text":22622},{"id":22664,"depth":17,"text":22665},{"id":22688,"depth":17,"text":22689},{"id":22762,"depth":17,"text":22763},{"id":7222,"depth":1260,"text":7222},"تعلم جميع الطرق الحديثة لتوليد السلاسل النصية العشوائية في JavaScript لكلمات المرور، الرموز المميزة، المعرفات، والمزيد. يشمل طرق آمنة مشفرة، مقارنات الأداء، وحالات الاستخدام الواقعية.","https://images.unsplash.com/photo-1555949963-aa79dcee981c?q=80&w=1200",{"excerpt":22915},{"type":13,"value":22916},[22917,22919,22923],[30,22918,18919],{},[30,22920,22921],{},[37,22922,18924],{},[49,22924,22925,22927,22929,22931,22933],{},[52,22926,18929],{},[52,22928,18932],{},[52,22930,18935],{},[52,22932,18938],{},[52,22934,18941],{},"/twlyd-slasl-nsyh-ashwaeyh-javascript-2025","2023-01-19",{"title":18914,"description":22912},"توليد-سلاسل-نصية-عشوائية-javascript-2025",[2885,22940,22941,2886,20354],"nodejs","security","cCWhU6u7yy5u97EVAL7aIWH1_ctAqhKIZEhRDdlUOcM",{"id":22944,"title":22945,"author":26,"body":22946,"category":19,"description":23856,"extension":7,"image":23857,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":23858,"navigation":1305,"path":23869,"publishedAt":23870,"readingTime":2099,"seo":23871,"stem":23872,"tags":23873,"updatedAt":1342,"__hash__":23879},"articles_ar/ذكاء-اصطناعي-إبداع-تطوير-ألعاب-2025.md","هل سيقضي الذكاء الاصطناعي على الإبداع في تطوير الألعاب؟ واقع 2025",{"type":13,"value":22947,"toc":23829},[22948,22954,22957,22960,22964,22968,22975,22978,22983,22994,22999,23013,23018,23023,23027,23031,23037,23042,23047,23067,23072,23092,23097,23117,23121,23126,23131,23142,23147,23158,23163,23174,23179,23184,23209,23214,23233,23237,23242,23247,23258,23263,23274,23279,23290,23295,23300,23311,23316,23327,23331,23335,23340,23351,23356,23367,23372,23383,23387,23392,23403,23408,23419,23424,23435,23439,23443,23448,23454,23458,23463,23477,23482,23496,23501,23515,23519,23524,23535,23540,23551,23556,23567,23571,23575,23580,23591,23596,23607,23612,23623,23627,23632,23643,23648,23659,23664,23675,23679,23683,23688,23699,23704,23715,23720,23731,23735,23740,23751,23756,23767,23772,23783,23788,23799,23801,23804,23807,23821,23824],[30,22949,22950,22951],{},"سيطر السؤال \"هل سيقضي الذكاء الاصطناعي على الإبداع في تطوير الألعاب؟\" على منتديات الألعاب في 2023. الآن في 2025، لدينا إجابتنا: ",[37,22952,22953],{},"لم يقتل الذكاء الاصطناعي الإبداع - بل ديمقرطّه.",[30,22955,22956],{},"من مطوري الألعاب المستقلين الذين يستخدمون الذكاء الاصطناعي لإنشاء أصول بجودة AAA إلى الاستوديوهات الكبرى التي تنشر NPCs بالذكاء الاصطناعي مع سلوكيات ناشئة، تغير مشهد الألعاب. لكن هل كان ذلك على حساب الإبداع البشري، أم أنه أطلق إمكانيات جديدة؟",[30,22958,22959],{},"يستكشف هذا المقال الحالة الحالية للذكاء الاصطناعي في تطوير الألعاب، أمثلة حقيقية من 2025، والطرق المفاجئة التي يهدد بها الذكاء الاصطناعي ويعزز التعبير الإبداعي.",[68,22961,22963],{"id":22962},"حالة-تطوير-الألعاب-في-2025","حالة تطوير الألعاب في 2025",[73,22965,22967],{"id":22966},"نمو-الصناعة-والتحديات","نمو الصناعة والتحديات",[30,22969,22970,22971,22974],{},"وصلت صناعة الألعاب المرئية إلى ",[37,22972,22973],{},"227 مليار دولار عالمياً في 2025"," (مقارنة بـ 159 مليار دولار في 2020). يمثل الألعاب المحمولة وحدها 135 مليار دولار، بينما تواصل أسواق الحواسيب والكونسول نمواً قوياً.",[30,22976,22977],{},"ومع ذلك، يأتي هذا النمو مع ضغط غير مسبوق:",[30,22979,22980],{},[37,22981,22982],{},"ارتفاع تكاليف التطوير:",[49,22984,22985,22988,22991],{},[52,22986,22987],{},"تكلف ألعاب AAA الآن 100-300 مليون دولار للإنتاج",[52,22989,22990],{},"تمتد دورات التطوير 4-7 سنوات",[52,22992,22993],{},"يتجاوز حجم الفرق 500+ شخص للألعاب الكبرى",[30,22995,22996],{},[37,22997,22998],{},"أزمة ثقافة العمل الإضافي:",[49,23000,23001,23004,23007,23010],{},[52,23002,23003],{},"72% من مطوري الألعاب يبلغون عن العمل الإضافي",[52,23005,23006],{},"31% يعملون 60+ ساعة أسبوعياً أثناء فترات العمل الإضافي",[52,23008,23009],{},"معدلات الاحتراق في أعلى مستوياتها",[52,23011,23012],{},"جهود التنظيم النقابي تكتسب زخماً",[30,23014,23015],{},[37,23016,23017],{},"معضلة الجودة مقابل السرعة:",[49,23019,23020],{},[52,23021,23022],{},"يتوقع اللاعبون رسومات واقعية فوتوغرافية",[68,23024,23026],{"id":23025},"كيف-يغير-الذكاء-الاصطناعي-تطوير-الألعاب","كيف يغير الذكاء الاصطناعي تطوير الألعاب",[73,23028,23030],{"id":23029},"التوليد-الإجرائي-للمحتوى","التوليد الإجرائي للمحتوى",[30,23032,23033,23036],{},[37,23034,23035],{},"ما هو التوليد الإجرائي؟","\nهو استخدام خوارزميات لإنشاء محتوى لعبة عشوائي أو شبه عشوائي. في 2025، أصبح أكثر تطوراً مع الذكاء الاصطناعي.",[30,23038,23039],{},[37,23040,23041],{},"أمثلة حقيقية في 2025:",[30,23043,23044],{},[37,23045,23046],{},"1. إنشاء المستويات:",[49,23048,23049,23055,23061],{},[52,23050,23051,23054],{},[37,23052,23053],{},"No Man's Sky 2"," (2024): يولد كواكب فريدة باستخدام الذكاء الاصطناعي",[52,23056,23057,23060],{},[37,23058,23059],{},"Minecraft Legends",": يستخدم الذكاء الاصطناعي لإنشاء خرائط متنوعة",[52,23062,23063,23066],{},[37,23064,23065],{},"Hades 2",": يولد غرفاً إجرائية مع قصص متماسكة",[30,23068,23069],{},[37,23070,23071],{},"2. إنشاء الشخصيات:",[49,23073,23074,23080,23086],{},[52,23075,23076,23079],{},[37,23077,23078],{},"Cyberpunk 2077: Phantom Liberty",": يولد NPCs فريدين مع خلفيات ودوافع",[52,23081,23082,23085],{},[37,23083,23084],{},"Baldur's Gate 3 AI Mods",": ينشئ شخصيات مصاحبة ذكية",[52,23087,23088,23091],{},[37,23089,23090],{},"The Sims 5",": يولد سلوكيات واقعية للشخصيات",[30,23093,23094],{},[37,23095,23096],{},"3. إنشاء القصص:",[49,23098,23099,23105,23111],{},[52,23100,23101,23104],{},[37,23102,23103],{},"AI Dungeon 3",": يولد قصصاً تفاعلية",[52,23106,23107,23110],{},[37,23108,23109],{},"Choice of Games AI",": ينشئ روايات فرعية",[52,23112,23113,23116],{},[37,23114,23115],{},"Detroit: Become Human 2",": يولد خيارات حوار ديناميكية",[73,23118,23120],{"id":23119},"الفن-والأصول-المساعدة-بالذكاء-الاصطناعي","الفن والأصول المساعدة بالذكاء الاصطناعي",[30,23122,23123],{},[37,23124,23125],{},"أدوات الفن الرئيسية في 2025:",[30,23127,23128],{},[37,23129,23130],{},"1. Midjourney v6 & DALL-E 4:",[49,23132,23133,23136,23139],{},[52,23134,23135],{},"إنشاء فن تصوري بجودة AAA",[52,23137,23138],{},"توليد أسلوب فني متسق للألعاب",[52,23140,23141],{},"إنشاء أفكار مرئية سريعة",[30,23143,23144],{},[37,23145,23146],{},"2. Stable Diffusion Fine-tuned:",[49,23148,23149,23152,23155],{},[52,23150,23151],{},"نماذج مخصصة لألعاب محددة",[52,23153,23154],{},"توليد أصول متناسقة",[52,23156,23157],{},"تحويل النصوص إلى فن",[30,23159,23160],{},[37,23161,23162],{},"3. Artbreeder & Runway ML:",[49,23164,23165,23168,23171],{},[52,23166,23167],{},"مزج الأساليب الفنية",[52,23169,23170],{},"تحرير الفيديو بالذكاء الاصطناعي",[52,23172,23173],{},"إنشاء رسوم متحركة",[30,23175,23176],{},[37,23177,23178],{},"قصص نجاح حقيقية:",[30,23180,23181],{},[37,23182,23183],{},"استوديو صغير يبني لعبة AAA:",[49,23185,23186,23192,23198,23203],{},[52,23187,23188,23191],{},[37,23189,23190],{},"فريق:"," 5 أشخاص",[52,23193,23194,23197],{},[37,23195,23196],{},"الأدوات:"," Midjourney + Blender + Unreal Engine",[52,23199,23200,23202],{},[37,23201,1000],{}," لعبة بصرياً مذهلة، جمعت 2 مليون دولار على Kickstarter",[52,23204,23205,23208],{},[37,23206,23207],{},"الوقت الموفر:"," 80% من وقت إنشاء الأصول",[30,23210,23211],{},[37,23212,23213],{},"مطور مستقل ينشئ أصولاً احترافية:",[49,23215,23216,23221,23227],{},[52,23217,23218,23220],{},[37,23219,23196],{}," Stable Diffusion + ControlNet",[52,23222,23223,23226],{},[37,23224,23225],{},"الإنتاج:"," 100+ أصل فريد يومياً",[52,23228,23229,23232],{},[37,23230,23231],{},"الجودة:"," قابلة للمنافسة مع الأصول المصنوعة يدوياً",[73,23234,23236],{"id":23235},"الذكاء-الاصطناعي-في-البرمجة-والتصميم","الذكاء الاصطناعي في البرمجة والتصميم",[30,23238,23239],{},[37,23240,23241],{},"أدوات البرمجة:",[30,23243,23244],{},[37,23245,23246],{},"1. GitHub Copilot & Cursor:",[49,23248,23249,23252,23255],{},[52,23250,23251],{},"يكتب كود الألعاب تلقائياً",[52,23253,23254],{},"يولد خوارزميات ذكاء اصطناعي للألعاب",[52,23256,23257],{},"يصحح أخطاء البرمجة",[30,23259,23260],{},[37,23261,23262],{},"2. Unity AI Assistant:",[49,23264,23265,23268,23271],{},[52,23266,23267],{},"يولد سكريبتات C# لـ Unity",[52,23269,23270],{},"يحسن أداء اللعبة",[52,23272,23273],{},"يقترح تحسينات",[30,23275,23276],{},[37,23277,23278],{},"3. Unreal Engine AI Tools:",[49,23280,23281,23284,23287],{},[52,23282,23283],{},"يولد Blueprints بصرية",[52,23285,23286],{},"يحسن الإضاءة والتظليل",[52,23288,23289],{},"يحسن فيزياء اللعبة",[30,23291,23292],{},[37,23293,23294],{},"أمثلة التصميم بالذكاء الاصطناعي:",[30,23296,23297],{},[37,23298,23299],{},"تصميم المستويات:",[49,23301,23302,23305,23308],{},[52,23303,23304],{},"يولد تخطيطات مستويات متوازنة",[52,23306,23307],{},"يحلل ميكانيكا اللعب",[52,23309,23310],{},"يقترح تحسينات التوازن",[30,23312,23313],{},[37,23314,23315],{},"تصميم السلوك:",[49,23317,23318,23321,23324],{},[52,23319,23320],{},"يولد سلوكيات NPC ذكية",[52,23322,23323],{},"يحسن خوارزميات البحث عن المسار",[52,23325,23326],{},"ينشئ أعداء ديناميكيين",[68,23328,23330],{"id":23329},"هل-يقتل-الذكاء-الاصطناعي-الإبداع","هل يقتل الذكاء الاصطناعي الإبداع؟",[73,23332,23334],{"id":23333},"الحجج-المؤيدة-للتهديد","الحجج المؤيدة للتهديد",[30,23336,23337],{},[37,23338,23339],{},"1. فقدان المهارات التقليدية:",[49,23341,23342,23345,23348],{},[52,23343,23344],{},"الفنانون يفقدون مهارات الرسم التقليدية",[52,23346,23347],{},"المطورون يعتمدون على الأدوات التلقائية",[52,23349,23350],{},"التركيز على الإخراج بدلاً من العملية الإبداعية",[30,23352,23353],{},[37,23354,23355],{},"2. التجانس:",[49,23357,23358,23361,23364],{},[52,23359,23360],{},"الألعاب تبدو متشابهة",[52,23362,23363],{},"أنماط توليد متكررة",[52,23365,23366],{},"فقدان الهوية الفنية الفريدة",[30,23368,23369],{},[37,23370,23371],{},"3. الاعتماد على التكنولوجيا:",[49,23373,23374,23377,23380],{},[52,23375,23376],{},"الشركات تقلل من حجم الفرق",[52,23378,23379],{},"الوظائف تختفي",[52,23381,23382],{},"الإبداع يصبح صناعياً",[73,23384,23386],{"id":23385},"الحجج-المؤيدة-للتحسين","الحجج المؤيدة للتحسين",[30,23388,23389],{},[37,23390,23391],{},"1. ديمقرطة الإبداع:",[49,23393,23394,23397,23400],{},[52,23395,23396],{},"المطورون المستقلون يمكنهم إنشاء ألعاب AAA",[52,23398,23399],{},"تقليل الحواجز أمام الدخول",[52,23401,23402],{},"تنويع الأفكار والمنظورات",[30,23404,23405],{},[37,23406,23407],{},"2. توسيع الإمكانيات:",[49,23409,23410,23413,23416],{},[52,23411,23412],{},"أفكار مستحيلة سابقاً تصبح ممكنة",[52,23414,23415],{},"توليد أفكار إبداعية جديدة",[52,23417,23418],{},"دمج الذكاء الاصطناعي مع الإبداع البشري",[30,23420,23421],{},[37,23422,23423],{},"3. التركيز على الابتكار:",[49,23425,23426,23429,23432],{},[52,23427,23428],{},"المطورون يركزون على التصميم والقصة",[52,23430,23431],{},"الذكاء الاصطناعي يتعامل مع المهام المتكررة",[52,23433,23434],{},"زيادة الإنتاجية والتجريب",[68,23436,23438],{"id":23437},"الواقع-في-2025-الإبداع-المعزز-بالذكاء-الاصطناعي","الواقع في 2025: الإبداع المعزز بالذكاء الاصطناعي",[73,23440,23442],{"id":23441},"كيف-يعمل-التعاون-بين-البشر-والذكاء-الاصطناعي","كيف يعمل التعاون بين البشر والذكاء الاصطناعي",[30,23444,23445],{},[37,23446,23447],{},"نموذج الإبداع المعزز:",[441,23449,23452],{"className":23450,"code":23451,"language":446},[444],"الفكرة البشرية → الذكاء الاصطناعي يولد المتغيرات → \nالبشر يختارون ويحسنون → الذكاء الاصطناعي يصقل → \nالنتيجة النهائية\n",[448,23453,23451],{"__ignoreMap":16},[30,23455,23456],{},[37,23457,313],{},[30,23459,23460],{},[37,23461,23462],{},"في الفن:",[49,23464,23465,23468,23471,23474],{},[52,23466,23467],{},"فنان يرسم مخططاً أساسياً",[52,23469,23470],{},"الذكاء الاصطناعي يولد 50 متغيراً",[52,23472,23473],{},"الفنان يختار الأفضل ويحسنه",[52,23475,23476],{},"النتيجة: فن أفضل مما كان ممكناً وحده",[30,23478,23479],{},[37,23480,23481],{},"في البرمجة:",[49,23483,23484,23487,23490,23493],{},[52,23485,23486],{},"مطور يكتب منطق أساسي",[52,23488,23489],{},"الذكاء الاصطناعي يولد تحسينات",[52,23491,23492],{},"المطور يختبر ويعدل",[52,23494,23495],{},"النتيجة: كود أكثر كفاءة وأماناً",[30,23497,23498],{},[37,23499,23500],{},"في التصميم:",[49,23502,23503,23506,23509,23512],{},[52,23504,23505],{},"مصمم يحدد الميكانيكا",[52,23507,23508],{},"الذكاء الاصطناعي يولد مستويات",[52,23510,23511],{},"المصمم يعدل التوازن",[52,23513,23514],{},"النتيجة: تجارب لعب أكثر تنوعاً",[73,23516,23518],{"id":23517},"الوظائف-الجديدة-التي-خلقها-الذكاء-الاصطناعي","الوظائف الجديدة التي خلقها الذكاء الاصطناعي",[30,23520,23521],{},[37,23522,23523],{},"مهندسو الذكاء الاصطناعي للألعاب:",[49,23525,23526,23529,23532],{},[52,23527,23528],{},"تدريب النماذج على أسلوب اللعبة",[52,23530,23531],{},"تحسين خوارزميات التوليد",[52,23533,23534],{},"ضمان الجودة والتناسق",[30,23536,23537],{},[37,23538,23539],{},"محررو الذكاء الاصطناعي:",[49,23541,23542,23545,23548],{},[52,23543,23544],{},"تحرير مخرجات الذكاء الاصطناعي",[52,23546,23547],{},"دمج المحتوى المولد مع المحتوى البشري",[52,23549,23550],{},"الحفاظ على الرؤية الفنية",[30,23552,23553],{},[37,23554,23555],{},"مدربو النماذج:",[49,23557,23558,23561,23564],{},[52,23559,23560],{},"تدريب نماذج مخصصة للألعاب",[52,23562,23563],{},"تحسين دقة التوليد",[52,23565,23566],{},"تطوير أدوات جديدة",[68,23568,23570],{"id":23569},"التحديات-والمخاطر","التحديات والمخاطر",[73,23572,23574],{"id":23573},"المخاطر-الأخلاقية","المخاطر الأخلاقية",[30,23576,23577],{},[37,23578,23579],{},"1. حقوق الملكية الفكرية:",[49,23581,23582,23585,23588],{},[52,23583,23584],{},"من يملك المحتوى المولد بالذكاء الاصطناعي؟",[52,23586,23587],{},"هل يمكن سرقة أسلوب الفنانين؟",[52,23589,23590],{},"كيف نحمي الإبداع الأصلي؟",[30,23592,23593],{},[37,23594,23595],{},"2. التحيزات والتمييز:",[49,23597,23598,23601,23604],{},[52,23599,23600],{},"الذكاء الاصطناعي يعكس التحيزات في بيانات التدريب",[52,23602,23603],{},"تمثيل غير عادل للثقافات المختلفة",[52,23605,23606],{},"قضايا التنوع والشمولية",[30,23608,23609],{},[37,23610,23611],{},"3. التأثير على الوظائف:",[49,23613,23614,23617,23620],{},[52,23615,23616],{},"فقدان الوظائف التقليدية",[52,23618,23619],{},"الحاجة لمهارات جديدة",[52,23621,23622],{},"الفجوة الرقمية تتسع",[73,23624,23626],{"id":23625},"التحديات-الفنية","التحديات الفنية",[30,23628,23629],{},[37,23630,23631],{},"1. الجودة والتناسق:",[49,23633,23634,23637,23640],{},[52,23635,23636],{},"صعوبة الحفاظ على الجودة عبر المحتوى المولد",[52,23638,23639],{},"مشاكل التناسق في العوالم الكبيرة",[52,23641,23642],{},"الحاجة للإشراف البشري",[30,23644,23645],{},[37,23646,23647],{},"2. الأداء والتحسين:",[49,23649,23650,23653,23656],{},[52,23651,23652],{},"تكاليف الحوسبة للذكاء الاصطناعي",[52,23654,23655],{},"تأخير في التوليد",[52,23657,23658],{},"قيود الذاكرة والمعالجة",[30,23660,23661],{},[37,23662,23663],{},"3. الإدمان على الأدوات:",[49,23665,23666,23669,23672],{},[52,23667,23668],{},"الاعتماد المفرط على الذكاء الاصطناعي",[52,23670,23671],{},"فقدان المهارات الأساسية",[52,23673,23674],{},"صعوبة العمل بدون الأدوات",[68,23676,23678],{"id":23677},"المستقبل-الإبداع-المعزز-بالذكاء-الاصطناعي","المستقبل: الإبداع المعزز بالذكاء الاصطناعي",[73,23680,23682],{"id":23681},"الاتجاهات-الناشئة-لعام-2026","الاتجاهات الناشئة لعام 2026+",[30,23684,23685],{},[37,23686,23687],{},"1. الذكاء الاصطناعي التوليدي المتقدم:",[49,23689,23690,23693,23696],{},[52,23691,23692],{},"نماذج أكثر دقة وتحكماً",[52,23694,23695],{},"توليد محتوى ثلاثي الأبعاد",[52,23697,23698],{},"إنشاء قصص ديناميكية",[30,23700,23701],{},[37,23702,23703],{},"2. التعاون بين البشر والآلات:",[49,23705,23706,23709,23712],{},[52,23707,23708],{},"أدوات تصميم مشتركة",[52,23710,23711],{},"عمليات إبداعية هجينة",[52,23713,23714],{},"تعزيز المهارات البشرية",[30,23716,23717],{},[37,23718,23719],{},"3. ديمقرطة تطوير الألعاب:",[49,23721,23722,23725,23728],{},[52,23723,23724],{},"أدوات أكثر سهولة للمبتدئين",[52,23726,23727],{},"تقليل تكاليف التطوير",[52,23729,23730],{},"زيادة تنوع الألعاب",[73,23732,23734],{"id":23733},"نصائح-للمطورين-في-2025","نصائح للمطورين في 2025",[30,23736,23737],{},[37,23738,23739],{},"1. تعلم أدوات الذكاء الاصطناعي:",[49,23741,23742,23745,23748],{},[52,23743,23744],{},"Midjourney للفن",[52,23746,23747],{},"Stable Diffusion للأصول",[52,23749,23750],{},"Unity AI للبرمجة",[30,23752,23753],{},[37,23754,23755],{},"2. الحفاظ على المهارات البشرية:",[49,23757,23758,23761,23764],{},[52,23759,23760],{},"الاستمرار في ممارسة المهارات التقليدية",[52,23762,23763],{},"فهم أساسيات التصميم والفن",[52,23765,23766],{},"تطوير الحس الفني",[30,23768,23769],{},[37,23770,23771],{},"3. التركيز على الإبداع العالي المستوى:",[49,23773,23774,23777,23780],{},[52,23775,23776],{},"التصميم والقصة والتجربة",[52,23778,23779],{},"الابتكار في الميكانيكا",[52,23781,23782],{},"فهم احتياجات اللاعبين",[30,23784,23785],{},[37,23786,23787],{},"4. البقاء أخلاقياً:",[49,23789,23790,23793,23796],{},[52,23791,23792],{},"استخدام الذكاء الاصطناعي كأداة، لا بديلاً",[52,23794,23795],{},"الحفاظ على التنوع والشمولية",[52,23797,23798],{},"احترام حقوق الملكية الفكرية",[68,23800,7222],{"id":7222},[30,23802,23803],{},"في 2025، لم يقتل الذكاء الاصطناعي الإبداع في تطوير الألعاب - بل أعاد تعريفه. أصبح الإبداع أكثر سهولة وديمقراطية، لكنه يتطلب مهارات جديدة وفهماً أعمق للتكنولوجيا.",[30,23805,23806],{},"المطورون الناجحون في 2025 هم الذين:",[49,23808,23809,23812,23815,23818],{},[52,23810,23811],{},"يتقنون أدوات الذكاء الاصطناعي",[52,23813,23814],{},"يحافظون على مهاراتهم البشرية",[52,23816,23817],{},"يركزون على الإبداع العالي المستوى",[52,23819,23820],{},"يستخدمون الذكاء الاصطناعي لتعزيز رؤيتهم، لا استبدالها",[30,23822,23823],{},"المستقبل مشرق للإبداع في الألعاب. مع التقدم في الذكاء الاصطناعي، سنرى ألعاباً أكثر تنوعاً، إبداعاً، وإمكانية وصول. الذكاء الاصطناعي ليس نهاية الإبداع - بل بداية فصل جديد مثير.",[30,23825,23826,1256],{},[37,23827,23828],{},"الإبداع البشري + قوة الذكاء الاصطناعي = مستقبل لا حدود له.",{"title":16,"searchDepth":17,"depth":17,"links":23830},[23831,23834,23839,23843,23847,23851,23855],{"id":22962,"depth":1260,"text":22963,"children":23832},[23833],{"id":22966,"depth":17,"text":22967},{"id":23025,"depth":1260,"text":23026,"children":23835},[23836,23837,23838],{"id":23029,"depth":17,"text":23030},{"id":23119,"depth":17,"text":23120},{"id":23235,"depth":17,"text":23236},{"id":23329,"depth":1260,"text":23330,"children":23840},[23841,23842],{"id":23333,"depth":17,"text":23334},{"id":23385,"depth":17,"text":23386},{"id":23437,"depth":1260,"text":23438,"children":23844},[23845,23846],{"id":23441,"depth":17,"text":23442},{"id":23517,"depth":17,"text":23518},{"id":23569,"depth":1260,"text":23570,"children":23848},[23849,23850],{"id":23573,"depth":17,"text":23574},{"id":23625,"depth":17,"text":23626},{"id":23677,"depth":1260,"text":23678,"children":23852},[23853,23854],{"id":23681,"depth":17,"text":23682},{"id":23733,"depth":17,"text":23734},{"id":7222,"depth":1260,"text":7222},"استكشاف كيفية تحويل أدوات الذكاء الاصطناعي لتطوير الألعاب في 2025. من التوليد الإجرائي إلى الفن المساعد بالذكاء الاصطناعي، اكتشف ما إذا كان الذكاء الاصطناعي يعزز أو يهدد الإبداع في صناعة الألعاب.","https://images.unsplash.com/photo-1552820728-8b83bb6b773f?q=80&w=1200",{"excerpt":23859},{"type":13,"value":23860},[23861,23865,23867],[30,23862,22950,23863],{},[37,23864,22953],{},[30,23866,22956],{},[30,23868,22959],{},"/thkaa-astnaay-ibdaa-ttwyr-alaab-2025","2023-01-23",{"title":22945,"description":23856},"ذكاء-اصطناعي-إبداع-تطوير-ألعاب-2025",[2887,23874,23875,23876,23877,23878],"game-development","creativity","unity","unreal-engine","midjourney","6lHNLw5enn3h0WPzdASi8PJO5vO8VL8BPMpi_14BQHs",{"id":23881,"title":23882,"author":26,"body":23883,"category":19,"description":24047,"extension":7,"image":8253,"isDraft":1304,"isFeatured":1305,"locale":9,"meta":24048,"navigation":1305,"path":24054,"publishedAt":24055,"readingTime":2099,"seo":24056,"stem":24057,"tags":24058,"updatedAt":1634,"__hash__":24063},"articles_ar/رحلة-مطور-عربي-مستقل-التحديات-والفرص.md","رحلة مطور عربي مستقل: التحديات والفرص",{"type":13,"value":23884,"toc":24040},[23885,23888,23892,23895,23899,23937,23941,23944,23976,23980,24030,24034,24037],[30,23886,23887],{},"في هذا المقال، أشارككم تجربتي كمطور مستقل في العالم العربي، وأبرز التحديات التي واجهتها، بالإضافة إلى نصائح عملية للنجاح في هذا المجال المليء بالفرص.",[68,23889,23891],{"id":23890},"بداية-الرحلة-من-الوظيفة-إلى-الاستقلالية","بداية الرحلة: من الوظيفة إلى الاستقلالية",[30,23893,23894],{},"كان قرار ترك الوظيفة التقليدية والانطلاق في عالم العمل الحر بمثابة قفزة كبيرة. كان الدافع الأساسي هو الرغبة في بناء مشاريع خاصة، التحكم في وقتي، واختيار المشاريع التي أؤمن بها. لكن الطريق لم يكن مفروشًا بالورود.",[68,23896,23898],{"id":23897},"أبرز-التحديات-التي-تواجه-المطور-المستقل-العربي","أبرز التحديات التي تواجه المطور المستقل العربي",[913,23900,23901,23907,23913,23919,23925,23931],{},[52,23902,23903,23906],{},[37,23904,23905],{},"إيجاد العملاء والمشاريع:"," في البداية، كان الحصول على مشاريع مستمرة هو التحدي الأكبر. يتطلب الأمر بناء شبكة علاقات قوية وتسويق فعال للذات.",[52,23908,23909,23912],{},[37,23910,23911],{},"التعامل مع الجوانب المالية:"," إدارة الدخل، تحديد الأسعار، وإصدار الفواتير كانت مهام جديدة تحتاج إلى تعلم.",[52,23914,23915,23918],{},[37,23916,23917],{},"العزلة ونقص الدعم:"," العمل منفرداً قد يؤدي إلى الشعور بالعزلة. من المهم بناء مجتمع داعم من المطورين الآخرين.",[52,23920,23921,23924],{},[37,23922,23923],{},"التسويف وإدارة الوقت:"," بدون مدير مباشر، الانضباط الذاتي وإدارة الوقت يصبحان عاملين حاسمين للإنتاجية.",[52,23926,23927,23930],{},[37,23928,23929],{},"التطور المستمر للمهارات:"," سوق التكنولوجيا متغير باستمرار، ويجب على المطور المستقل أن يظل على اطلاع دائم بأحدث التقنيات.",[52,23932,23933,23936],{},[37,23934,23935],{},"الاختلافات الثقافية واللغوية:"," عند التعامل مع عملاء من ثقافات مختلفة، قد تنشأ بعض التحديات في التواصل وفهم المتطلبات.",[68,23938,23940],{"id":23939},"الفرص-المتاحة-للمطور-العربي-المستقل","الفرص المتاحة للمطور العربي المستقل",[30,23942,23943],{},"رغم التحديات، يوفر العمل الحر فرصًا كبيرة للمطورين العرب:",[49,23945,23946,23952,23958,23964,23970],{},[52,23947,23948,23951],{},[37,23949,23950],{},"الوصول إلى السوق العالمي:"," الإنترنت يفتح الأبواب للعمل مع عملاء من جميع أنحاء العالم.",[52,23953,23954,23957],{},[37,23955,23956],{},"مرونة في الوقت والمكان:"," القدرة على العمل من أي مكان وفي الأوقات التي تناسبك.",[52,23959,23960,23963],{},[37,23961,23962],{},"إمكانية تحقيق دخل أعلى:"," مع الخبرة وبناء سمعة جيدة، يمكن تحقيق دخل يتجاوز راتب الوظيفة التقليدية.",[52,23965,23966,23969],{},[37,23967,23968],{},"بناء مشاريع خاصة:"," العمل الحر يوفر الوقت والموارد (أحيانًا) لتطوير أفكارك الخاصة وتحويلها إلى منتجات.",[52,23971,23972,23975],{},[37,23973,23974],{},"تطوير المهارات بشكل أسرع:"," التعرض لمشاريع متنوعة يساعد على اكتساب خبرات جديدة بسرعة.",[68,23977,23979],{"id":23978},"نصائح-للنجاح-كمطور-عربي-مستقل","نصائح للنجاح كمطور عربي مستقل",[913,23981,23982,23988,23994,24000,24006,24012,24018,24024],{},[52,23983,23984,23987],{},[37,23985,23986],{},"ابنِ معرض أعمال قوي (Portfolio):"," عرض مشاريعك السابقة هو أفضل وسيلة لإقناع العملاء المحتملين.",[52,23989,23990,23993],{},[37,23991,23992],{},"تخصص في مجال معين:"," التخصص يجعلك خبيرًا مطلوبًا في مجالك ويسهل عملية التسويق.",[52,23995,23996,23999],{},[37,23997,23998],{},"استثمر في بناء شبكة علاقاتك:"," شارك في المجتمعات التقنية، احضر الفعاليات (حتى الافتراضية)، وتواصل مع مطورين آخرين.",[52,24001,24002,24005],{},[37,24003,24004],{},"طور مهاراتك الناعمة (Soft Skills):"," مهارات التواصل، التفاوض، وإدارة المشاريع لا تقل أهمية عن المهارات التقنية.",[52,24007,24008,24011],{},[37,24009,24010],{},"لا تتوقف عن التعلم:"," خصص وقتًا يوميًا أو أسبوعيًا لتعلم تقنيات جديدة وتحسين مهاراتك الحالية.",[52,24013,24014,24017],{},[37,24015,24016],{},"استخدم منصات العمل الحر:"," مواقع مثل Upwork, Freelancer, أو منصات عربية مثل \"مستقل\" و \"خمسات\" يمكن أن تكون بداية جيدة.",[52,24019,24020,24023],{},[37,24021,24022],{},"اهتم بصحتك النفسية والجسدية:"," العمل الحر قد يكون مرهقًا. خصص وقتًا للراحة والأنشطة التي تستمتع بها.",[52,24025,24026,24029],{},[37,24027,24028],{},"كن صبورًا ومثابرًا:"," النجاح في العمل الحر يتطلب وقتًا وجهدًا. لا تيأس من المحاولات الأولى.",[68,24031,24033],{"id":24032},"مستقبل-المطور-المستقل-في-العالم-العربي","مستقبل المطور المستقل في العالم العربي",[30,24035,24036],{},"مع تزايد الاعتماد على التكنولوجيا والتحول الرقمي في المنطقة، يزداد الطلب على المطورين المهرة. العمل الحر يوفر مسارًا واعدًا للمطورين العرب لتحقيق طموحاتهم المهنية والمادية، والمساهمة في بناء مستقبل تقني أفضل للمنطقة.",[30,24038,24039],{},"أتمنى أن تكون هذه التجربة والنصائح مفيدة لكل من يفكر في خوض غمار العمل الحر. الطريق مليء بالتحديات، ولكنه أيضًا مليء بالفرص لمن هم على استعداد للعمل الجاد والمثابرة.",{"title":16,"searchDepth":17,"depth":17,"links":24041},[24042,24043,24044,24045,24046],{"id":23890,"depth":1260,"text":23891},{"id":23897,"depth":1260,"text":23898},{"id":23939,"depth":1260,"text":23940},{"id":23978,"depth":1260,"text":23979},{"id":24032,"depth":1260,"text":24033},"تجربة شخصية حول العمل كمطور مستقل في العالم العربي، مع نصائح للنجاح والتغلب على التحديات.",{"series":24049,"seriesIndex":1786,"excerpt":24050},"arabic-dev-journey",{"type":13,"value":24051},[24052],[30,24053,23887],{},"/rhlh-mtwr-arby-mstql-althdyat-walfrs","2024-05-15",{"title":23882,"description":24047},"رحلة-مطور-عربي-مستقل-التحديات-والفرص",[1643,24059,24060,24061,24062],"indie-hacking","freelancing","ريادة-الأعمال","العمل-الحر","SPkZOnbbFZARnv5w-xHmJh-Wfjr4UZLbkd0yLAAwxIs",{"id":24065,"title":24066,"author":26,"body":24067,"category":19,"description":25589,"extension":7,"image":25590,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":25591,"navigation":1305,"path":25602,"publishedAt":25603,"readingTime":1635,"seo":25604,"stem":25605,"tags":25606,"updatedAt":1342,"__hash__":25607},"articles_ar/كم-يستغرق-تعلم-javascript-2025.md","كم يستغرق تعلم JavaScript في 2025؟ جدول زمني واقعي",{"type":13,"value":24068,"toc":25549},[24069,24072,24078,24081,24085,24169,24173,24176,24181,24194,24199,24216,24221,24238,24243,24262,24267,24282,24286,24290,24296,24300,24320,24325,24338,24342,24356,24362,24366,24371,24375,24398,24402,24416,24420,24431,24436,24440,24445,24449,24463,24468,24476,24480,24484,24489,24494,24520,24524,24538,24543,24554,24559,24563,24568,24572,24588,24592,24605,24609,24613,24618,24622,24641,24645,24659,24663,24667,24672,24676,24695,24699,24712,24716,24720,24724,24729,24740,24745,24759,24763,24768,24782,24787,24801,24806,24820,24824,24829,24843,24848,24865,24870,24887,24892,24906,24910,24915,24923,24928,24936,24941,24947,24951,24955,24960,24977,24982,24996,25001,25018,25022,25027,25059,25064,25087,25091,25096,25120,25125,25150,25154,25158,25164,25168,25182,25186,25191,25195,25206,25210,25221,25225,25230,25234,25245,25249,25254,25258,25269,25273,25279,25302,25307,25324,25329,25346,25350,25354,25360,25364,25384,25388,25393,25407,25412,25426,25430,25434,25439,25455,25460,25471,25476,25490,25494,25497,25502,25533,25536,25546],[30,24070,24071],{},"تعلم JavaScript في 2025 مختلف عن السنوات القليلة الماضية. مع الأطر الحديثة مثل React وVue، أصبح TypeScript المعيار، وأدوات الذكاء الاصطناعي تسرع التعلم، تطور مسار إتقان JavaScript بشكل كبير.",[30,24073,24074,24077],{},[37,24075,24076],{},"الإجابة القصيرة:"," 3-6 أشهر لبناء مشاريع حقيقية، 1-2 سنوات لتصبح جاهزاً للوظيفة، ومدى الحياة للإتقان التام.",[30,24079,24080],{},"لكن دعنا نقسم هذا بشكل واقعي بناءً على نقطة البداية، نهج التعلم، وأهدافك المهنية. يشمل هذا الدليل الأدوات الحديثة (2025)، الجداول الزمنية الواقعية، وخارطة طريق شهرية.",[68,24082,24084],{"id":24083},"إجابة-سريعة-الجدول-الزمني-حسب-نقطة-البداية","إجابة سريعة: الجدول الزمني حسب نقطة البداية",[507,24086,24087,24103],{},[510,24088,24089],{},[513,24090,24091,24094,24097,24100],{},[516,24092,24093],{},"خلفيتك",[516,24095,24096],{},"الوقت لبناء المشاريع",[516,24098,24099],{},"الوقت لتصبح جاهزاً للوظيفة",[516,24101,24102],{},"ما ستتعلمه",[523,24104,24105,24121,24137,24153],{},[513,24106,24107,24112,24115,24118],{},[528,24108,24109],{},[37,24110,24111],{},"مبتدئ تماماً",[528,24113,24114],{},"4-6 أشهر (10-15 ساعة/أسبوع)",[528,24116,24117],{},"12-18 شهر",[528,24119,24120],{},"HTML، CSS، JavaScript، React، Node.js",[513,24122,24123,24128,24131,24134],{},[528,24124,24125],{},[37,24126,24127],{},"تعرف لغة أخرى",[528,24129,24130],{},"2-3 أشهر (10-15 ساعة/أسبوع)",[528,24132,24133],{},"6-9 أشهر",[528,24135,24136],{},"صيغة JavaScript، غير متزامن، الأطر",[513,24138,24139,24144,24147,24150],{},[528,24140,24141],{},[37,24142,24143],{},"تعرف HTML/CSS",[528,24145,24146],{},"3-4 أشهر (10-15 ساعة/أسبوع)",[528,24148,24149],{},"8-12 شهر",[528,24151,24152],{},"أساسيات JavaScript، الأطر",[513,24154,24155,24160,24163,24166],{},[528,24156,24157],{},[37,24158,24159],{},"معسكر تدريبي مكثف",[528,24161,24162],{},"3 أشهر (40+ ساعة/أسبوع)",[528,24164,24165],{},"3-6 أشهر",[528,24167,24168],{},"JavaScript كامل الواجهات",[68,24170,24172],{"id":24171},"ما-يعني-تعلم-javascript-فعلياً-في-2025","ما يعني \"تعلم JavaScript\" فعلياً في 2025",[30,24174,24175],{},"هناك مستويات مختلفة من معرفة JavaScript:",[30,24177,24178],{},[37,24179,24180],{},"المستوى 1: الأساسيات (1-2 أشهر)",[49,24182,24183,24186,24188,24191],{},[52,24184,24185],{},"المتغيرات، الوظائف، الحلقات، المصفوفات، الكائنات",[52,24187,17050],{},[52,24189,24190],{},"معالجة الأحداث الأساسية",[52,24192,24193],{},"يمكن إضافة التفاعل للمواقع",[30,24195,24196],{},[37,24197,24198],{},"المستوى 2: المتوسط (3-4 أشهر)",[49,24200,24201,24204,24207,24210,24213],{},[52,24202,24203],{},"ميزات ES6+ (دوال الأسهم، تفكيك، وحدات)",[52,24205,24206],{},"JavaScript غير متزامن (Promises، async/await)",[52,24208,24209],{},"Fetch API والعمل مع JSON",[52,24211,24212],{},"حل المشكلات الخوارزمية الأساسية",[52,24214,24215],{},"يمكن بناء تطبيقات تفاعلية بسيطة",[30,24217,24218],{},[37,24219,24220],{},"المستوى 3: جاهز للأطر (6 أشهر)",[49,24222,24223,24226,24229,24232,24235],{},[52,24224,24225],{},"فهم عميق لأساسيات JavaScript",[52,24227,24228],{},"أساسيات TypeScript",[52,24230,24231],{},"أدوات البناء الحديثة (Vite، npm/pnpm)",[52,24233,24234],{},"Git ومراقبة الإصدارات",[52,24236,24237],{},"يمكن تعلم React/Vue بفعالية",[30,24239,24240],{},[37,24241,24242],{},"المستوى 4: جاهز للوظيفة (12 شهر)",[49,24244,24245,24248,24251,24253,24256,24259],{},[52,24246,24247],{},"إتقان React أو Vue",[52,24249,24250],{},"Node.js وExpress",[52,24252,18686],{},[52,24254,24255],{},"الاختبار (Vitest، Jest)",[52,24257,24258],{},"النشر وCI/CD",[52,24260,24261],{},"يمكن بناء تطبيقات كاملة الواجهات",[30,24263,24264],{},[37,24265,24266],{},"المستوى 5: مستوى كبير (2-5 سنوات)",[49,24268,24269,24272,24274,24276,24279],{},[52,24270,24271],{},"الأنماط والمعمارية المتقدمة",[52,24273,17260],{},[52,24275,22325],{},[52,24277,24278],{},"توجيه الآخرين",[52,24280,24281],{},"تصميم النظام",[68,24283,24285],{"id":24284},"خارطة-طريق-واقعية-شهرية-مبتدئ-تماماً","خارطة طريق واقعية شهرية (مبتدئ تماماً)",[73,24287,24289],{"id":24288},"الأشهر-1-2-أساسيات-javascript","الأشهر 1-2: أساسيات JavaScript",[30,24291,24292,24295],{},[37,24293,24294],{},"التركيز:"," الصيغة الأساسية ومفاهيم البرمجة الأساسية",[30,24297,24298],{},[37,24299,17136],{},[49,24301,24302,24305,24308,24311,24314,24317],{},[52,24303,24304],{},"المتغيرات (let، const)",[52,24306,24307],{},"أنواع البيانات (سلاسل، أرقام، منطقي، مصفوفات، كائنات)",[52,24309,24310],{},"الوظائف ودوال الأسهم",[52,24312,24313],{},"العبارات الشرطية (if/else، switch)",[52,24315,24316],{},"الحلقات (for، while، forEach)",[52,24318,24319],{},"معالجة DOM الأساسية",[30,24321,24322],{},[37,24323,24324],{},"مشاريع التدريب:",[49,24326,24327,24330,24332,24335],{},[52,24328,24329],{},"تطبيق قائمة المهام",[52,24331,16788],{},[52,24333,24334],{},"مولد اقتباسات عشوائية",[52,24336,24337],{},"لعبة بسيطة (حجر ورق مقص)",[30,24339,24340],{},[37,24341,17087],{},[49,24343,24344,24347,24350,24353],{},[52,24345,24346],{},"دورة freeCodeCamp JavaScript (مجانية)",[52,24348,24349],{},"JavaScript.info (مجاني، شامل)",[52,24351,24352],{},"Codecademy JavaScript (تفاعلي)",[52,24354,24355],{},"ChatGPT لشرح المفاهيم",[30,24357,24358,24361],{},[37,24359,24360],{},"الالتزام الزمني:"," 10-15 ساعة/أسبوع",[73,24363,24365],{"id":24364},"الشهر-3-es6-وjavascript-الحديث","الشهر 3: ES6+ وJavaScript الحديث",[30,24367,24368,24370],{},[37,24369,24294],{}," ميزات JavaScript الحديثة المستخدمة في 2025",[30,24372,24373],{},[37,24374,17136],{},[49,24376,24377,24380,24383,24386,24389,24392,24395],{},[52,24378,24379],{},"القوالب الحرفية",[52,24381,24382],{},"التفكيك",[52,24384,24385],{},"عوامل الانتشار/الباقي",[52,24387,24388],{},"طرق المصفوفات (map، filter، reduce)",[52,24390,24391],{},"Promises وasync/await",[52,24393,24394],{},"الوحدات (import/export)",[52,24396,24397],{},"Fetch API لطلبات HTTP",[30,24399,24400],{},[37,24401,24324],{},[49,24403,24404,24407,24410,24413],{},[52,24405,24406],{},"تطبيق الطقس باستخدام API",[52,24408,24409],{},"تطبيق البحث عن الأفلام (TMDB API)",[52,24411,24412],{},"عارض ملف GitHub",[52,24414,24415],{},"محول العملات",[30,24417,24418],{},[37,24419,23196],{},[49,24421,24422,24425,24428],{},[52,24423,24424],{},"VS Code مع الإضافات",[52,24426,24427],{},"Chrome DevTools",[52,24429,24430],{},"GitHub لمراقبة الإصدارات",[30,24432,24433,24435],{},[37,24434,24360],{}," 12-18 ساعة/أسبوع",[73,24437,24439],{"id":24438},"الشهر-4-أساسيات-typescript","الشهر 4: أساسيات TypeScript",[30,24441,24442,24444],{},[37,24443,24294],{}," إضافة أمان الأنواع لـ JavaScript الخاص بك (معيار الصناعة في 2025)",[30,24446,24447],{},[37,24448,17136],{},[49,24450,24451,24454,24457,24460],{},[52,24452,24453],{},"الأنواع الأساسية (string، number، boolean)",[52,24455,24456],{},"الواجهات والأنواع",[52,24458,24459],{},"كتابة الوظائف",[52,24461,24462],{},"الأنواع العامة (الأساسيات)",[30,24464,24465],{},[37,24466,24467],{},"التدريب:",[49,24469,24470,24473],{},[52,24471,24472],{},"تحويل المشاريع السابقة إلى TypeScript",[52,24474,24475],{},"بناء مشاريع جديدة بـ TypeScript من البداية",[30,24477,24478,24361],{},[37,24479,24360],{},[73,24481,24483],{"id":24482},"الأشهر-5-6-أساسيات-react-أو-vue","الأشهر 5-6: أساسيات React أو Vue",[30,24485,24486,24488],{},[37,24487,24294],{}," اختر إطار عمل حديث واحد (React أكثر شيوعاً للوظائف)",[30,24490,24491],{},[37,24492,24493],{},"مسار React:",[49,24495,24496,24499,24502,24505,24508,24511,24514,24517],{},[52,24497,24498],{},"صيغة JSX",[52,24500,24501],{},"المكونات والخصائص",[52,24503,24504],{},"الحالة مع useState",[52,24506,24507],{},"التأثيرات مع useEffect",[52,24509,24510],{},"الرسم الشرطي",[52,24512,24513],{},"القوائم والمفاتيح",[52,24515,24516],{},"النماذج والمكونات المتحكم بها",[52,24518,24519],{},"الخطافات المخصصة",[30,24521,24522],{},[37,24523,24324],{},[49,24525,24526,24529,24532,24535],{},[52,24527,24528],{},"متتبع المصروفات",[52,24530,24531],{},"باحث الوصفات",[52,24533,24534],{},"كتالوج منتجات التجارة الإلكترونية",[52,24536,24537],{},"نسخة تغذية وسائل التواصل الاجتماعي",[30,24539,24540],{},[37,24541,24542],{},"الأدوات الحديثة:",[49,24544,24545,24548,24551],{},[52,24546,24547],{},"Vite (خادم تطوير سريع)",[52,24549,24550],{},"React DevTools",[52,24552,24553],{},"Tailwind CSS للتصميم",[30,24555,24556,24558],{},[37,24557,24360],{}," 15-20 ساعة/أسبوع",[73,24560,24562],{"id":24561},"الأشهر-7-8-react-المتقدم-وإدارة-الحالة","الأشهر 7-8: React المتقدم وإدارة الحالة",[30,24564,24565,24567],{},[37,24566,24294],{}," مهارات React جاهزة للإنتاج",[30,24569,24570],{},[37,24571,17136],{},[49,24573,24574,24577,24580,24583,24586],{},[52,24575,24576],{},"React Router للتنقل",[52,24578,24579],{},"Context API",[52,24581,24582],{},"Zustand أو Jotai (إدارة الحالة الحديثة)",[52,24584,24585],{},"React Query لحالة الخادم",[52,24587,17260],{},[30,24589,24590],{},[37,24591,24324],{},[49,24593,24594,24597,24600,24603],{},[52,24595,24596],{},"تطبيق CRUD كامل مع التوجيه",[52,24598,24599],{},"لوحة تحكم مع الرسوم البيانية",[52,24601,24602],{},"تطبيق دردشة فورية (مع Firebase)",[52,24604,16801],{},[30,24606,24607,24558],{},[37,24608,24360],{},[73,24610,24612],{"id":24611},"الأشهر-9-10-nodejs-والخلفية","الأشهر 9-10: Node.js والخلفية",[30,24614,24615,24617],{},[37,24616,24294],{}," JavaScript كامل الواجهات",[30,24619,24620],{},[37,24621,17136],{},[49,24623,24624,24627,24630,24633,24636,24639],{},[52,24625,24626],{},"أساسيات Node.js",[52,24628,24629],{},"إطار عمل Express.js",[52,24631,24632],{},"تصميم RESTful API",[52,24634,24635],{},"قاعدة البيانات (PostgreSQL أو MongoDB)",[52,24637,24638],{},"المصادقة (JWT)",[52,24640,18736],{},[30,24642,24643],{},[37,24644,24324],{},[49,24646,24647,24650,24653,24656],{},[52,24648,24649],{},"REST API لمشاريع الواجهة الأمامية",[52,24651,24652],{},"نظام المصادقة",[52,24654,24655],{},"خلفية مدونة مع عمليات CRUD",[52,24657,24658],{},"خدمة رفع الملفات",[30,24660,24661,24558],{},[37,24662,24360],{},[73,24664,24666],{"id":24665},"الأشهر-11-12-الاختبار-النشر-والمحفظة","الأشهر 11-12: الاختبار، النشر والمحفظة",[30,24668,24669,24671],{},[37,24670,24294],{}," ممارسات التطوير المهنية",[30,24673,24674],{},[37,24675,17136],{},[49,24677,24678,24681,24684,24687,24690,24693],{},[52,24679,24680],{},"Vitest أو Jest للاختبار",[52,24682,24683],{},"مكتبة اختبار React",[52,24685,24686],{},"أساسيات Docker",[52,24688,24689],{},"CI/CD مع GitHub Actions",[52,24691,24692],{},"النشر (Vercel، Netlify، Railway)",[52,24694,18268],{},[30,24696,24697],{},[37,24698,24324],{},[49,24700,24701,24704,24707,24710],{},[52,24702,24703],{},"إضافة اختبارات للمشاريع الموجودة",[52,24705,24706],{},"نشر جميع المشاريع",[52,24708,24709],{},"بناء محفظة مثيرة للإعجاب",[52,24711,17276],{},[30,24713,24714,24558],{},[37,24715,24360],{},[68,24717,24719],{"id":24718},"العوامل-التي-تؤثر-على-سرعة-التعلم","العوامل التي تؤثر على سرعة التعلم",[73,24721,24723],{"id":24722},"_1-الخبرة-البرمجية-السابقة","1. الخبرة البرمجية السابقة",[30,24725,24726],{},[37,24727,24728],{},"لا خبرة برمجية:",[49,24730,24731,24734,24737],{},[52,24732,24733],{},"الجدول الزمني: 12-18 شهر لتصبح جاهزاً للوظيفة",[52,24735,24736],{},"ستحتاج لتعلم مفاهيم البرمجة وصيغة JavaScript",[52,24738,24739],{},"توقع الكثير من لحظات \"أها!\" عندما تفهم المفاهيم",[30,24741,24742],{},[37,24743,24744],{},"لديك خبرة برمجية:",[49,24746,24747,24750,24753,24756],{},[52,24748,24749],{},"الجدول الزمني: 6-9 أشهر لتصبح جاهزاً للوظيفة",[52,24751,24752],{},"اختلافات الصيغة سهلة التعلم",[52,24754,24755],{},"التركيز على ميزات JavaScript المحددة (prototypes، async، DOM)",[52,24757,24758],{},"TypeScript سيشعر طبيعياً إذا كنت تعرف اللغات المكتوبة",[73,24760,24762],{"id":24761},"_2-الالتزام-الزمني","2. الالتزام الزمني",[30,24764,24765],{},[37,24766,24767],{},"دوام جزئي (10-15 ساعة/أسبوع):",[49,24769,24770,24773,24776,24779],{},[52,24771,24772],{},"12-18 شهر لتصبح جاهزاً للوظيفة",[52,24774,24775],{},"مستدام طويل الأمد",[52,24777,24778],{},"جيد للمحترفين العاملين",[52,24780,24781],{},"خطر التقدم البطيء ونسيان المفاهيم",[30,24783,24784],{},[37,24785,24786],{},"دوام كامل (40+ ساعة/أسبوع - نمط المعسكر التدريبي):",[49,24788,24789,24792,24795,24798],{},[52,24790,24791],{},"3-6 أشهر لتصبح جاهزاً للوظيفة",[52,24793,24794],{},"مكثف لكنه فعال",[52,24796,24797],{},"يتطلب التزام كامل",[52,24799,24800],{},"يمكن أن يؤدي للإرهاق إذا لم تكن حذراً",[30,24802,24803],{},[37,24804,24805],{},"الأمثل (15-25 ساعة/أسبوع):",[49,24807,24808,24811,24814,24817],{},[52,24809,24810],{},"8-12 شهر لتصبح جاهزاً للوظيفة",[52,24812,24813],{},"توازن بين السرعة والاحتفاظ",[52,24815,24816],{},"وقت للتدريب والمراجعة",[52,24818,24819],{},"النهج الأكثر توصية",[73,24821,24823],{"id":24822},"_3-أسلوب-التعلم-والموارد","3. أسلوب التعلم والموارد",[30,24825,24826],{},[37,24827,24828],{},"التعلم الذاتي (باستخدام الموارد المجانية):",[49,24830,24831,24834,24837,24840],{},[52,24832,24833],{},"المزايا: مجاني، جدول زمني مرن، ذاتي السرعة",[52,24835,24836],{},"العيوب: يتطلب الانضباط، لا منهج منظم",[52,24838,24839],{},"الأفضل لـ: المتعلمين ذوي الدوافع الذاتية",[52,24841,24842],{},"التكلفة: 0-100 دولار (كتب/دورات اختيارية)",[30,24844,24845],{},[37,24846,24847],{},"الدورات عبر الإنترنت:",[49,24849,24850,24853,24856,24859,24862],{},[52,24851,24852],{},"المزايا: منظم، ميسور التكلفة، شامل",[52,24854,24855],{},"العيوب: مساءلة أقل، لا توجيه",[52,24857,24858],{},"الأفضل لـ: معظم الناس",[52,24860,24861],{},"التكلفة: 20-200 دولار/شهر",[52,24863,24864],{},"أمثلة: Frontend Masters، Zero to Mastery، Scrimba",[30,24866,24867],{},[37,24868,24869],{},"المعسكرات التدريبية:",[49,24871,24872,24875,24878,24881,24884],{},[52,24873,24874],{},"المزايا: مكثف، منظم، مساعدة في توظيف",[52,24876,24877],{},"العيوب: مكلف، مكثف جداً",[52,24879,24880],{},"الأفضل لـ: مغيري المهنة مع المدخرات",[52,24882,24883],{},"التكلفة: 7,000-20,000 دولار",[52,24885,24886],{},"أمثلة: Hack Reactor، App Academy، Fullstack Academy",[30,24888,24889],{},[37,24890,24891],{},"درجة جامعية في علوم الحاسوب:",[49,24893,24894,24897,24900,24903],{},[52,24895,24896],{},"المزايا: أساسيات عميقة، مصداقية",[52,24898,24899],{},"العيوب: بطيء، مكلف، غير مركز على JavaScript",[52,24901,24902],{},"الأفضل لـ: استثمار طويل الأمد في علوم الحاسوب",[52,24904,24905],{},"التكلفة: 40,000-200,000 دولار",[73,24907,24909],{"id":24908},"_4-جودة-التدريب","4. جودة التدريب",[30,24911,24912],{},[37,24913,24914],{},"التعلم السلبي (مشاهدة الدروس):",[49,24916,24917,24920],{},[52,24918,24919],{},"التقدم: بطيء، احتفاظ ضعيف",[52,24921,24922],{},"تشعر أنك تتعلم لكن لا يمكنك بناء أي شيء",[30,24924,24925],{},[37,24926,24927],{},"التعلم النشط (بناء المشاريع):",[49,24929,24930,24933],{},[52,24931,24932],{},"التقدم: سريع، فهم عميق",[52,24934,24935],{},"يعزز المفاهيم من خلال التطبيق",[30,24937,24938],{},[37,24939,24940],{},"النهج الأفضل:",[441,24942,24945],{"className":24943,"code":24944,"language":446},[444],"1. شاهد/اقرأ المفهوم (20% من الوقت)\n2. بنِ مثال صغير (30% من الوقت)\n3. بنِ مشروع باستخدام المفهوم (50% من الوقت)\n",[448,24946,24944],{"__ignoreMap":16},[68,24948,24950],{"id":24949},"الأدوات-الحديثة-التي-تسرع-التعلم-2025","الأدوات الحديثة التي تسرع التعلم (2025)",[73,24952,24954],{"id":24953},"مساعدي-البرمجة-بالذكاء-الاصطناعي","مساعدي البرمجة بالذكاء الاصطناعي",[30,24956,24957,24959],{},[37,24958,7476],{}," (10 دولار/شهر)",[49,24961,24962,24965,24968,24971],{},[52,24963,24964],{},"يكمل الكود أثناء الكتابة",[52,24966,24967],{},"يشرح مقتطفات الكود",[52,24969,24970],{},"يولد كود boilerplate",[52,24972,24973,24976],{},[37,24974,24975],{},"تحذير:"," لا تعتمد عليه كثيراً مبكراً (تعلم الأساسيات أولاً)",[30,24978,24979],{},[37,24980,24981],{},"ChatGPT/Claude",[49,24983,24984,24987,24990,24993],{},[52,24985,24986],{},"يشرح المفاهيم بمصطلحات بسيطة",[52,24988,24989],{},"يصحح الأخطاء",[52,24991,24992],{},"يوفر أمثلة كود",[52,24994,24995],{},"يجيب على أسئلة \"لماذا\"",[30,24997,24998],{},[37,24999,25000],{},"استخدم الذكاء الاصطناعي بحكمة:",[49,25002,25003,25006,25009,25012,25015],{},[52,25004,25005],{},"✅ اسأل عن الشرح",[52,25007,25008],{},"✅ احصل على المساعدة عند تصحيح الأخطاء",[52,25010,25011],{},"✅ تعلم النهج البديلة",[52,25013,25014],{},"❌ نسخ ولصق بدون فهم",[52,25016,25017],{},"❌ تخطي تعلم الأساسيات",[73,25019,25021],{"id":25020},"منصات-التعلم-الحديثة-2025","منصات التعلم الحديثة (2025)",[30,25023,25024],{},[37,25025,25026],{},"مجاني:",[49,25028,25029,25035,25041,25047,25053],{},[52,25030,25031,25034],{},[37,25032,25033],{},"freeCodeCamp"," - شامل، مبني على المشاريع",[52,25036,25037,25040],{},[37,25038,25039],{},"JavaScript.info"," - أفضل مرجع JavaScript",[52,25042,25043,25046],{},[37,25044,25045],{},"Scrimba"," - screencasts تفاعلية (طبقة مجانية)",[52,25048,25049,25052],{},[37,25050,25051],{},"MDN Web Docs"," - المرجع الرسمي",[52,25054,25055,25058],{},[37,25056,25057],{},"YouTube"," - Fireship، Web Dev Simplified، Traversy Media",[30,25060,25061],{},[37,25062,25063],{},"مدفوع (يستحق العناء):",[49,25065,25066,25071,25076,25082],{},[52,25067,25068,25070],{},[37,25069,7828],{}," (39 دولار/شهر) - دورات عميقة، خبراء الصناعة",[52,25072,25073,25075],{},[37,25074,25045],{}," (20 دولار/شهر) - تعلم تفاعلي",[52,25077,25078,25081],{},[37,25079,25080],{},"Zero to Mastery"," (39 دولار/شهر) - مسارات مهنية كاملة",[52,25083,25084,25086],{},[37,25085,7816],{}," (مجاني + توجيه) - تدريب مع تغذية راجعة",[73,25088,25090],{"id":25089},"أدوات-التطوير","أدوات التطوير",[30,25092,25093],{},[37,25094,25095],{},"أساسي:",[49,25097,25098,25104,25109,25115],{},[52,25099,25100,25103],{},[37,25101,25102],{},"VS Code"," - محرر النصوص المعياري في الصناعة",[52,25105,25106,25108],{},[37,25107,24427],{}," - تصحيح الأخطاء",[52,25110,25111,25114],{},[37,25112,25113],{},"Git/GitHub"," - مراقبة الإصدارات",[52,25116,25117,25119],{},[37,25118,19045],{}," - تشغيل JavaScript في كل مكان",[30,25121,25122],{},[37,25123,25124],{},"مفيد:",[49,25126,25127,25132,25138,25144],{},[52,25128,25129,25131],{},[37,25130,8411],{}," - خادم تطوير سريع",[52,25133,25134,25137],{},[37,25135,25136],{},"Thunder Client"," - اختبار API في VS Code",[52,25139,25140,25143],{},[37,25141,25142],{},"Prettier"," - تنسيق الكود",[52,25145,25146,25149],{},[37,25147,25148],{},"ESLint"," - جودة الكود",[68,25151,25153],{"id":25152},"الفخاخ-الشائعة-وكيفية-تجنبها","الفخاخ الشائعة وكيفية تجنبها",[73,25155,25157],{"id":25156},"جحيم-الدروس","جحيم الدروس",[30,25159,25160,25163],{},[37,25161,25162],{},"العرض:"," مشاهدة درس بعد درس لكن لا يمكن بناء أي شيء بشكل مستقل",[30,25165,25166],{},[37,25167,8067],{},[49,25169,25170,25173,25176,25179],{},[52,25171,25172],{},"بنِ مشاريع بدون دروس",[52,25174,25175],{},"استخدم الدروس للمفاهيم، ثم بنِ نسختك الخاصة",[52,25177,25178],{},"أجبر نفسك على حل المشكلات بشكل مستقل",[52,25180,25181],{},"حد أقصى 2 ساعات من الدروس لكل 8 ساعات برمجة",[73,25183,25185],{"id":25184},"متلازمة-المحتال","متلازمة المحتال",[30,25187,25188,25190],{},[37,25189,25162],{}," الشعور أنك لن تكون جيداً بما يكفي",[30,25192,25193],{},[37,25194,287],{},[49,25196,25197,25200,25203],{},[52,25198,25199],{},"الجميع يشعر بهذا",[52,25201,25202],{},"حتى المطورون الكبار يبحثون عن الصيغة الأساسية",[52,25204,25205],{},"المقارنة هي لص الفرح",[30,25207,25208],{},[37,25209,8067],{},[49,25211,25212,25215,25218],{},[52,25213,25214],{},"تتبع تقدمك (سجل تعلماتك)",[52,25216,25217],{},"قارن نفسك بما كنت عليه الشهر الماضي",[52,25219,25220],{},"انضم لمجتمعات داعمة",[73,25222,25224],{"id":25223},"القفز-بين-الأطر","القفز بين الأطر",[30,25226,25227,25229],{},[37,25228,25162],{}," التبديل من React إلى Vue إلى Angular بدون إتقان أي منها",[30,25231,25232],{},[37,25233,8067],{},[49,25235,25236,25239,25242],{},[52,25237,25238],{},"اختر إطار عمل واحد (React للوظائف، Vue للمتعة)",[52,25240,25241],{},"التزم به لمدة 3 أشهر على الأقل",[52,25243,25244],{},"تعلمه بعمق قبل استكشاف الآخرين",[73,25246,25248],{"id":25247},"إهمال-الأساسيات","إهمال الأساسيات",[30,25250,25251,25253],{},[37,25252,25162],{}," القفز للأطر قبل فهم vanilla JavaScript",[30,25255,25256],{},[37,25257,8067],{},[49,25259,25260,25263,25266],{},[52,25261,25262],{},"اقضِ 3 أشهر على الأقل على vanilla JS",[52,25264,25265],{},"فهم closures، prototypes، async قبل الأطر",[52,25267,25268],{},"الأطر تذهب وتأتي، الأساسيات تبقى",[68,25270,25272],{"id":25271},"علامات-أنك-جاهز-لوظيفة-javascript","علامات أنك جاهز لوظيفة JavaScript",[30,25274,25275,25276],{},"✅ ",[37,25277,25278],{},"المهارات التقنية:",[49,25280,25281,25284,25287,25290,25293,25296,25299],{},[52,25282,25283],{},"بنِ تطبيقات كاملة الواجهات بشكل مستقل",[52,25285,25286],{},"فهم JavaScript غير متزامن بعمق",[52,25288,25289],{},"مرتاح مع React/Vue",[52,25291,25292],{},"يمكن استخدام Git بثقة",[52,25294,25295],{},"اكتب كود نظيف وقابل للقراءة",[52,25297,25298],{},"صحح الأخطاء بشكل منهجي",[52,25300,25301],{},"معرفة الاختبار الأساسية",[30,25303,25275,25304],{},[37,25305,25306],{},"المشاريع:",[49,25308,25309,25312,25315,25318,25321],{},[52,25310,25311],{},"3-5 مشاريع مصقولة على GitHub",[52,25313,25314],{},"مشروع واحد على الأقل كامل الواجهات",[52,25316,25317],{},"منشور ويمكن الوصول إليه عبر الإنترنت",[52,25319,25320],{},"README نظيف مع لقطات شاشة",[52,25322,25323],{},"يظهر مهارات مختلفة",[30,25325,25275,25326],{},[37,25327,25328],{},"المهارات الناعمة:",[49,25330,25331,25334,25337,25340,25343],{},[52,25332,25333],{},"يمكن شرح كودك",[52,25335,25336],{},"قراءة وفهم كود الآخرين",[52,25338,25339],{},"طرح أسئلة جيدة",[52,25341,25342],{},"البحث عن الحلول بشكل مستقل",[52,25344,25345],{},"التعاون على GitHub",[68,25347,25349],{"id":25348},"تسريع-التعلم","تسريع التعلم",[73,25351,25353],{"id":25352},"العادات-اليومية-التي-تعمل","العادات اليومية التي تعمل",[441,25355,25358],{"className":25356,"code":25357,"language":446},[444],"الصباح (ساعة واحدة):\n- مراجعة مفاهيم الأمس\n- قراءة مقال/وثائق JavaScript\n\nالظهيرة/المساء (2-3 ساعات):\n- جلسة برمجة نشطة\n- بناء أو توسيع مشروع\n- تدريب على Codewars/LeetCode (30 دقيقة)\n\nنهاية الأسبوع:\n- مشاريع أطول\n- استكشاف مفاهيم جديدة\n- مراجعة تقدم الأسبوع\n",[448,25359,25357],{"__ignoreMap":16},[73,25361,25363],{"id":25362},"الأهداف-الأسبوعية","الأهداف الأسبوعية",[49,25365,25366,25372,25378],{},[52,25367,25368,25371],{},[37,25369,25370],{},"الأسبوع 1-4:"," أكمل مفهوم رئيسي واحد + مشروعين صغيرين",[52,25373,25374,25377],{},[37,25375,25376],{},"الشهر 3+:"," بنِ مشروع كامل شهرياً",[52,25379,25380,25383],{},[37,25381,25382],{},"الشهر 6+:"," ساهم في مشروع مصدر مفتوح واحد",[73,25385,25387],{"id":25386},"تقنيات-التعلم","تقنيات التعلم",[30,25389,25390],{},[37,25391,25392],{},"تقنية Feynman:",[913,25394,25395,25398,25401,25404],{},[52,25396,25397],{},"تعلم المفهوم",[52,25399,25400],{},"شرحها بمصطلحات بسيطة (منشور مدونة، فيديو، صديق)",[52,25402,25403],{},"تحديد الفجوات في الفهم",[52,25405,25406],{},"مراجعة وتبسيط أكثر",[30,25408,25409],{},[37,25410,25411],{},"البناء علناً:",[49,25413,25414,25417,25420,25423],{},[52,25415,25416],{},"مشاركة التقدم على Twitter/LinkedIn",[52,25418,25419],{},"الحصول على تغذية راجعة من المجتمع",[52,25421,25422],{},"البقاء مسؤولاً",[52,25424,25425],{},"التواصل مع المتعلمين الآخرين",[68,25427,25429],{"id":25428},"توقعات-سوق-العمل-الواقعية-2025","توقعات سوق العمل الواقعية (2025)",[73,25431,25433],{"id":25432},"مطور-javascript-مبتدئ","مطور JavaScript مبتدئ",[30,25435,25436],{},[37,25437,25438],{},"المتطلبات:",[49,25440,25441,25444,25447,25449,25452],{},[52,25442,25443],{},"6-12 شهر تعلم",[52,25445,25446],{},"محفظة مع 3-5 مشاريع",[52,25448,24247],{},[52,25450,25451],{},"معرفة Node.js الأساسية",[52,25453,25454],{},"مهارات Git/GitHub",[30,25456,25457],{},[37,25458,25459],{},"نطاقات الراتب (الولايات المتحدة):",[49,25461,25462,25465,25468],{},[52,25463,25464],{},"مبتدئ: 60,000 - 85,000 دولار",[52,25466,25467],{},"متوسط (2-4 سنوات): 85,000 - 120,000 دولار",[52,25469,25470],{},"كبير (5+ سنوات): 120,000 - 180,000 دولار",[30,25472,25473],{},[37,25474,25475],{},"الفرص عن بعد:",[49,25477,25478,25481,25484,25487],{},[52,25479,25480],{},"العديد من الشركات تعمل عن بعد بالكامل",[52,25482,25483],{},"المنافسة عالمية",[52,25485,25486],{},"التركيز على مهارات التواصل",[52,25488,25489],{},"المحفظة حاسمة",[68,25491,25493],{"id":25492},"الخاتمة-الرحلة-ليس-الوجهة","الخاتمة: الرحلة، ليس الوجهة",[30,25495,25496],{},"تعلم JavaScript سباق ماراثون، ليس سباق قصير. في 2025، مع أدوات الذكاء الاصطناعي، الأطر الحديثة، والموارد الوفيرة، لديك كل ما تحتاجه للنجاح.",[30,25498,25499],{},[37,25500,25501],{},"النقاط الرئيسية:",[913,25503,25504,25509,25515,25521,25527],{},[52,25505,25506,25508],{},[37,25507,24165],{}," لبناء مشاريع حقيقية",[52,25510,25511,25514],{},[37,25512,25513],{},"6-12 شهر"," لتصبح جاهزاً للوظيفة (مع جهد مخصص)",[52,25516,25517,25520],{},[37,25518,25519],{},"الأساسيات أولاً","، الأطر ثانياً",[52,25522,25523,25526],{},[37,25524,25525],{},"بنِ مشاريع"," باستمرار",[52,25528,25529,25532],{},[37,25530,25531],{},"استخدم الذكاء الاصطناعي بحكمة"," كأداة تعلم، ليس عكازة",[30,25534,25535],{},"نظام JavaScript يتطور بسرعة، لكن اللغة الأساسية تبقى مستقرة. ركز على الأساسيات، تدرب باستمرار، وابنِ مشاريع حقيقية. ستندهش مما يمكنك إنشاؤه في بضعة أشهر فقط.",[30,25537,25538,25541,25542,25545],{},[37,25539,25540],{},"خطوتك التالية:"," ابدأ اليوم. اختر مورد واحد، اكتب ",[448,25543,25544],{},"console.log(\"Hello, World!\")"," الأول، وتلتزم بالحضور كل يوم. أنت المستقبلي سيشكرك الحاضر على البدء.",[30,25547,25548],{},"حظاً موفقاً في رحلة JavaScript! 🚀",{"title":16,"searchDepth":17,"depth":17,"links":25550},[25551,25552,25553,25562,25568,25573,25579,25580,25585,25588],{"id":24083,"depth":1260,"text":24084},{"id":24171,"depth":1260,"text":24172},{"id":24284,"depth":1260,"text":24285,"children":25554},[25555,25556,25557,25558,25559,25560,25561],{"id":24288,"depth":17,"text":24289},{"id":24364,"depth":17,"text":24365},{"id":24438,"depth":17,"text":24439},{"id":24482,"depth":17,"text":24483},{"id":24561,"depth":17,"text":24562},{"id":24611,"depth":17,"text":24612},{"id":24665,"depth":17,"text":24666},{"id":24718,"depth":1260,"text":24719,"children":25563},[25564,25565,25566,25567],{"id":24722,"depth":17,"text":24723},{"id":24761,"depth":17,"text":24762},{"id":24822,"depth":17,"text":24823},{"id":24908,"depth":17,"text":24909},{"id":24949,"depth":1260,"text":24950,"children":25569},[25570,25571,25572],{"id":24953,"depth":17,"text":24954},{"id":25020,"depth":17,"text":25021},{"id":25089,"depth":17,"text":25090},{"id":25152,"depth":1260,"text":25153,"children":25574},[25575,25576,25577,25578],{"id":25156,"depth":17,"text":25157},{"id":25184,"depth":17,"text":25185},{"id":25223,"depth":17,"text":25224},{"id":25247,"depth":17,"text":25248},{"id":25271,"depth":1260,"text":25272},{"id":25348,"depth":1260,"text":25349,"children":25581},[25582,25583,25584],{"id":25352,"depth":17,"text":25353},{"id":25362,"depth":17,"text":25363},{"id":25386,"depth":17,"text":25387},{"id":25428,"depth":1260,"text":25429,"children":25586},[25587],{"id":25432,"depth":17,"text":25433},{"id":25492,"depth":1260,"text":25493},"تتساءل كم يستغرق تعلم JavaScript؟ احصل على جدول زمني واقعي بناءً على مستوى خبرتك، مسار التعلم، وأهدافك. يشمل الأطر الحديثة، أدوات الذكاء الاصطناعي، وخارطة طريق شهرية.","https://images.unsplash.com/photo-1550063873-ab792950096b?q=80&w=1200",{"excerpt":25592},{"type":13,"value":25593},[25594,25596,25600],[30,25595,24071],{},[30,25597,25598,24077],{},[37,25599,24076],{},[30,25601,24080],{},"/km-ystghrq-talm-javascript-2025","2022-12-18",{"title":24066,"description":25589},"كم-يستغرق-تعلم-javascript-2025",[2885,1938,18910,22940,1337,2886,1338],"uFBoZzrfI2D-kkbqxAE4cAKSXqHdnBL-CShyflKJktM",{"id":25609,"title":25610,"author":26,"body":25611,"category":19,"description":28127,"extension":7,"image":28128,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":28129,"navigation":1305,"path":28140,"publishedAt":28141,"readingTime":2129,"seo":28142,"stem":28143,"tags":28144,"updatedAt":1342,"__hash__":28149},"articles_ar/كم-يستغرق-تعلم-python-2025.md","كم يستغرق تعلم Python في 2025؟ خارطة طريق كاملة للذكاء الاصطناعي وعلم البيانات",{"type":13,"value":25612,"toc":28085},[25613,25616,25622,25625,25629,25737,25741,25744,25749,25766,25771,25788,25793,25798,25815,25820,25837,25842,25858,25863,25880,25884,25888,25893,25897,25998,26002,26018,26022,26048,26053,26057,26062,26066,26152,26156,26170,26174,26178,26185,26190,26257,26261,26275,26280,26348,26352,26363,26368,26425,26429,26440,26446,26451,26514,26518,26532,26537,26614,26618,26629,26634,26682,26686,26700,26706,26711,26773,26777,26788,26793,26851,26855,26866,26871,26925,26929,26940,26944,26949,26954,26959,26973,26978,26992,26997,27011,27016,27020,27024,27028,27039,27044,27050,27054,27059,27084,27089,27179,27184,27242,27246,27251,27265,27270,27283,27288,27302,27307,27321,27325,27327,27332,27342,27347,27357,27362,27424,27428,27433,27444,27449,27459,27464,27475,27479,27484,27492,27497,27508,27513,27522,27526,27530,27535,27539,27545,27549,27554,27558,27569,27573,27578,27582,27593,27597,27602,27606,27617,27621,27625,27645,27650,27664,27669,27687,27691,27704,27708,27712,27718,27729,27734,27745,27750,27761,27767,27778,27782,27787,27801,27806,27820,27824,27828,27833,27849,27854,27858,27864,27868,27872,27902,27906,27932,27937,27951,27955,27960,27974,27979,27993,27998,28012,28017,28030,28032,28035,28039,28069,28072,28082],[30,25614,25615],{},"Python هي اللغة رقم 1 للذكاء الاصطناعي، علم البيانات، والأتمتة في 2025. مع انفجار ChatGPT، تعلم الآلة، وأدوات الذكاء الاصطناعي، تعلم Python لم يكن أكثر قيمة - أو أكثر سهولة.",[30,25617,25618,25621],{},[37,25619,25620],{},"الإجابة الواقعية:"," 2-3 أشهر لكتابة سكريبتات مفيدة، 6-9 أشهر لبناء مشاريع الذكاء الاصطناعي/تعلم الآلة، 12-18 شهر لتصبح جاهزاً للوظيفة في علم البيانات أو تطوير الخلفية.",[30,25623,25624],{},"يغطي هذا الدليل مسارات تعلم Python الحديثة لعام 2025، بما في ذلك الذكاء الاصطناعي/تعلم الآلة، علم البيانات، تطوير الويب، والأتمتة. ستحصل على جداول زمنية واقعية، أدوات حديثة، وخارطة طريق عملية.",[68,25626,25628],{"id":25627},"جدول-زمني-سريع-حسب-مسار-المهنة","جدول زمني سريع حسب مسار المهنة",[507,25630,25631,25646],{},[510,25632,25633],{},[513,25634,25635,25638,25641,25643],{},[516,25636,25637],{},"مسار المهنة",[516,25639,25640],{},"الوقت للمشاريع الأولى",[516,25642,24099],{},[516,25644,25645],{},"متوسط راتب البداية (الولايات المتحدة)",[523,25647,25648,25663,25677,25692,25708,25723],{},[513,25649,25650,25655,25658,25660],{},[528,25651,25652],{},[37,25653,25654],{},"محلل البيانات",[528,25656,25657],{},"3-4 أشهر",[528,25659,24133],{},[528,25661,25662],{},"65,000 - 85,000 دولار",[513,25664,25665,25670,25672,25674],{},[528,25666,25667],{},[37,25668,25669],{},"عالم البيانات",[528,25671,24133],{},[528,25673,24117],{},[528,25675,25676],{},"95,000 - 120,000 دولار",[513,25678,25679,25684,25686,25689],{},[528,25680,25681],{},[37,25682,25683],{},"مهندس تعلم الآلة",[528,25685,24149],{},[528,25687,25688],{},"18-24 شهر",[528,25690,25691],{},"110,000 - 150,000 دولار",[513,25693,25694,25699,25702,25705],{},[528,25695,25696],{},[37,25697,25698],{},"مطور خلفية",[528,25700,25701],{},"4-6 أشهر",[528,25703,25704],{},"9-12 شهر",[528,25706,25707],{},"75,000 - 100,000 دولار",[513,25709,25710,25715,25718,25720],{},[528,25711,25712],{},[37,25713,25714],{},"DevOps/الأتمتة",[528,25716,25717],{},"3-5 أشهر",[528,25719,24149],{},[528,25721,25722],{},"80,000 - 110,000 دولار",[513,25724,25725,25730,25732,25734],{},[528,25726,25727],{},[37,25728,25729],{},"عام Python",[528,25731,25657],{},[528,25733,24133],{},[528,25735,25736],{},"70,000 - 90,000 دولار",[68,25738,25740],{"id":25739},"ما-يعني-تعلم-python-في-2025","ما يعني \"تعلم Python\" في 2025",[30,25742,25743],{},"Python لديها مستويات مهارات مختلفة حسب أهدافك:",[30,25745,25746],{},[37,25747,25748],{},"المستوى 1: أساسيات Python (4-6 أسابيع)",[49,25750,25751,25754,25757,25760,25763],{},[52,25752,25753],{},"المتغيرات، أنواع البيانات، الشروط",[52,25755,25756],{},"الحلقات والوظائف",[52,25758,25759],{},"القوائم، القواميس، المجموعات",[52,25761,25762],{},"معالجة الملفات",[52,25764,25765],{},"يمكن كتابة سكريبتات أتمتة بسيطة",[30,25767,25768],{},[37,25769,25770],{},"المستوى 2: Python المتوسط (3 أشهر)",[49,25772,25773,25776,25779,25782,25785],{},[52,25774,25775],{},"البرمجة كائنية التوجه (الفئات، الوراثة)",[52,25777,25778],{},"معالجة الأخطاء وتصحيح الأخطاء",[52,25780,25781],{},"العمل مع المكتبات (requests، أساسيات pandas)",[52,25783,25784],{},"البيئات الافتراضية (venv، pip)",[52,25786,25787],{},"يمكن بناء أدوات وأسكريبت مفيدة",[30,25789,25790],{},[37,25791,25792],{},"المستوى 3: مسار متخصص (6-9 أشهر)",[30,25794,25795],{},[37,25796,25797],{},"مسار علم البيانات:",[49,25799,25800,25803,25806,25809,25812],{},[52,25801,25802],{},"NumPy، Pandas (معالجة البيانات)",[52,25804,25805],{},"Matplotlib، Seaborn (التصور)",[52,25807,25808],{},"Jupyter Notebooks",[52,25810,25811],{},"SQL لقواعد البيانات",[52,25813,25814],{},"التحليل الإحصائي",[30,25816,25817],{},[37,25818,25819],{},"مسار الذكاء الاصطناعي/تعلم الآلة:",[49,25821,25822,25825,25828,25831,25834],{},[52,25823,25824],{},"scikit-learn (تعلم الآلة التقليدي)",[52,25826,25827],{},"TensorFlow أو PyTorch (تعلم الآلة العميق)",[52,25829,25830],{},"Hugging Face Transformers (نماذج اللغة الكبيرة)",[52,25832,25833],{},"قواعد البيانات المتجهة",[52,25835,25836],{},"نشر النماذج",[30,25838,25839],{},[37,25840,25841],{},"مسار تطوير الويب:",[49,25843,25844,25847,25850,25853,25855],{},[52,25845,25846],{},"FastAPI أو Django",[52,25848,25849],{},"RESTful APIs",[52,25851,25852],{},"تكامل قواعد البيانات (PostgreSQL)",[52,25854,11401],{},[52,25856,25857],{},"نشر Docker",[30,25859,25860],{},[37,25861,25862],{},"المستوى 4: جاهز للوظيفة (12-18 شهر)",[49,25864,25865,25868,25871,25874,25877],{},[52,25866,25867],{},"محفظة من 3-5 مشاريع",[52,25869,25870],{},"مراقبة الإصدارات (Git/GitHub)",[52,25872,25873],{},"الاختبار (pytest)",[52,25875,25876],{},"النشر السحابي (AWS، Google Cloud)",[52,25878,25879],{},"الخبرة المجالية (المالية، الرعاية الصحية، إلخ)",[68,25881,25883],{"id":25882},"خارطة-طريق-التعلم-شهرية","خارطة طريق التعلم شهرية",[73,25885,25887],{"id":25886},"الأشهر-1-2-أساسيات-python","الأشهر 1-2: أساسيات Python",[30,25889,25890,25892],{},[37,25891,24294],{}," صيغة Python الأساسية ومفاهيم البرمجة",[30,25894,25895],{},[37,25896,17136],{},[441,25898,25900],{"className":1778,"code":25899,"language":1780,"meta":16,"style":16},"# المتغيرات وأنواع البيانات\nname = \"Alice\"\nage = 25\nis_student = True\n\n# القوائم والقواميس\nskills = [\"Python\", \"SQL\", \"ML\"]\nperson = {\"name\": \"Alice\", \"age\": 25}\n\n# الوظائف\ndef greet(name):\n    return f\"Hello, {name}!\"\n\n# الحلقات\nfor skill in skills:\n    print(skill)\n\n# الشروط\nif age >= 18:\n    print(\"Adult\")\n",[448,25901,25902,25907,25912,25917,25922,25926,25931,25936,25941,25945,25950,25955,25960,25964,25969,25974,25979,25983,25988,25993],{"__ignoreMap":16},[1608,25903,25904],{"class":1785,"line":1786},[1608,25905,25906],{},"# المتغيرات وأنواع البيانات\n",[1608,25908,25909],{"class":1785,"line":1260},[1608,25910,25911],{},"name = \"Alice\"\n",[1608,25913,25914],{"class":1785,"line":17},[1608,25915,25916],{},"age = 25\n",[1608,25918,25919],{"class":1785,"line":1802},[1608,25920,25921],{},"is_student = True\n",[1608,25923,25924],{"class":1785,"line":1808},[1608,25925,1805],{"emptyLinePlaceholder":1305},[1608,25927,25928],{"class":1785,"line":1814},[1608,25929,25930],{},"# القوائم والقواميس\n",[1608,25932,25933],{"class":1785,"line":1820},[1608,25934,25935],{},"skills = [\"Python\", \"SQL\", \"ML\"]\n",[1608,25937,25938],{"class":1785,"line":1825},[1608,25939,25940],{},"person = {\"name\": \"Alice\", \"age\": 25}\n",[1608,25942,25943],{"class":1785,"line":1831},[1608,25944,1805],{"emptyLinePlaceholder":1305},[1608,25946,25947],{"class":1785,"line":1333},[1608,25948,25949],{},"# الوظائف\n",[1608,25951,25952],{"class":1785,"line":2075},[1608,25953,25954],{},"def greet(name):\n",[1608,25956,25957],{"class":1785,"line":2099},[1608,25958,25959],{},"    return f\"Hello, {name}!\"\n",[1608,25961,25962],{"class":1785,"line":2119},[1608,25963,1805],{"emptyLinePlaceholder":1305},[1608,25965,25966],{"class":1785,"line":2129},[1608,25967,25968],{},"# الحلقات\n",[1608,25970,25971],{"class":1785,"line":1635},[1608,25972,25973],{},"for skill in skills:\n",[1608,25975,25976],{"class":1785,"line":2296},[1608,25977,25978],{},"    print(skill)\n",[1608,25980,25981],{"class":1785,"line":2302},[1608,25982,1805],{"emptyLinePlaceholder":1305},[1608,25984,25985],{"class":1785,"line":2308},[1608,25986,25987],{},"# الشروط\n",[1608,25989,25990],{"class":1785,"line":3279},[1608,25991,25992],{},"if age >= 18:\n",[1608,25994,25995],{"class":1785,"line":3284},[1608,25996,25997],{},"    print(\"Adult\")\n",[30,25999,26000],{},[37,26001,24324],{},[49,26003,26004,26006,26009,26012,26015],{},[52,26005,16788],{},[52,26007,26008],{},"مولد كلمات مرور",[52,26010,26011],{},"قائمة مهام (سطر الأوامر)",[52,26013,26014],{},"لعبة تخمين بسيطة",[52,26016,26017],{},"محلل ملف CSV",[30,26019,26020],{},[37,26021,17087],{},[49,26023,26024,26030,26036,26042],{},[52,26025,26026,26029],{},[37,26027,26028],{},"دورة Python.org"," (مجانية، رسمية)",[52,26031,26032,26035],{},[37,26033,26034],{},"أتمتة الأمور المملة"," (كتاب مجاني)",[52,26037,26038,26041],{},[37,26039,26040],{},"دورة freeCodeCamp Python"," (مجانية، 4 ساعات)",[52,26043,26044,26047],{},[37,26045,26046],{},"Codecademy Python"," (تفاعلية)",[30,26049,26050,24361],{},[37,26051,26052],{},"الوقت:",[73,26054,26056],{"id":26055},"الشهر-3-البرمجة-كائنية-التوجه-والمكتبات","الشهر 3: البرمجة كائنية التوجه والمكتبات",[30,26058,26059,26061],{},[37,26060,24294],{}," الفئات والعمل مع المكتبات الخارجية",[30,26063,26064],{},[37,26065,17136],{},[441,26067,26069],{"className":1778,"code":26068,"language":1780,"meta":16,"style":16},"# الفئات\nclass User:\n    def __init__(self, name, email):\n        self.name = name\n        self.email = email\n    \n    def send_email(self):\n        print(f\"Email sent to {self.email}\")\n\n# العمل مع المكتبات\nimport requests\nresponse = requests.get(\"https://api.github.com/users/octocat\")\ndata = response.json()\n\n# معالجة الملفات\nwith open(\"data.txt\", \"r\") as file:\n    content = file.read()\n",[448,26070,26071,26076,26081,26086,26091,26096,26100,26105,26110,26114,26119,26123,26128,26133,26137,26142,26147],{"__ignoreMap":16},[1608,26072,26073],{"class":1785,"line":1786},[1608,26074,26075],{},"# الفئات\n",[1608,26077,26078],{"class":1785,"line":1260},[1608,26079,26080],{},"class User:\n",[1608,26082,26083],{"class":1785,"line":17},[1608,26084,26085],{},"    def __init__(self, name, email):\n",[1608,26087,26088],{"class":1785,"line":1802},[1608,26089,26090],{},"        self.name = name\n",[1608,26092,26093],{"class":1785,"line":1808},[1608,26094,26095],{},"        self.email = email\n",[1608,26097,26098],{"class":1785,"line":1814},[1608,26099,2249],{},[1608,26101,26102],{"class":1785,"line":1820},[1608,26103,26104],{},"    def send_email(self):\n",[1608,26106,26107],{"class":1785,"line":1825},[1608,26108,26109],{},"        print(f\"Email sent to {self.email}\")\n",[1608,26111,26112],{"class":1785,"line":1831},[1608,26113,1805],{"emptyLinePlaceholder":1305},[1608,26115,26116],{"class":1785,"line":1333},[1608,26117,26118],{},"# العمل مع المكتبات\n",[1608,26120,26121],{"class":1785,"line":2075},[1608,26122,1799],{},[1608,26124,26125],{"class":1785,"line":2099},[1608,26126,26127],{},"response = requests.get(\"https://api.github.com/users/octocat\")\n",[1608,26129,26130],{"class":1785,"line":2119},[1608,26131,26132],{},"data = response.json()\n",[1608,26134,26135],{"class":1785,"line":2129},[1608,26136,1805],{"emptyLinePlaceholder":1305},[1608,26138,26139],{"class":1785,"line":1635},[1608,26140,26141],{},"# معالجة الملفات\n",[1608,26143,26144],{"class":1785,"line":2296},[1608,26145,26146],{},"with open(\"data.txt\", \"r\") as file:\n",[1608,26148,26149],{"class":1785,"line":2302},[1608,26150,26151],{},"    content = file.read()\n",[30,26153,26154],{},[37,26155,24324],{},[49,26157,26158,26161,26164,26167],{},[52,26159,26160],{},"تطبيق طقس باستخدام OpenWeather API",[52,26162,26163],{},"مكشط ويب مع BeautifulSoup",[52,26165,26166],{},"سكريبت أتمتة البريد الإلكتروني",[52,26168,26169],{},"أداة CLI مع argparse",[30,26171,26172,24435],{},[37,26173,26052],{},[73,26175,26177],{"id":26176},"الأشهر-4-6-اختر-مسارك","الأشهر 4-6: اختر مسارك",[26179,26180,26182],"h4",{"id":26181},"المسار-أ-علم-البيانات-والتحليلات",[37,26183,26184],{},"المسار أ: علم البيانات والتحليلات",[30,26186,26187],{},[37,26188,26189],{},"الشهر 4: Pandas وNumPy",[441,26191,26193],{"className":1778,"code":26192,"language":1780,"meta":16,"style":16},"import pandas as pd\nimport numpy as np\n\n# تحميل وتحليل البيانات\ndf = pd.read_csv(\"sales_data.csv\")\nprint(df.describe())\n\n# التجميع والتجميع\nmonthly_sales = df.groupby(\"month\")[\"revenue\"].sum()\n\n# تنظيف البيانات\ndf = df.dropna()\ndf[\"date\"] = pd.to_datetime(df[\"date\"])\n",[448,26194,26195,26200,26205,26209,26214,26219,26224,26228,26233,26238,26242,26247,26252],{"__ignoreMap":16},[1608,26196,26197],{"class":1785,"line":1786},[1608,26198,26199],{},"import pandas as pd\n",[1608,26201,26202],{"class":1785,"line":1260},[1608,26203,26204],{},"import numpy as np\n",[1608,26206,26207],{"class":1785,"line":17},[1608,26208,1805],{"emptyLinePlaceholder":1305},[1608,26210,26211],{"class":1785,"line":1802},[1608,26212,26213],{},"# تحميل وتحليل البيانات\n",[1608,26215,26216],{"class":1785,"line":1808},[1608,26217,26218],{},"df = pd.read_csv(\"sales_data.csv\")\n",[1608,26220,26221],{"class":1785,"line":1814},[1608,26222,26223],{},"print(df.describe())\n",[1608,26225,26226],{"class":1785,"line":1820},[1608,26227,1805],{"emptyLinePlaceholder":1305},[1608,26229,26230],{"class":1785,"line":1825},[1608,26231,26232],{},"# التجميع والتجميع\n",[1608,26234,26235],{"class":1785,"line":1831},[1608,26236,26237],{},"monthly_sales = df.groupby(\"month\")[\"revenue\"].sum()\n",[1608,26239,26240],{"class":1785,"line":1333},[1608,26241,1805],{"emptyLinePlaceholder":1305},[1608,26243,26244],{"class":1785,"line":2075},[1608,26245,26246],{},"# تنظيف البيانات\n",[1608,26248,26249],{"class":1785,"line":2099},[1608,26250,26251],{},"df = df.dropna()\n",[1608,26253,26254],{"class":1785,"line":2119},[1608,26255,26256],{},"df[\"date\"] = pd.to_datetime(df[\"date\"])\n",[30,26258,26259],{},[37,26260,25306],{},[49,26262,26263,26266,26269,26272],{},[52,26264,26265],{},"تحليل بيانات المبيعات",[52,26267,26268],{},"تصور بيانات COVID-19",[52,26270,26271],{},"محلل درجات الطلاب",[52,26273,26274],{},"تحليل أسعار الأسهم",[30,26276,26277],{},[37,26278,26279],{},"الشهر 5: تصور البيانات",[441,26281,26283],{"className":1778,"code":26282,"language":1780,"meta":16,"style":16},"import matplotlib.pyplot as plt\nimport seaborn as sns\n\n# إنشاء التصورات\nplt.figure(figsize=(10, 6))\nsns.barplot(x=\"month\", y=\"sales\", data=df)\nplt.title(\"Monthly Sales\")\nplt.show()\n\n# لوحات تحكم تفاعلية مع Streamlit\nimport streamlit as st\nst.title(\"Sales Dashboard\")\nst.line_chart(df[\"sales\"])\n",[448,26284,26285,26290,26295,26299,26304,26309,26314,26319,26324,26328,26333,26338,26343],{"__ignoreMap":16},[1608,26286,26287],{"class":1785,"line":1786},[1608,26288,26289],{},"import matplotlib.pyplot as plt\n",[1608,26291,26292],{"class":1785,"line":1260},[1608,26293,26294],{},"import seaborn as sns\n",[1608,26296,26297],{"class":1785,"line":17},[1608,26298,1805],{"emptyLinePlaceholder":1305},[1608,26300,26301],{"class":1785,"line":1802},[1608,26302,26303],{},"# إنشاء التصورات\n",[1608,26305,26306],{"class":1785,"line":1808},[1608,26307,26308],{},"plt.figure(figsize=(10, 6))\n",[1608,26310,26311],{"class":1785,"line":1814},[1608,26312,26313],{},"sns.barplot(x=\"month\", y=\"sales\", data=df)\n",[1608,26315,26316],{"class":1785,"line":1820},[1608,26317,26318],{},"plt.title(\"Monthly Sales\")\n",[1608,26320,26321],{"class":1785,"line":1825},[1608,26322,26323],{},"plt.show()\n",[1608,26325,26326],{"class":1785,"line":1831},[1608,26327,1805],{"emptyLinePlaceholder":1305},[1608,26329,26330],{"class":1785,"line":1333},[1608,26331,26332],{},"# لوحات تحكم تفاعلية مع Streamlit\n",[1608,26334,26335],{"class":1785,"line":2075},[1608,26336,26337],{},"import streamlit as st\n",[1608,26339,26340],{"class":1785,"line":2099},[1608,26341,26342],{},"st.title(\"Sales Dashboard\")\n",[1608,26344,26345],{"class":1785,"line":2119},[1608,26346,26347],{},"st.line_chart(df[\"sales\"])\n",[30,26349,26350],{},[37,26351,25306],{},[49,26353,26354,26357,26360],{},[52,26355,26356],{},"لوحة تحكم تفاعلية مع Streamlit",[52,26358,26359],{},"دفتر Jupyter لاستكشاف البيانات",[52,26361,26362],{},"تقرير تحليلات الأعمال",[30,26364,26365],{},[37,26366,26367],{},"الشهر 6: SQL وقواعد البيانات",[441,26369,26371],{"className":1778,"code":26370,"language":1780,"meta":16,"style":16},"import sqlite3\nimport pandas as pd\n\n# عمليات قاعدة البيانات\nconn = sqlite3.connect(\"company.db\")\ndf = pd.read_sql_query(\"SELECT * FROM employees\", conn)\n\n# استخدام SQLAlchemy\nfrom sqlalchemy import create_engine\nengine = create_engine(\"postgresql://user:pass@localhost/db\")\ndf.to_sql(\"table_name\", engine)\n",[448,26372,26373,26378,26382,26386,26391,26396,26401,26405,26410,26415,26420],{"__ignoreMap":16},[1608,26374,26375],{"class":1785,"line":1786},[1608,26376,26377],{},"import sqlite3\n",[1608,26379,26380],{"class":1785,"line":1260},[1608,26381,26199],{},[1608,26383,26384],{"class":1785,"line":17},[1608,26385,1805],{"emptyLinePlaceholder":1305},[1608,26387,26388],{"class":1785,"line":1802},[1608,26389,26390],{},"# عمليات قاعدة البيانات\n",[1608,26392,26393],{"class":1785,"line":1808},[1608,26394,26395],{},"conn = sqlite3.connect(\"company.db\")\n",[1608,26397,26398],{"class":1785,"line":1814},[1608,26399,26400],{},"df = pd.read_sql_query(\"SELECT * FROM employees\", conn)\n",[1608,26402,26403],{"class":1785,"line":1820},[1608,26404,1805],{"emptyLinePlaceholder":1305},[1608,26406,26407],{"class":1785,"line":1825},[1608,26408,26409],{},"# استخدام SQLAlchemy\n",[1608,26411,26412],{"class":1785,"line":1831},[1608,26413,26414],{},"from sqlalchemy import create_engine\n",[1608,26416,26417],{"class":1785,"line":1333},[1608,26418,26419],{},"engine = create_engine(\"postgresql://user:pass@localhost/db\")\n",[1608,26421,26422],{"class":1785,"line":2075},[1608,26423,26424],{},"df.to_sql(\"table_name\", engine)\n",[30,26426,26427],{},[37,26428,25306],{},[49,26430,26431,26434,26437],{},[52,26432,26433],{},"محلل قاعدة بيانات العملاء",[52,26435,26436],{},"منصة تحليلات التجارة الإلكترونية",[52,26438,26439],{},"مولد التقارير المالية",[26179,26441,26443],{"id":26442},"المسار-ب-الذكاء-الاصطناعيتعلم-الآلة",[37,26444,26445],{},"المسار ب: الذكاء الاصطناعي/تعلم الآلة",[30,26447,26448],{},[37,26449,26450],{},"الشهر 4: أساسيات تعلم الآلة",[441,26452,26454],{"className":1778,"code":26453,"language":1780,"meta":16,"style":16},"from sklearn.model_selection import train_test_split\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.metrics import mean_squared_error\n\n# تدريب نموذج\nX_train, X_test, y_train, y_test = train_test_split(X, y)\nmodel = LinearRegression()\nmodel.fit(X_train, y_train)\n\n# إجراء التنبؤات\npredictions = model.predict(X_test)\nmse = mean_squared_error(y_test, predictions)\n",[448,26455,26456,26461,26466,26471,26475,26480,26485,26490,26495,26499,26504,26509],{"__ignoreMap":16},[1608,26457,26458],{"class":1785,"line":1786},[1608,26459,26460],{},"from sklearn.model_selection import train_test_split\n",[1608,26462,26463],{"class":1785,"line":1260},[1608,26464,26465],{},"from sklearn.linear_model import LinearRegression\n",[1608,26467,26468],{"class":1785,"line":17},[1608,26469,26470],{},"from sklearn.metrics import mean_squared_error\n",[1608,26472,26473],{"class":1785,"line":1802},[1608,26474,1805],{"emptyLinePlaceholder":1305},[1608,26476,26477],{"class":1785,"line":1808},[1608,26478,26479],{},"# تدريب نموذج\n",[1608,26481,26482],{"class":1785,"line":1814},[1608,26483,26484],{},"X_train, X_test, y_train, y_test = train_test_split(X, y)\n",[1608,26486,26487],{"class":1785,"line":1820},[1608,26488,26489],{},"model = LinearRegression()\n",[1608,26491,26492],{"class":1785,"line":1825},[1608,26493,26494],{},"model.fit(X_train, y_train)\n",[1608,26496,26497],{"class":1785,"line":1831},[1608,26498,1805],{"emptyLinePlaceholder":1305},[1608,26500,26501],{"class":1785,"line":1333},[1608,26502,26503],{},"# إجراء التنبؤات\n",[1608,26505,26506],{"class":1785,"line":2075},[1608,26507,26508],{},"predictions = model.predict(X_test)\n",[1608,26510,26511],{"class":1785,"line":2099},[1608,26512,26513],{},"mse = mean_squared_error(y_test, predictions)\n",[30,26515,26516],{},[37,26517,25306],{},[49,26519,26520,26523,26526,26529],{},[52,26521,26522],{},"متوقع أسعار المنازل",[52,26524,26525],{},"مصنف رسائل البريد المزعج",[52,26527,26528],{},"تنبؤ ترك العملاء",[52,26530,26531],{},"تصنيف زهرة Iris",[30,26533,26534],{},[37,26535,26536],{},"الشهر 5: تعلم الآلة العميق مع PyTorch",[441,26538,26540],{"className":1778,"code":26539,"language":1780,"meta":16,"style":16},"import torch\nimport torch.nn as nn\n\n# شبكة عصبية بسيطة\nclass NeuralNet(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.layer1 = nn.Linear(10, 64)\n        self.layer2 = nn.Linear(64, 1)\n    \n    def forward(self, x):\n        x = torch.relu(self.layer1(x))\n        return self.layer2(x)\n\nmodel = NeuralNet()\n",[448,26541,26542,26547,26552,26556,26561,26566,26571,26576,26581,26586,26590,26595,26600,26605,26609],{"__ignoreMap":16},[1608,26543,26544],{"class":1785,"line":1786},[1608,26545,26546],{},"import torch\n",[1608,26548,26549],{"class":1785,"line":1260},[1608,26550,26551],{},"import torch.nn as nn\n",[1608,26553,26554],{"class":1785,"line":17},[1608,26555,1805],{"emptyLinePlaceholder":1305},[1608,26557,26558],{"class":1785,"line":1802},[1608,26559,26560],{},"# شبكة عصبية بسيطة\n",[1608,26562,26563],{"class":1785,"line":1808},[1608,26564,26565],{},"class NeuralNet(nn.Module):\n",[1608,26567,26568],{"class":1785,"line":1814},[1608,26569,26570],{},"    def __init__(self):\n",[1608,26572,26573],{"class":1785,"line":1820},[1608,26574,26575],{},"        super().__init__()\n",[1608,26577,26578],{"class":1785,"line":1825},[1608,26579,26580],{},"        self.layer1 = nn.Linear(10, 64)\n",[1608,26582,26583],{"class":1785,"line":1831},[1608,26584,26585],{},"        self.layer2 = nn.Linear(64, 1)\n",[1608,26587,26588],{"class":1785,"line":1333},[1608,26589,2249],{},[1608,26591,26592],{"class":1785,"line":2075},[1608,26593,26594],{},"    def forward(self, x):\n",[1608,26596,26597],{"class":1785,"line":2099},[1608,26598,26599],{},"        x = torch.relu(self.layer1(x))\n",[1608,26601,26602],{"class":1785,"line":2119},[1608,26603,26604],{},"        return self.layer2(x)\n",[1608,26606,26607],{"class":1785,"line":2129},[1608,26608,1805],{"emptyLinePlaceholder":1305},[1608,26610,26611],{"class":1785,"line":1635},[1608,26612,26613],{},"model = NeuralNet()\n",[30,26615,26616],{},[37,26617,25306],{},[49,26619,26620,26623,26626],{},[52,26621,26622],{},"مصنف الصور (MNIST)",[52,26624,26625],{},"تحليل المشاعر",[52,26627,26628],{},"نظام التوصيات",[30,26630,26631],{},[37,26632,26633],{},"الشهر 6: نماذج اللغة الكبيرة وHugging Face",[441,26635,26637],{"className":1778,"code":26636,"language":1780,"meta":16,"style":16},"from transformers import pipeline\n\n# استخدام النماذج المدربة مسبقاً\nsentiment = pipeline(\"sentiment-analysis\")\nresult = sentiment(\"I love Python!\")\n\n# توليد النص\ngenerator = pipeline(\"text-generation\", model=\"gpt2\")\noutput = generator(\"Once upon a time\")\n",[448,26638,26639,26644,26648,26653,26658,26663,26667,26672,26677],{"__ignoreMap":16},[1608,26640,26641],{"class":1785,"line":1786},[1608,26642,26643],{},"from transformers import pipeline\n",[1608,26645,26646],{"class":1785,"line":1260},[1608,26647,1805],{"emptyLinePlaceholder":1305},[1608,26649,26650],{"class":1785,"line":17},[1608,26651,26652],{},"# استخدام النماذج المدربة مسبقاً\n",[1608,26654,26655],{"class":1785,"line":1802},[1608,26656,26657],{},"sentiment = pipeline(\"sentiment-analysis\")\n",[1608,26659,26660],{"class":1785,"line":1808},[1608,26661,26662],{},"result = sentiment(\"I love Python!\")\n",[1608,26664,26665],{"class":1785,"line":1814},[1608,26666,1805],{"emptyLinePlaceholder":1305},[1608,26668,26669],{"class":1785,"line":1820},[1608,26670,26671],{},"# توليد النص\n",[1608,26673,26674],{"class":1785,"line":1825},[1608,26675,26676],{},"generator = pipeline(\"text-generation\", model=\"gpt2\")\n",[1608,26678,26679],{"class":1785,"line":1831},[1608,26680,26681],{},"output = generator(\"Once upon a time\")\n",[30,26683,26684],{},[37,26685,25306],{},[49,26687,26688,26691,26694,26697],{},[52,26689,26690],{},"chatbot مع Hugging Face",[52,26692,26693],{},"ملخص النصوص",[52,26695,26696],{},"مساعد كتابة بالذكاء الاصطناعي",[52,26698,26699],{},"مولد تعليقات الصور",[26179,26701,26703],{"id":26702},"المسار-ج-تطوير-الويب-الخلفي",[37,26704,26705],{},"المسار ج: تطوير الويب الخلفي",[30,26707,26708],{},[37,26709,26710],{},"الشهر 4: أساسيات FastAPI",[441,26712,26714],{"className":1778,"code":26713,"language":1780,"meta":16,"style":16},"from fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get(\"/\")\nasync def root():\n    return {\"message\": \"Hello World\"}\n\n@app.post(\"/users/\")\nasync def create_user(name: str, email: str):\n    # حفظ في قاعدة البيانات\n    return {\"name\": name, \"email\": email}\n",[448,26715,26716,26721,26725,26730,26734,26739,26744,26749,26753,26758,26763,26768],{"__ignoreMap":16},[1608,26717,26718],{"class":1785,"line":1786},[1608,26719,26720],{},"from fastapi import FastAPI\n",[1608,26722,26723],{"class":1785,"line":1260},[1608,26724,1805],{"emptyLinePlaceholder":1305},[1608,26726,26727],{"class":1785,"line":17},[1608,26728,26729],{},"app = FastAPI()\n",[1608,26731,26732],{"class":1785,"line":1802},[1608,26733,1805],{"emptyLinePlaceholder":1305},[1608,26735,26736],{"class":1785,"line":1808},[1608,26737,26738],{},"@app.get(\"/\")\n",[1608,26740,26741],{"class":1785,"line":1814},[1608,26742,26743],{},"async def root():\n",[1608,26745,26746],{"class":1785,"line":1820},[1608,26747,26748],{},"    return {\"message\": \"Hello World\"}\n",[1608,26750,26751],{"class":1785,"line":1825},[1608,26752,1805],{"emptyLinePlaceholder":1305},[1608,26754,26755],{"class":1785,"line":1831},[1608,26756,26757],{},"@app.post(\"/users/\")\n",[1608,26759,26760],{"class":1785,"line":1333},[1608,26761,26762],{},"async def create_user(name: str, email: str):\n",[1608,26764,26765],{"class":1785,"line":2075},[1608,26766,26767],{},"    # حفظ في قاعدة البيانات\n",[1608,26769,26770],{"class":1785,"line":2099},[1608,26771,26772],{},"    return {\"name\": name, \"email\": email}\n",[30,26774,26775],{},[37,26776,25306],{},[49,26778,26779,26782,26785],{},[52,26780,26781],{},"REST API لتطبيق المهام",[52,26783,26784],{},"API مدونة مع عمليات CRUD",[52,26786,26787],{},"نظام مصادقة المستخدمين",[30,26789,26790],{},[37,26791,26792],{},"الشهر 5: تكامل قاعدة البيانات",[441,26794,26796],{"className":1778,"code":26795,"language":1780,"meta":16,"style":16},"from sqlalchemy import create_engine, Column, Integer, String\nfrom sqlalchemy.ext.declarative import declarative_base\nfrom sqlalchemy.orm import sessionmaker\n\nBase = declarative_base()\n\nclass User(Base):\n    __tablename__ = \"users\"\n    id = Column(Integer, primary_key=True)\n    email = Column(String, unique=True)\n    name = Column(String)\n",[448,26797,26798,26803,26808,26813,26817,26822,26826,26831,26836,26841,26846],{"__ignoreMap":16},[1608,26799,26800],{"class":1785,"line":1786},[1608,26801,26802],{},"from sqlalchemy import create_engine, Column, Integer, String\n",[1608,26804,26805],{"class":1785,"line":1260},[1608,26806,26807],{},"from sqlalchemy.ext.declarative import declarative_base\n",[1608,26809,26810],{"class":1785,"line":17},[1608,26811,26812],{},"from sqlalchemy.orm import sessionmaker\n",[1608,26814,26815],{"class":1785,"line":1802},[1608,26816,1805],{"emptyLinePlaceholder":1305},[1608,26818,26819],{"class":1785,"line":1808},[1608,26820,26821],{},"Base = declarative_base()\n",[1608,26823,26824],{"class":1785,"line":1814},[1608,26825,1805],{"emptyLinePlaceholder":1305},[1608,26827,26828],{"class":1785,"line":1820},[1608,26829,26830],{},"class User(Base):\n",[1608,26832,26833],{"class":1785,"line":1825},[1608,26834,26835],{},"    __tablename__ = \"users\"\n",[1608,26837,26838],{"class":1785,"line":1831},[1608,26839,26840],{},"    id = Column(Integer, primary_key=True)\n",[1608,26842,26843],{"class":1785,"line":1333},[1608,26844,26845],{},"    email = Column(String, unique=True)\n",[1608,26847,26848],{"class":1785,"line":2075},[1608,26849,26850],{},"    name = Column(String)\n",[30,26852,26853],{},[37,26854,25306],{},[49,26856,26857,26860,26863],{},[52,26858,26859],{},"مدونة كاملة الواجهات مع قاعدة بيانات",[52,26861,26862],{},"API التجارة الإلكترونية",[52,26864,26865],{},"API وسائل التواصل الاجتماعي",[30,26867,26868],{},[37,26869,26870],{},"الشهر 6: الاختبار والنشر",[441,26872,26874],{"className":1778,"code":26873,"language":1780,"meta":16,"style":16},"# الاختبار مع pytest\ndef test_create_user():\n    response = client.post(\"/users/\", json={\"name\": \"Alice\"})\n    assert response.status_code == 200\n\n# نشر Docker\nFROM python:3.11\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\nCMD [\"uvicorn\", \"main:app\"]\n",[448,26875,26876,26881,26886,26891,26896,26900,26905,26910,26915,26920],{"__ignoreMap":16},[1608,26877,26878],{"class":1785,"line":1786},[1608,26879,26880],{},"# الاختبار مع pytest\n",[1608,26882,26883],{"class":1785,"line":1260},[1608,26884,26885],{},"def test_create_user():\n",[1608,26887,26888],{"class":1785,"line":17},[1608,26889,26890],{},"    response = client.post(\"/users/\", json={\"name\": \"Alice\"})\n",[1608,26892,26893],{"class":1785,"line":1802},[1608,26894,26895],{},"    assert response.status_code == 200\n",[1608,26897,26898],{"class":1785,"line":1808},[1608,26899,1805],{"emptyLinePlaceholder":1305},[1608,26901,26902],{"class":1785,"line":1814},[1608,26903,26904],{},"# نشر Docker\n",[1608,26906,26907],{"class":1785,"line":1820},[1608,26908,26909],{},"FROM python:3.11\n",[1608,26911,26912],{"class":1785,"line":1825},[1608,26913,26914],{},"COPY requirements.txt .\n",[1608,26916,26917],{"class":1785,"line":1831},[1608,26918,26919],{},"RUN pip install -r requirements.txt\n",[1608,26921,26922],{"class":1785,"line":1333},[1608,26923,26924],{},"CMD [\"uvicorn\", \"main:app\"]\n",[30,26926,26927],{},[37,26928,25306],{},[49,26930,26931,26934,26937],{},[52,26932,26933],{},"API منشور على AWS/Railway",[52,26935,26936],{},"خط أنابيب CI/CD مع GitHub Actions",[52,26938,26939],{},"خدمات مصغرة محولة لـ Docker",[73,26941,26943],{"id":26942},"الأشهر-7-12-التخصص-والمحفظة","الأشهر 7-12: التخصص والمحفظة",[30,26945,26946,26948],{},[37,26947,24294],{}," بناء مشاريع جاهزة للإنتاج، المساهمة في المصدر المفتوح، التحضير للمقابلات",[30,26950,26951],{},[37,26952,26953],{},"ما يجب بناؤه:",[30,26955,26956],{},[37,26957,26958],{},"محفظة علم البيانات:",[49,26960,26961,26964,26967,26970],{},[52,26962,26963],{},"مشروع تحليل بيانات شامل مع رؤى",[52,26965,26966],{},"لوحة تحكم تفاعلية منشورة على Streamlit Cloud",[52,26968,26969],{},"دخول مسابقة Kaggle (أعلى 50%)",[52,26971,26972],{},"مدونة تقنية تفسر تحليلك",[30,26974,26975],{},[37,26976,26977],{},"محفظة ML/AI:",[49,26979,26980,26983,26986,26989],{},[52,26981,26982],{},"نموذج ML مخصص بدقة 85%+",[52,26984,26985],{},"نموذج لغة كبير محسن لمهمة محددة",[52,26987,26988],{},"تطبيق ذكاء اصطناعي مع واجهة Gradio",[52,26990,26991],{},"تنفيذ ورقة بحث",[30,26993,26994],{},[37,26995,26996],{},"محفظة الخلفية:",[49,26998,26999,27002,27005,27008],{},[52,27000,27001],{},"API مميز كامل مع وثائق",[52,27003,27004],{},"معمارية خدمات مصغرة",[52,27006,27007],{},"ميزات فورية (WebSockets)",[52,27009,27010],{},"تطبيق إنتاج منشور",[30,27012,27013,27015],{},[37,27014,26052],{}," 15-25 ساعة/أسبوع",[68,27017,27019],{"id":27018},"أدوات-python-الحديثة-والنظام-البيئي-2025","أدوات Python الحديثة والنظام البيئي (2025)",[73,27021,27023],{"id":27022},"التعلم-بالذكاء-الاصطناعي","التعلم بالذكاء الاصطناعي",[30,27025,27026,24959],{},[37,27027,7476],{},[49,27029,27030,27033,27036],{},[52,27031,27032],{},"يكمل كود Python تلقائياً",[52,27034,27035],{},"يولد docstrings والاختبارات",[52,27037,27038],{},"مفيد لكود boilerplate",[30,27040,27041],{},[37,27042,27043],{},"ChatGPT/Claude لـ Python:",[441,27045,27048],{"className":27046,"code":27047,"language":446},[444],"الأسئلة الفعالة:\n- \"شرح هذا الكود Python: [لصق الكود]\"\n- \"تصحيح هذا الخطأ: [رسالة الخطأ]\"\n- \"ما الطريقة Pythonic لـ [المهمة]؟\"\n- \"تحسين هذه الوظيفة: [الكود]\"\n",[448,27049,27047],{"__ignoreMap":16},[73,27051,27053],{"id":27052},"أدوات-python-الأساسية","أدوات Python الأساسية",[30,27055,27056],{},[37,27057,27058],{},"بيئة التطوير:",[49,27060,27061,27066,27072,27078],{},[52,27062,27063,27065],{},[37,27064,25102],{}," مع إضافة Python",[52,27067,27068,27071],{},[37,27069,27070],{},"PyCharm"," (إصدار المجتمع المجاني)",[52,27073,27074,27077],{},[37,27075,27076],{},"Jupyter Lab"," لعلم البيانات",[52,27079,27080,27083],{},[37,27081,27082],{},"Google Colab"," للـ ML (GPU مجاني)",[30,27085,27086],{},[37,27087,27088],{},"إدارة الحزم:",[441,27090,27092],{"className":8465,"code":27091,"language":8467,"meta":16,"style":16},"# البيئات الافتراضية\npython -m venv venv\nsource venv/bin/activate  # Mac/Linux\nvenv\\Scripts\\activate     # Windows\n\n# مدير حزم حديث\npip install uv  # بديل pip فائق السرعة\n\n# إدارة التبعيات\npip install poetry\npoetry init\n",[448,27093,27094,27099,27112,27123,27131,27135,27140,27153,27157,27162,27171],{"__ignoreMap":16},[1608,27095,27096],{"class":1785,"line":1786},[1608,27097,27098],{"class":1945},"# البيئات الافتراضية\n",[1608,27100,27101,27103,27106,27109],{"class":1785,"line":1260},[1608,27102,1780],{"class":2017},[1608,27104,27105],{"class":5031}," -m",[1608,27107,27108],{"class":2068}," venv",[1608,27110,27111],{"class":2068}," venv\n",[1608,27113,27114,27117,27120],{"class":1785,"line":17},[1608,27115,27116],{"class":8527},"source",[1608,27118,27119],{"class":2068}," venv/bin/activate",[1608,27121,27122],{"class":1945},"  # Mac/Linux\n",[1608,27124,27125,27128],{"class":1785,"line":1802},[1608,27126,27127],{"class":2017},"venv\\Scripts\\activate",[1608,27129,27130],{"class":1945},"     # Windows\n",[1608,27132,27133],{"class":1785,"line":1808},[1608,27134,1805],{"emptyLinePlaceholder":1305},[1608,27136,27137],{"class":1785,"line":1814},[1608,27138,27139],{"class":1945},"# مدير حزم حديث\n",[1608,27141,27142,27145,27147,27150],{"class":1785,"line":1820},[1608,27143,27144],{"class":2017},"pip",[1608,27146,10548],{"class":2068},[1608,27148,27149],{"class":2068}," uv",[1608,27151,27152],{"class":1945},"  # بديل pip فائق السرعة\n",[1608,27154,27155],{"class":1785,"line":1825},[1608,27156,1805],{"emptyLinePlaceholder":1305},[1608,27158,27159],{"class":1785,"line":1831},[1608,27160,27161],{"class":1945},"# إدارة التبعيات\n",[1608,27163,27164,27166,27168],{"class":1785,"line":1333},[1608,27165,27144],{"class":2017},[1608,27167,10548],{"class":2068},[1608,27169,27170],{"class":2068}," poetry\n",[1608,27172,27173,27176],{"class":1785,"line":2075},[1608,27174,27175],{"class":2017},"poetry",[1608,27177,27178],{"class":2068}," init\n",[30,27180,27181],{},[37,27182,27183],{},"الاختبار والجودة:",[441,27185,27187],{"className":8465,"code":27186,"language":8467,"meta":16,"style":16},"# الاختبار\npip install pytest\n\n# تنسيق الكود\npip install black ruff\n\n# فحص الأنواع\npip install mypy\n",[448,27188,27189,27194,27203,27207,27212,27224,27228,27233],{"__ignoreMap":16},[1608,27190,27191],{"class":1785,"line":1786},[1608,27192,27193],{"class":1945},"# الاختبار\n",[1608,27195,27196,27198,27200],{"class":1785,"line":1260},[1608,27197,27144],{"class":2017},[1608,27199,10548],{"class":2068},[1608,27201,27202],{"class":2068}," pytest\n",[1608,27204,27205],{"class":1785,"line":17},[1608,27206,1805],{"emptyLinePlaceholder":1305},[1608,27208,27209],{"class":1785,"line":1802},[1608,27210,27211],{"class":1945},"# تنسيق الكود\n",[1608,27213,27214,27216,27218,27221],{"class":1785,"line":1808},[1608,27215,27144],{"class":2017},[1608,27217,10548],{"class":2068},[1608,27219,27220],{"class":2068}," black",[1608,27222,27223],{"class":2068}," ruff\n",[1608,27225,27226],{"class":1785,"line":1814},[1608,27227,1805],{"emptyLinePlaceholder":1305},[1608,27229,27230],{"class":1785,"line":1820},[1608,27231,27232],{"class":1945},"# فحص الأنواع\n",[1608,27234,27235,27237,27239],{"class":1785,"line":1825},[1608,27236,27144],{"class":2017},[1608,27238,10548],{"class":2068},[1608,27240,27241],{"class":2068}," mypy\n",[73,27243,27245],{"id":27244},"المكتبات-الواجب-معرفتها-حسب-المجال","المكتبات الواجب معرفتها حسب المجال",[30,27247,27248],{},[37,27249,27250],{},"علم البيانات:",[49,27252,27253,27256,27259,27262],{},[52,27254,27255],{},"pandas، NumPy (معالجة البيانات)",[52,27257,27258],{},"Matplotlib، Seaborn، Plotly (التصور)",[52,27260,27261],{},"scikit-learn (تعلم الآلة)",[52,27263,27264],{},"Jupyter (دفاتر العمل)",[30,27266,27267],{},[37,27268,27269],{},"AI/ML:",[49,27271,27272,27275,27277,27280],{},[52,27273,27274],{},"PyTorch أو TensorFlow (تعلم الآلة العميق)",[52,27276,25830],{},[52,27278,27279],{},"LangChain (تطبيقات LLM)",[52,27281,27282],{},"OpenAI API (تكامل GPT)",[30,27284,27285],{},[37,27286,27287],{},"تطوير الويب:",[49,27289,27290,27293,27296,27299],{},[52,27291,27292],{},"FastAPI (إطار عمل API حديث)",[52,27294,27295],{},"Django (إطار عمل مميز)",[52,27297,27298],{},"SQLAlchemy (ORM قاعدة البيانات)",[52,27300,27301],{},"Pydantic (التحقق من البيانات)",[30,27303,27304],{},[37,27305,27306],{},"الأتمتة:",[49,27308,27309,27312,27315,27318],{},[52,27310,27311],{},"requests (HTTP)",[52,27313,27314],{},"BeautifulSoup (مكشط الويب)",[52,27316,27317],{},"schedule (جدولة المهام)",[52,27319,27320],{},"selenium (أتمتة المتصفح)",[68,27322,27324],{"id":27323},"العوامل-المؤثرة-على-سرعة-التعلم","العوامل المؤثرة على سرعة التعلم",[73,27326,24723],{"id":24722},[30,27328,27329],{},[37,27330,27331],{},"لا خلفية برمجية:",[49,27333,27334,27336,27339],{},[52,27335,24733],{},[52,27337,27338],{},"تحتاج لتعلم مفاهيم البرمجة + Python",[52,27340,27341],{},"ابدأ بالأساسيات، لا تستعجل",[30,27343,27344],{},[37,27345,27346],{},"تعرف لغة أخرى:",[49,27348,27349,27351,27354],{},[52,27350,24749],{},[52,27352,27353],{},"صيغة Python أنظف وأبسط",[52,27355,27356],{},"ركز على ميزات Python المحددة (فهم القوائم، المولدات)",[30,27358,27359],{},[37,27360,27361],{},"Python قادم من JavaScript:",[441,27363,27365],{"className":1778,"code":27364,"language":1780,"meta":16,"style":16},"# عادات JavaScript التي يجب التخلص منها:\n# 1. استخدم snake_case، لا camelCase\nuser_name = \"Alice\"  # ✅\nuserName = \"Alice\"   # ❌\n\n# 2. المسافة البادئة مهمة (لا أقواس)\nif condition:\n    do_something()  # ✅\n    \n# 3. تنسيق سلاسل مختلف\nname = \"Alice\"\ngreeting = f\"Hello, {name}\"  # ✅ (f-strings)\n",[448,27366,27367,27372,27377,27382,27387,27391,27396,27401,27406,27410,27415,27419],{"__ignoreMap":16},[1608,27368,27369],{"class":1785,"line":1786},[1608,27370,27371],{},"# عادات JavaScript التي يجب التخلص منها:\n",[1608,27373,27374],{"class":1785,"line":1260},[1608,27375,27376],{},"# 1. استخدم snake_case، لا camelCase\n",[1608,27378,27379],{"class":1785,"line":17},[1608,27380,27381],{},"user_name = \"Alice\"  # ✅\n",[1608,27383,27384],{"class":1785,"line":1802},[1608,27385,27386],{},"userName = \"Alice\"   # ❌\n",[1608,27388,27389],{"class":1785,"line":1808},[1608,27390,1805],{"emptyLinePlaceholder":1305},[1608,27392,27393],{"class":1785,"line":1814},[1608,27394,27395],{},"# 2. المسافة البادئة مهمة (لا أقواس)\n",[1608,27397,27398],{"class":1785,"line":1820},[1608,27399,27400],{},"if condition:\n",[1608,27402,27403],{"class":1785,"line":1825},[1608,27404,27405],{},"    do_something()  # ✅\n",[1608,27407,27408],{"class":1785,"line":1831},[1608,27409,2249],{},[1608,27411,27412],{"class":1785,"line":1333},[1608,27413,27414],{},"# 3. تنسيق سلاسل مختلف\n",[1608,27416,27417],{"class":1785,"line":2075},[1608,27418,25911],{},[1608,27420,27421],{"class":1785,"line":2099},[1608,27422,27423],{},"greeting = f\"Hello, {name}\"  # ✅ (f-strings)\n",[73,27425,27427],{"id":27426},"_2-مسار-التعلم-المختار","2. مسار التعلم المختار",[30,27429,27430],{},[37,27431,27432],{},"الأقصر للوظيفة (6-9 أشهر):",[49,27434,27435,27438,27441],{},[52,27436,27437],{},"محلل البيانات أو مطور الخلفية",[52,27439,27440],{},"مسار تعلم واضح",[52,27442,27443],{},"وظائف مبتدئة كثيرة",[30,27445,27446],{},[37,27447,27448],{},"متوسط (9-12 شهر):",[49,27450,27451,27453,27456],{},[52,27452,25669],{},[52,27454,27455],{},"مهندس الأتمتة",[52,27457,27458],{},"يتطلب معرفة مجال + Python",[30,27460,27461],{},[37,27462,27463],{},"الأطول (12-24 شهر):",[49,27465,27466,27469,27472],{},[52,27467,27468],{},"مهندس ML أو باحث AI",[52,27470,27471],{},"يتطلب رياضيات، إحصاء، ML متقدم",[52,27473,27474],{},"مجال تنافسي للغاية",[73,27476,27478],{"id":27477},"_3-الالتزام-الزمني","3. الالتزام الزمني",[30,27480,27481],{},[37,27482,27483],{},"10-15 ساعة/أسبوع (دوام جزئي):",[49,27485,27486,27488,27490],{},[52,27487,24772],{},[52,27489,24778],{},[52,27491,24775],{},[30,27493,27494],{},[37,27495,27496],{},"25-35 ساعة/أسبوع (جاد):",[49,27498,27499,27502,27505],{},[52,27500,27501],{},"6-9 أشهر لتصبح جاهزاً للوظيفة",[52,27503,27504],{},"توازن مثالي",[52,27506,27507],{},"وقت كافي لبناء المشاريع",[30,27509,27510],{},[37,27511,27512],{},"40+ ساعة/أسبوع (معسكر تدريبي):",[49,27514,27515,27517,27519],{},[52,27516,24791],{},[52,27518,24794],{},[52,27520,27521],{},"خطر الإرهاق",[68,27523,27525],{"id":27524},"الأخطاء-الشائعة-التي-يجب-تجنبها","الأخطاء الشائعة التي يجب تجنبها",[73,27527,27529],{"id":27528},"_1-جحيم-الدروس","1. جحيم الدروس",[30,27531,27532,27534],{},[37,27533,8063],{}," مشاهدة الدورات بدون بناء",[30,27536,27537],{},[37,27538,8067],{},[441,27540,27543],{"className":27541,"code":27542,"language":446},[444],"لكل ساعة درس:\n- البرمجة معاً: 0.5 ساعات\n- بناء نسختك: 1 ساعة\n- توسيع المشروع: 0.5 ساعات\n",[448,27544,27542],{"__ignoreMap":16},[73,27546,27548],{"id":27547},"_2-تخطي-الأساسيات","2. تخطي الأساسيات",[30,27550,27551,27553],{},[37,27552,8063],{}," القفز للـ ML/AI بسرعة كبيرة",[30,27555,27556],{},[37,27557,8067],{},[49,27559,27560,27563,27566],{},[52,27561,27562],{},"إتقان أساسيات Python أولاً (2-3 أشهر)",[52,27564,27565],{},"فهم هياكل البيانات بعمق",[52,27567,27568],{},"ثم التخصص",[73,27570,27572],{"id":27571},"_3-عدم-بناء-المشاريع","3. عدم بناء المشاريع",[30,27574,27575,27577],{},[37,27576,8063],{}," القيام بالتمارين فقط",[30,27579,27580],{},[37,27581,8067],{},[49,27583,27584,27587,27590],{},[52,27585,27586],{},"بنِ مشروع واحد شهرياً كحد أدنى",[52,27588,27589],{},"يجب أن تحل المشاريع مشاكل حقيقية",[52,27591,27592],{},"الجودة على الكمية",[73,27594,27596],{"id":27595},"_4-تجاهل-الرياضيات-لعلم-البياناتml","4. تجاهل الرياضيات (لعلم البيانات/ML)",[30,27598,27599,27601],{},[37,27600,8063],{}," محاولة ML بدون أساس رياضي",[30,27603,27604],{},[37,27605,8067],{},[49,27607,27608,27611,27614],{},[52,27609,27610],{},"تعلم أساسيات الجبر الخطي",[52,27612,27613],{},"فهم أساسيات الإحصاء",[52,27615,27616],{},"Khan Academy للمراجعة",[68,27618,27620],{"id":27619},"علامات-أنك-جاهز-لوظيفة","علامات أنك جاهز لوظيفة",[30,27622,25275,27623],{},[37,27624,25278],{},[49,27626,27627,27630,27633,27636,27639,27642],{},[52,27628,27629],{},"اكتب كود Python نظيف وPythonic",[52,27631,27632],{},"مرتاح بالتخصص المختار (علم البيانات، الويب، ML)",[52,27634,27635],{},"استخدم Git بثقة",[52,27637,27638],{},"تصحيح منهجي",[52,27640,27641],{},"اكتب الاختبارات",[52,27643,27644],{},"نشر المشاريع",[30,27646,25275,27647],{},[37,27648,27649],{},"المحفظة:",[49,27651,27652,27655,27658,27661],{},[52,27653,27654],{},"3-5 مشاريع كاملة على GitHub",[52,27656,27657],{},"مشروع واحد منشور على الأقل",[52,27659,27660],{},"README واضح مع التوثيق",[52,27662,27663],{},"يظهر الخبرة في مجالك",[30,27665,25275,27666],{},[37,27667,27668],{},"المعرفة المجالية:",[49,27670,27671,27676,27682],{},[52,27672,27673,27675],{},[37,27674,27250],{}," الإحصاء، تنظيف البيانات، التصور",[52,27677,27678,27681],{},[37,27679,27680],{},"ML:"," اختيار النموذج، التقييم، النشر",[52,27683,27684,27686],{},[37,27685,963],{}," تصميم API، قواعد البيانات، المصادقة",[30,27688,25275,27689],{},[37,27690,25328],{},[49,27692,27693,27696,27699,27702],{},[52,27694,27695],{},"شرح المفاهيم التقنية بوضوح",[52,27697,27698],{},"قراءة التوثيق بفعالية",[52,27700,27701],{},"طرح أسئلة جيدة على Stack Overflow",[52,27703,25345],{},[68,27705,27707],{"id":27706},"واقع-سوق-العمل-2025","واقع سوق العمل (2025)",[73,27709,27711],{"id":27710},"أكثر-أدوار-python-طلباً","أكثر أدوار Python طلباً",[30,27713,27714,27717],{},[37,27715,27716],{},"1. محلل البيانات"," (الأسهل للدخول)",[49,27719,27720,27723,27726],{},[52,27721,27722],{},"مطلوب: Python، Pandas، SQL، التصور",[52,27724,27725],{},"الجدول الزمني: 6-9 أشهر",[52,27727,27728],{},"الراتب: 65k-85k بداية",[30,27730,27731],{},[37,27732,27733],{},"2. مطور الخلفية",[49,27735,27736,27739,27742],{},[52,27737,27738],{},"مطلوب: FastAPI/Django، قواعد البيانات، APIs",[52,27740,27741],{},"الجدول الزمني: 9-12 شهر",[52,27743,27744],{},"الراتب: 75k-100k بداية",[30,27746,27747],{},[37,27748,27749],{},"3. عالم البيانات",[49,27751,27752,27755,27758],{},[52,27753,27754],{},"مطلوب: ML، الإحصاء، Python، SQL",[52,27756,27757],{},"الجدول الزمني: 12-18 شهر",[52,27759,27760],{},"الراتب: 95k-120k بداية",[30,27762,27763,27766],{},[37,27764,27765],{},"4. مهندس ML"," (الأكثر تنافسية)",[49,27768,27769,27772,27775],{},[52,27770,27771],{},"مطلوب: تعلم الآلة العميق، النشر، MLOps",[52,27773,27774],{},"الجدول الزمني: 18-24 شهر",[52,27776,27777],{},"الراتب: 110k-150k بداية",[73,27779,27781],{"id":27780},"ما-يبحث-عنه-أصحاب-العمل","ما يبحث عنه أصحاب العمل",[30,27783,27784],{},[37,27785,27786],{},"يجب أن يكون:",[49,27788,27789,27792,27795,27798],{},[52,27790,27791],{},"ملف GitHub نظيف مع مشاريع",[52,27793,27794],{},"مشاريع منشورة (ليس محلية فقط)",[52,27796,27797],{},"الاختبار والتوثيق",[52,27799,27800],{},"فهم أفضل الممارسات",[30,27802,27803],{},[37,27804,27805],{},"جيد أن يكون:",[49,27807,27808,27811,27814,27817],{},[52,27809,27810],{},"مساهمات في المصدر المفتوح",[52,27812,27813],{},"مدونة تقنية أو دروس",[52,27815,27816],{},"مسابقات Kaggle",[52,27818,27819],{},"الشهادات (AWS، Google Cloud)",[68,27821,27823],{"id":27822},"استراتيجيات-التعلم-المعجلة","استراتيجيات التعلم المعجلة",[73,27825,27827],{"id":27826},"قاعدة-8020-لـ-python","قاعدة 80/20 لـ Python",[30,27829,27830],{},[37,27831,27832],{},"20% من المفاهيم ستستخدمها 80% من الوقت:",[49,27834,27835,27838,27841,27844,27846],{},[52,27836,27837],{},"المتغيرات، الوظائف، الشروط، الحلقات",[52,27839,27840],{},"القوائم، القواميس",[52,27842,27843],{},"فهم القوائم",[52,27845,25762],{},[52,27847,27848],{},"المكتبات الرئيسية لمجالك (pandas، requests، FastAPI)",[30,27850,27851],{},[37,27852,27853],{},"ركز هنا أولاً!",[73,27855,27857],{"id":27856},"روتين-التعلم-اليومي","روتين التعلم اليومي",[441,27859,27862],{"className":27860,"code":27861,"language":446},[444],"مبتدئ (2-3 أشهر):\n- 1 ساعة: درس/قراءة\n- 1 ساعة: تمارين برمجة\n- 30 دقيقة: مراجعة وملاحظات\n\nمتوسط (4-8 أشهر):\n- 30 دقيقة: تعلم مفهوم جديد\n- 2 ساعات: بناء مشاريع\n- 30 دقيقة: مراجعة الكود/إعادة التصميم\n\nمتقدم (9+ أشهر):\n- 1 ساعة: موضوع متقدم\n- 3 ساعات: مشروع محفظة\n- 1 ساعة: مصدر مفتوح/مدونة\n",[448,27863,27861],{"__ignoreMap":16},[73,27865,27867],{"id":27866},"أفضل-موارد-التعلم-2025","أفضل موارد التعلم (2025)",[30,27869,27870],{},[37,27871,25026],{},[49,27873,27874,27879,27884,27890,27896],{},[52,27875,27876,27878],{},[37,27877,26028],{}," - رسمية، شاملة",[52,27880,27881,27883],{},[37,27882,25033],{}," - تفاعلية، مبنية على المشاريع",[52,27885,27886,27889],{},[37,27887,27888],{},"Real Python"," - مقالات عميقة",[52,27891,27892,27895],{},[37,27893,27894],{},"Kaggle Learn"," - مركز على علم البيانات",[52,27897,27898,27901],{},[37,27899,27900],{},"دورة FastAPI"," - APIs ويب حديثة",[30,27903,27904],{},[37,27905,25063],{},[49,27907,27908,27914,27920,27926],{},[52,27909,27910,27913],{},[37,27911,27912],{},"DataCamp"," (25 دولار/شهر) - مركز على علم البيانات",[52,27915,27916,27919],{},[37,27917,27918],{},"Coursera"," - دورات جامعية (كثير مجاني)",[52,27921,27922,27925],{},[37,27923,27924],{},"Fast.ai"," (مجاني) - تعلم الآلة العميق العملي",[52,27927,27928,27931],{},[37,27929,27930],{},"PyImageSearch"," - رؤية الحاسوب",[30,27933,27934],{},[37,27935,27936],{},"الكتب:",[49,27938,27939,27942,27945,27948],{},[52,27940,27941],{},"\"Automate the Boring Stuff\" (مجاني عبر الإنترنت)",[52,27943,27944],{},"\"Python Crash Course\" - أفضل كتاب مبتدئ",[52,27946,27947],{},"\"Fluent Python\" - Python متقدم",[52,27949,27950],{},"\"Hands-On Machine Learning\" - كتاب ML مقدس",[68,27952,27954],{"id":27953},"خطواتك-التالية","خطواتك التالية",[30,27956,27957],{},[37,27958,27959],{},"هذا الأسبوع:",[913,27961,27962,27965,27968,27971],{},[52,27963,27964],{},"ثبت Python 3.11+ وVS Code",[52,27966,27967],{},"أكمل الدرس الأول (المتغيرات، الوظائف)",[52,27969,27970],{},"اكتب سكريبتك الأول (آلة حاسبة أو لعبة)",[52,27972,27973],{},"انضم لمجتمع Python (r/learnpython، Discord)",[30,27975,27976],{},[37,27977,27978],{},"هذا الشهر:",[913,27980,27981,27984,27987,27990],{},[52,27982,27983],{},"أكمل أساسيات Python",[52,27985,27986],{},"بنِ 2-3 مشاريع صغيرة",[52,27988,27989],{},"أعد إعداد حساب GitHub",[52,27991,27992],{},"اختر مسار التخصص",[30,27994,27995],{},[37,27996,27997],{},"الأشهر الثلاثة التالية:",[913,27999,28000,28003,28006,28009],{},[52,28001,28002],{},"غوص عميق في المسار المختار",[52,28004,28005],{},"بنِ مشروع جوهري واحد",[52,28007,28008],{},"ابدأ تعلم المهارات الداعمة (SQL، Git)",[52,28010,28011],{},"انضم للمجتمعات عبر الإنترنت",[30,28013,28014],{},[37,28015,28016],{},"الأشهر 6-12 التالية:",[913,28018,28019,28022,28025,28027],{},[52,28020,28021],{},"بنِ محفظة (3-5 مشاريع)",[52,28023,28024],{},"نشر المشاريع عبر الإنترنت",[52,28026,17276],{},[52,28028,28029],{},"التواصل والتقدم للوظائف",[68,28031,7222],{"id":7222},[30,28033,28034],{},"Python واحدة من أفضل اللغات للتعلم في 2025، خاصة مع الذكاء الاصطناعي، علم البيانات، والأتمتة التي تهيمن على المشهد التقني. الرحلة من مبتدئ إلى جاهز للوظيفة تستغرق 6-18 شهر حسب مسارك، لكن صيغة Python النظيفة ونظامها البيئي الواسع يجعلها لغة قابلة للوصول ومجزية للتعلم.",[30,28036,28037],{},[37,28038,25501],{},[49,28040,28041,28047,28052,28057,28063],{},[52,28042,28043,28046],{},[37,28044,28045],{},"2-3 أشهر"," للأساسيات والسكريبتات البسيطة",[52,28048,28049,28051],{},[37,28050,24133],{}," لتصبح جاهزاً للوظيفة (محلل بيانات، مطور خلفية)",[52,28053,28054,28056],{},[37,28055,24117],{}," للأدوار المتقدمة (عالم بيانات، مهندس ML)",[52,28058,28059,28062],{},[37,28060,28061],{},"بنِ مشاريع باستمرار"," - هذا غير قابل للتفاوض",[52,28064,28065,28068],{},[37,28066,28067],{},"اختر مسار واحد"," وتعمق قبل استكشاف الآخرين",[30,28070,28071],{},"مستقبل Python مشرق مع نمو الذكاء الاصطناعي/ML، الأتمتة، وعلم البيانات بشكل كبير. ابدأ اليوم، كن ثابتاً، وابنِ مشاريع حقيقية. في عام، ستندهش مما يمكنك إنشاؤه.",[30,28073,28074,28081],{},[37,28075,28076,28077,28080],{},"جاهز لبدء رحلة Python الخاصة بك؟ ",[448,28078,28079],{},"print(\"Hello, World!\")"," الأول ينتظرك!"," 🐍",[2846,28083,28084],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sNX3-, html code.shiki .sNX3-{--shiki-light:#005CC5;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}",{"title":16,"searchDepth":17,"depth":17,"links":28086},[28087,28088,28089,28099,28104,28109,28115,28116,28120,28125,28126],{"id":25627,"depth":1260,"text":25628},{"id":25739,"depth":1260,"text":25740},{"id":25882,"depth":1260,"text":25883,"children":28090},[28091,28092,28093,28098],{"id":25886,"depth":17,"text":25887},{"id":26055,"depth":17,"text":26056},{"id":26176,"depth":17,"text":26177,"children":28094},[28095,28096,28097],{"id":26181,"depth":1802,"text":26184},{"id":26442,"depth":1802,"text":26445},{"id":26702,"depth":1802,"text":26705},{"id":26942,"depth":17,"text":26943},{"id":27018,"depth":1260,"text":27019,"children":28100},[28101,28102,28103],{"id":27022,"depth":17,"text":27023},{"id":27052,"depth":17,"text":27053},{"id":27244,"depth":17,"text":27245},{"id":27323,"depth":1260,"text":27324,"children":28105},[28106,28107,28108],{"id":24722,"depth":17,"text":24723},{"id":27426,"depth":17,"text":27427},{"id":27477,"depth":17,"text":27478},{"id":27524,"depth":1260,"text":27525,"children":28110},[28111,28112,28113,28114],{"id":27528,"depth":17,"text":27529},{"id":27547,"depth":17,"text":27548},{"id":27571,"depth":17,"text":27572},{"id":27595,"depth":17,"text":27596},{"id":27619,"depth":1260,"text":27620},{"id":27706,"depth":1260,"text":27707,"children":28117},[28118,28119],{"id":27710,"depth":17,"text":27711},{"id":27780,"depth":17,"text":27781},{"id":27822,"depth":1260,"text":27823,"children":28121},[28122,28123,28124],{"id":27826,"depth":17,"text":27827},{"id":27856,"depth":17,"text":27857},{"id":27866,"depth":17,"text":27867},{"id":27953,"depth":1260,"text":27954},{"id":7222,"depth":1260,"text":7222},"اكتشف كم يستغرق فعلياً تعلم Python في 2025، من الأساسيات إلى إتقان الذكاء الاصطناعي/تعلم الآلة. يشمل جداول زمنية واقعية، مسارات تعلم لعلم البيانات، تطوير الويب، والأتمتة، بالإضافة إلى الأدوات الحديثة والموارد.","https://images.unsplash.com/photo-1515879218367-8466d910aaa4?q=80&w=1200",{"excerpt":28130},{"type":13,"value":28131},[28132,28134,28138],[30,28133,25615],{},[30,28135,28136,25621],{},[37,28137,25620],{},[30,28139,25624],{},"/km-ystghrq-talm-python-2025","2022-12-17",{"title":25610,"description":28127},"كم-يستغرق-تعلم-python-2025",[1780,2887,28145,28146,1337,28147,28148],"machine-learning","data-science","django","fastapi","mxnCjsirKAM10wItrMySBriP2qMzwxm3teGA_yFuFVM",{"id":28151,"title":28152,"author":26,"body":28153,"category":19,"description":32618,"extension":7,"image":32619,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":32620,"navigation":1305,"path":32625,"publishedAt":32626,"readingTime":3298,"seo":32627,"stem":32628,"tags":32629,"updatedAt":1342,"__hash__":32632},"articles_ar/كود-قابل-لإعادة-الاستخدام-وقابل-للتوسع-في-unity.md","بناء كود قابل لإعادة الاستخدام وقابل للتوسع في Unity: دليل كامل لعام 2025",{"type":13,"value":28154,"toc":32592},[28155,28158,28162,28166,28171,28182,28187,28201,28206,28220,28225,28229,28261,28265,28268,28272,28380,28384,28389,28511,28515,28519,28728,28732,29014,29018,29022,29027,29102,29107,29285,29289,29294,29468,29472,29867,29871,30458,30462,30911,30915,31257,31261,31651,31655,32121,32125,32543,32547,32550,32556,32562,32568,32574,32580,32583,32589],[30,28156,28157],{},"إنشاء كود معياري وقابل لإعادة الاستخدام في Unity هو مفهوم مهم لتطوير الألعاب بكفاءة. في 2025، مع استمرار تطور Unity وزيادة تعقيد مشاريع الألعاب، أصبح إتقان الهندسة المعمارية القابلة للتوسع أكثر أهمية من أي وقت مضى. يغطي هذا الدليل الشامل كل شيء من الأنماط الأساسية إلى المفاهيم المعمارية المتقدمة التي ستساعدك على بناء ألعاب يمكن أن تنمو من نماذج indie إلى عناوين AAA.",[68,28159,28161],{"id":28160},"لماذا-يهم-الكود-القابل-للتوسع-في-unity","لماذا يهم الكود القابل للتوسع في Unity",[73,28163,28165],{"id":28164},"تكلفة-الهندسة-المعمارية-السيئة","تكلفة الهندسة المعمارية السيئة",[30,28167,28168],{},[37,28169,28170],{},"تطوير اللعبة المبكر (الأشهر 1-3):",[49,28172,28173,28176,28179],{},[52,28174,28175],{},"كل شيء يعمل بشكل مثالي",[52,28177,28178],{},"الكود بسيط ومباشر",[52,28180,28181],{},"التغييرات سهلة الإجراء",[30,28183,28184],{},[37,28185,28186],{},"تطوير اللعبة المتوسط (الأشهر 4-12):",[49,28188,28189,28192,28195,28198],{},[52,28190,28191],{},"قاعدة الكود تنمو إلى 10,000+ سطر",[52,28193,28194],{},"الميزات تصبح مترابطة",[52,28196,28197],{},"التغييرات البسيطة تكسر أنظمة متعددة",[52,28199,28200],{},"سرعة التطوير تبطئ إلى سحب",[30,28202,28203],{},[37,28204,28205],{},"تطوير اللعبة المتأخر (الأشهر 13+):",[49,28207,28208,28211,28214,28217],{},[52,28209,28210],{},"حجم الفريق ينمو إلى 5-20+ شخص",[52,28212,28213],{},"ميزات متعددة في التطوير المتوازي",[52,28215,28216],{},"الديون التقنية تسبب أخطاء مستمرة",[52,28218,28219],{},"الإصدارات تتأخر بسبب قضايا معمارية",[30,28221,28222,28224],{},[37,28223,287],{}," 70% من مشاريع تطوير الألعاب تفشل بسبب قضايا تقنية، مع كون الهندسة المعمارية السيئة سبباً رئيسياً.",[73,28226,28228],{"id":28227},"فوائد-الهندسة-المعمارية-القابلة-للتوسع","فوائد الهندسة المعمارية القابلة للتوسع",[49,28230,28231,28237,28243,28249,28255],{},[52,28232,28233,28236],{},[37,28234,28235],{},"تطوير أسرع:"," الميزات الجديدة تأخذ أياماً، لا أسابيع",[52,28238,28239,28242],{},[37,28240,28241],{},"صيانة أسهل:"," الأخطاء معزولة وقابلة للإصلاح",[52,28244,28245,28248],{},[37,28246,28247],{},"تعاون الفريق:"," مطورون متعددون يمكنهم العمل بدون تعارضات",[52,28250,28251,28254],{},[37,28252,28253],{},"مستقبل آمن:"," سهل إضافة ميزات ومنصات جديدة",[52,28256,28257,28260],{},[37,28258,28259],{},"أداء:"," تحسين وإدارة ذاكرة أفضل",[68,28262,28264],{"id":28263},"_1-scriptableobjects-تصميم-اللعبة-المدفوع-بالبيانات","1. ScriptableObjects: تصميم اللعبة المدفوع بالبيانات",[30,28266,28267],{},"ScriptableObjects هي أقوى ميزة Unity وأقل استخداماً. تفصل البيانات عن المنطق، مما يتيح تصميم لعبة مدفوع بالبيانات حقيقي.",[73,28269,28271],{"id":28270},"إعداد-scriptableobject-الأساسي","إعداد ScriptableObject الأساسي",[441,28273,28277],{"className":28274,"code":28275,"language":28276,"meta":16,"style":16},"language-csharp shiki shiki-themes github-light dark-plus dark-plus","using UnityEngine;\n\n[CreateAssetMenu(fileName = \"NewWeaponData\", menuName = \"Game/Weapon Data\")]\npublic class WeaponData : ScriptableObject\n{\n    [Header(\"Basic Info\")]\n    public string weaponName;\n    public Sprite icon;\n    public GameObject prefab;\n    \n    [Header(\"Stats\")]\n    public float damage = 10f;\n    public float fireRate = 1f;\n    public int maxAmmo = 30;\n    public float range = 50f;\n    \n    [Header(\"Visual Effects\")]\n    public ParticleSystem muzzleFlash;\n    public AudioClip fireSound;\n    public TrailRenderer bulletTrail;\n}\n","csharp",[448,28278,28279,28284,28288,28293,28298,28303,28308,28313,28318,28323,28327,28332,28337,28342,28347,28352,28356,28361,28366,28371,28376],{"__ignoreMap":16},[1608,28280,28281],{"class":1785,"line":1786},[1608,28282,28283],{},"using UnityEngine;\n",[1608,28285,28286],{"class":1785,"line":1260},[1608,28287,1805],{"emptyLinePlaceholder":1305},[1608,28289,28290],{"class":1785,"line":17},[1608,28291,28292],{},"[CreateAssetMenu(fileName = \"NewWeaponData\", menuName = \"Game/Weapon Data\")]\n",[1608,28294,28295],{"class":1785,"line":1802},[1608,28296,28297],{},"public class WeaponData : ScriptableObject\n",[1608,28299,28300],{"class":1785,"line":1808},[1608,28301,28302],{},"{\n",[1608,28304,28305],{"class":1785,"line":1814},[1608,28306,28307],{},"    [Header(\"Basic Info\")]\n",[1608,28309,28310],{"class":1785,"line":1820},[1608,28311,28312],{},"    public string weaponName;\n",[1608,28314,28315],{"class":1785,"line":1825},[1608,28316,28317],{},"    public Sprite icon;\n",[1608,28319,28320],{"class":1785,"line":1831},[1608,28321,28322],{},"    public GameObject prefab;\n",[1608,28324,28325],{"class":1785,"line":1333},[1608,28326,2249],{},[1608,28328,28329],{"class":1785,"line":2075},[1608,28330,28331],{},"    [Header(\"Stats\")]\n",[1608,28333,28334],{"class":1785,"line":2099},[1608,28335,28336],{},"    public float damage = 10f;\n",[1608,28338,28339],{"class":1785,"line":2119},[1608,28340,28341],{},"    public float fireRate = 1f;\n",[1608,28343,28344],{"class":1785,"line":2129},[1608,28345,28346],{},"    public int maxAmmo = 30;\n",[1608,28348,28349],{"class":1785,"line":1635},[1608,28350,28351],{},"    public float range = 50f;\n",[1608,28353,28354],{"class":1785,"line":2296},[1608,28355,2249],{},[1608,28357,28358],{"class":1785,"line":2302},[1608,28359,28360],{},"    [Header(\"Visual Effects\")]\n",[1608,28362,28363],{"class":1785,"line":2308},[1608,28364,28365],{},"    public ParticleSystem muzzleFlash;\n",[1608,28367,28368],{"class":1785,"line":3279},[1608,28369,28370],{},"    public AudioClip fireSound;\n",[1608,28372,28373],{"class":1785,"line":3284},[1608,28374,28375],{},"    public TrailRenderer bulletTrail;\n",[1608,28377,28378],{"class":1785,"line":3293},[1608,28379,2005],{},[73,28381,28383],{"id":28382},"scriptableobjects-المدفوعة-بالأحداث","ScriptableObjects المدفوعة بالأحداث",[30,28385,28386],{},[37,28387,28388],{},"نظام GameEvent:",[441,28390,28392],{"className":28274,"code":28391,"language":28276,"meta":16,"style":16},"using UnityEngine;\nusing UnityEngine.Events;\n\n[CreateAssetMenu(fileName = \"NewGameEvent\", menuName = \"Game/Game Event\")]\npublic class GameEvent : ScriptableObject\n{\n    [TextArea(3, 10)]\n    public string description;\n    \n    private UnityEvent onRaised = new UnityEvent();\n    \n    public void Raise()\n    {\n        onRaised.Invoke();\n    }\n    \n    public void RegisterListener(UnityAction listener)\n    {\n        onRaised.AddListener(listener);\n    }\n    \n    public void UnregisterListener(UnityAction listener)\n    {\n        onRaised.RemoveListener(listener);\n    }\n}\n",[448,28393,28394,28398,28403,28407,28412,28417,28421,28426,28431,28435,28440,28444,28449,28454,28459,28463,28467,28472,28476,28481,28485,28489,28494,28498,28503,28507],{"__ignoreMap":16},[1608,28395,28396],{"class":1785,"line":1786},[1608,28397,28283],{},[1608,28399,28400],{"class":1785,"line":1260},[1608,28401,28402],{},"using UnityEngine.Events;\n",[1608,28404,28405],{"class":1785,"line":17},[1608,28406,1805],{"emptyLinePlaceholder":1305},[1608,28408,28409],{"class":1785,"line":1802},[1608,28410,28411],{},"[CreateAssetMenu(fileName = \"NewGameEvent\", menuName = \"Game/Game Event\")]\n",[1608,28413,28414],{"class":1785,"line":1808},[1608,28415,28416],{},"public class GameEvent : ScriptableObject\n",[1608,28418,28419],{"class":1785,"line":1814},[1608,28420,28302],{},[1608,28422,28423],{"class":1785,"line":1820},[1608,28424,28425],{},"    [TextArea(3, 10)]\n",[1608,28427,28428],{"class":1785,"line":1825},[1608,28429,28430],{},"    public string description;\n",[1608,28432,28433],{"class":1785,"line":1831},[1608,28434,2249],{},[1608,28436,28437],{"class":1785,"line":1333},[1608,28438,28439],{},"    private UnityEvent onRaised = new UnityEvent();\n",[1608,28441,28442],{"class":1785,"line":2075},[1608,28443,2249],{},[1608,28445,28446],{"class":1785,"line":2099},[1608,28447,28448],{},"    public void Raise()\n",[1608,28450,28451],{"class":1785,"line":2119},[1608,28452,28453],{},"    {\n",[1608,28455,28456],{"class":1785,"line":2129},[1608,28457,28458],{},"        onRaised.Invoke();\n",[1608,28460,28461],{"class":1785,"line":1635},[1608,28462,2305],{},[1608,28464,28465],{"class":1785,"line":2296},[1608,28466,2249],{},[1608,28468,28469],{"class":1785,"line":2302},[1608,28470,28471],{},"    public void RegisterListener(UnityAction listener)\n",[1608,28473,28474],{"class":1785,"line":2308},[1608,28475,28453],{},[1608,28477,28478],{"class":1785,"line":3279},[1608,28479,28480],{},"        onRaised.AddListener(listener);\n",[1608,28482,28483],{"class":1785,"line":3284},[1608,28484,2305],{},[1608,28486,28487],{"class":1785,"line":3293},[1608,28488,2249],{},[1608,28490,28491],{"class":1785,"line":3298},[1608,28492,28493],{},"    public void UnregisterListener(UnityAction listener)\n",[1608,28495,28496],{"class":1785,"line":3308},[1608,28497,28453],{},[1608,28499,28500],{"class":1785,"line":3318},[1608,28501,28502],{},"        onRaised.RemoveListener(listener);\n",[1608,28504,28505],{"class":1785,"line":3342},[1608,28506,2305],{},[1608,28508,28509],{"class":1785,"line":3365},[1608,28510,2005],{},[68,28512,28514],{"id":28513},"_2-أنماط-التصميم-الأساسية-للألعاب","2. أنماط التصميم الأساسية للألعاب",[73,28516,28518],{"id":28517},"نمط-singleton-للمديرين-العامين","نمط Singleton للمديرين العامين",[441,28520,28522],{"className":28274,"code":28521,"language":28276,"meta":16,"style":16},"using UnityEngine;\n\npublic class GameManager : MonoBehaviour\n{\n    private static GameManager instance;\n    public static GameManager Instance\n    {\n        get\n        {\n            if (instance == null)\n            {\n                instance = FindObjectOfType\u003CGameManager>();\n                if (instance == null)\n                {\n                    GameObject obj = new GameObject(\"GameManager\");\n                    instance = obj.AddComponent\u003CGameManager>();\n                }\n            }\n            return instance;\n        }\n    }\n    \n    private void Awake()\n    {\n        if (instance != null && instance != this)\n        {\n            Destroy(gameObject);\n            return;\n        }\n        \n        instance = this;\n        DontDestroyOnLoad(gameObject);\n    }\n    \n    // Game state management\n    public int score = 0;\n    public bool isPaused = false;\n    \n    public void AddScore(int points)\n    {\n        score += points;\n        // Trigger score update events\n    }\n}\n",[448,28523,28524,28528,28532,28537,28541,28546,28551,28555,28560,28565,28570,28575,28580,28585,28590,28595,28600,28605,28610,28615,28619,28623,28627,28632,28636,28641,28645,28650,28655,28659,28664,28669,28674,28678,28682,28687,28692,28697,28701,28706,28710,28715,28720,28724],{"__ignoreMap":16},[1608,28525,28526],{"class":1785,"line":1786},[1608,28527,28283],{},[1608,28529,28530],{"class":1785,"line":1260},[1608,28531,1805],{"emptyLinePlaceholder":1305},[1608,28533,28534],{"class":1785,"line":17},[1608,28535,28536],{},"public class GameManager : MonoBehaviour\n",[1608,28538,28539],{"class":1785,"line":1802},[1608,28540,28302],{},[1608,28542,28543],{"class":1785,"line":1808},[1608,28544,28545],{},"    private static GameManager instance;\n",[1608,28547,28548],{"class":1785,"line":1814},[1608,28549,28550],{},"    public static GameManager Instance\n",[1608,28552,28553],{"class":1785,"line":1820},[1608,28554,28453],{},[1608,28556,28557],{"class":1785,"line":1825},[1608,28558,28559],{},"        get\n",[1608,28561,28562],{"class":1785,"line":1831},[1608,28563,28564],{},"        {\n",[1608,28566,28567],{"class":1785,"line":1333},[1608,28568,28569],{},"            if (instance == null)\n",[1608,28571,28572],{"class":1785,"line":2075},[1608,28573,28574],{},"            {\n",[1608,28576,28577],{"class":1785,"line":2099},[1608,28578,28579],{},"                instance = FindObjectOfType\u003CGameManager>();\n",[1608,28581,28582],{"class":1785,"line":2119},[1608,28583,28584],{},"                if (instance == null)\n",[1608,28586,28587],{"class":1785,"line":2129},[1608,28588,28589],{},"                {\n",[1608,28591,28592],{"class":1785,"line":1635},[1608,28593,28594],{},"                    GameObject obj = new GameObject(\"GameManager\");\n",[1608,28596,28597],{"class":1785,"line":2296},[1608,28598,28599],{},"                    instance = obj.AddComponent\u003CGameManager>();\n",[1608,28601,28602],{"class":1785,"line":2302},[1608,28603,28604],{},"                }\n",[1608,28606,28607],{"class":1785,"line":2308},[1608,28608,28609],{},"            }\n",[1608,28611,28612],{"class":1785,"line":3279},[1608,28613,28614],{},"            return instance;\n",[1608,28616,28617],{"class":1785,"line":3284},[1608,28618,2580],{},[1608,28620,28621],{"class":1785,"line":3293},[1608,28622,2305],{},[1608,28624,28625],{"class":1785,"line":3298},[1608,28626,2249],{},[1608,28628,28629],{"class":1785,"line":3308},[1608,28630,28631],{},"    private void Awake()\n",[1608,28633,28634],{"class":1785,"line":3318},[1608,28635,28453],{},[1608,28637,28638],{"class":1785,"line":3342},[1608,28639,28640],{},"        if (instance != null && instance != this)\n",[1608,28642,28643],{"class":1785,"line":3365},[1608,28644,28564],{},[1608,28646,28647],{"class":1785,"line":3402},[1608,28648,28649],{},"            Destroy(gameObject);\n",[1608,28651,28652],{"class":1785,"line":3412},[1608,28653,28654],{},"            return;\n",[1608,28656,28657],{"class":1785,"line":3704},[1608,28658,2580],{},[1608,28660,28661],{"class":1785,"line":3712},[1608,28662,28663],{},"        \n",[1608,28665,28666],{"class":1785,"line":3720},[1608,28667,28668],{},"        instance = this;\n",[1608,28670,28671],{"class":1785,"line":3728},[1608,28672,28673],{},"        DontDestroyOnLoad(gameObject);\n",[1608,28675,28676],{"class":1785,"line":3734},[1608,28677,2305],{},[1608,28679,28680],{"class":1785,"line":3739},[1608,28681,2249],{},[1608,28683,28684],{"class":1785,"line":4422},[1608,28685,28686],{},"    // Game state management\n",[1608,28688,28689],{"class":1785,"line":4431},[1608,28690,28691],{},"    public int score = 0;\n",[1608,28693,28694],{"class":1785,"line":4440},[1608,28695,28696],{},"    public bool isPaused = false;\n",[1608,28698,28699],{"class":1785,"line":12419},[1608,28700,2249],{},[1608,28702,28703],{"class":1785,"line":12427},[1608,28704,28705],{},"    public void AddScore(int points)\n",[1608,28707,28708],{"class":1785,"line":12436},[1608,28709,28453],{},[1608,28711,28712],{"class":1785,"line":12441},[1608,28713,28714],{},"        score += points;\n",[1608,28716,28717],{"class":1785,"line":12446},[1608,28718,28719],{},"        // Trigger score update events\n",[1608,28721,28722],{"class":1785,"line":13141},[1608,28723,2305],{},[1608,28725,28726],{"class":1785,"line":13146},[1608,28727,2005],{},[73,28729,28731],{"id":28730},"نمط-object-pool-لتحسين-الأداء","نمط Object Pool لتحسين الأداء",[441,28733,28735],{"className":28274,"code":28734,"language":28276,"meta":16,"style":16},"using System.Collections.Generic;\nusing UnityEngine;\n\npublic class ObjectPool\u003CT> : MonoBehaviour where T : Component\n{\n    [SerializeField] private T prefab;\n    [SerializeField] private int initialSize = 10;\n    \n    private Queue\u003CT> pool = new Queue\u003CT>();\n    private List\u003CT> activeObjects = new List\u003CT>();\n    \n    private void Awake()\n    {\n        InitializePool();\n    }\n    \n    private void InitializePool()\n    {\n        for (int i = 0; i \u003C initialSize; i++)\n        {\n            CreateNewObject();\n        }\n    }\n    \n    private T CreateNewObject()\n    {\n        T newObj = Instantiate(prefab, transform);\n        newObj.gameObject.SetActive(false);\n        pool.Enqueue(newObj);\n        return newObj;\n    }\n    \n    public T GetObject()\n    {\n        if (pool.Count == 0)\n        {\n            CreateNewObject();\n        }\n        \n        T obj = pool.Dequeue();\n        obj.gameObject.SetActive(true);\n        activeObjects.Add(obj);\n        return obj;\n    }\n    \n    public void ReturnObject(T obj)\n    {\n        obj.gameObject.SetActive(false);\n        activeObjects.Remove(obj);\n        pool.Enqueue(obj);\n    }\n    \n    public void ReturnAllObjects()\n    {\n        foreach (T obj in activeObjects.ToArray())\n        {\n            ReturnObject(obj);\n        }\n    }\n}\n",[448,28736,28737,28742,28746,28750,28755,28759,28764,28769,28773,28778,28783,28787,28791,28795,28800,28804,28808,28813,28817,28822,28826,28831,28835,28839,28843,28848,28852,28857,28862,28867,28872,28876,28880,28885,28889,28894,28898,28902,28906,28910,28915,28920,28925,28930,28934,28938,28943,28947,28952,28957,28962,28966,28971,28977,28982,28988,28993,28999,29004,29009],{"__ignoreMap":16},[1608,28738,28739],{"class":1785,"line":1786},[1608,28740,28741],{},"using System.Collections.Generic;\n",[1608,28743,28744],{"class":1785,"line":1260},[1608,28745,28283],{},[1608,28747,28748],{"class":1785,"line":17},[1608,28749,1805],{"emptyLinePlaceholder":1305},[1608,28751,28752],{"class":1785,"line":1802},[1608,28753,28754],{},"public class ObjectPool\u003CT> : MonoBehaviour where T : Component\n",[1608,28756,28757],{"class":1785,"line":1808},[1608,28758,28302],{},[1608,28760,28761],{"class":1785,"line":1814},[1608,28762,28763],{},"    [SerializeField] private T prefab;\n",[1608,28765,28766],{"class":1785,"line":1820},[1608,28767,28768],{},"    [SerializeField] private int initialSize = 10;\n",[1608,28770,28771],{"class":1785,"line":1825},[1608,28772,2249],{},[1608,28774,28775],{"class":1785,"line":1831},[1608,28776,28777],{},"    private Queue\u003CT> pool = new Queue\u003CT>();\n",[1608,28779,28780],{"class":1785,"line":1333},[1608,28781,28782],{},"    private List\u003CT> activeObjects = new List\u003CT>();\n",[1608,28784,28785],{"class":1785,"line":2075},[1608,28786,2249],{},[1608,28788,28789],{"class":1785,"line":2099},[1608,28790,28631],{},[1608,28792,28793],{"class":1785,"line":2119},[1608,28794,28453],{},[1608,28796,28797],{"class":1785,"line":2129},[1608,28798,28799],{},"        InitializePool();\n",[1608,28801,28802],{"class":1785,"line":1635},[1608,28803,2305],{},[1608,28805,28806],{"class":1785,"line":2296},[1608,28807,2249],{},[1608,28809,28810],{"class":1785,"line":2302},[1608,28811,28812],{},"    private void InitializePool()\n",[1608,28814,28815],{"class":1785,"line":2308},[1608,28816,28453],{},[1608,28818,28819],{"class":1785,"line":3279},[1608,28820,28821],{},"        for (int i = 0; i \u003C initialSize; i++)\n",[1608,28823,28824],{"class":1785,"line":3284},[1608,28825,28564],{},[1608,28827,28828],{"class":1785,"line":3293},[1608,28829,28830],{},"            CreateNewObject();\n",[1608,28832,28833],{"class":1785,"line":3298},[1608,28834,2580],{},[1608,28836,28837],{"class":1785,"line":3308},[1608,28838,2305],{},[1608,28840,28841],{"class":1785,"line":3318},[1608,28842,2249],{},[1608,28844,28845],{"class":1785,"line":3342},[1608,28846,28847],{},"    private T CreateNewObject()\n",[1608,28849,28850],{"class":1785,"line":3365},[1608,28851,28453],{},[1608,28853,28854],{"class":1785,"line":3402},[1608,28855,28856],{},"        T newObj = Instantiate(prefab, transform);\n",[1608,28858,28859],{"class":1785,"line":3412},[1608,28860,28861],{},"        newObj.gameObject.SetActive(false);\n",[1608,28863,28864],{"class":1785,"line":3704},[1608,28865,28866],{},"        pool.Enqueue(newObj);\n",[1608,28868,28869],{"class":1785,"line":3712},[1608,28870,28871],{},"        return newObj;\n",[1608,28873,28874],{"class":1785,"line":3720},[1608,28875,2305],{},[1608,28877,28878],{"class":1785,"line":3728},[1608,28879,2249],{},[1608,28881,28882],{"class":1785,"line":3734},[1608,28883,28884],{},"    public T GetObject()\n",[1608,28886,28887],{"class":1785,"line":3739},[1608,28888,28453],{},[1608,28890,28891],{"class":1785,"line":4422},[1608,28892,28893],{},"        if (pool.Count == 0)\n",[1608,28895,28896],{"class":1785,"line":4431},[1608,28897,28564],{},[1608,28899,28900],{"class":1785,"line":4440},[1608,28901,28830],{},[1608,28903,28904],{"class":1785,"line":12419},[1608,28905,2580],{},[1608,28907,28908],{"class":1785,"line":12427},[1608,28909,28663],{},[1608,28911,28912],{"class":1785,"line":12436},[1608,28913,28914],{},"        T obj = pool.Dequeue();\n",[1608,28916,28917],{"class":1785,"line":12441},[1608,28918,28919],{},"        obj.gameObject.SetActive(true);\n",[1608,28921,28922],{"class":1785,"line":12446},[1608,28923,28924],{},"        activeObjects.Add(obj);\n",[1608,28926,28927],{"class":1785,"line":13141},[1608,28928,28929],{},"        return obj;\n",[1608,28931,28932],{"class":1785,"line":13146},[1608,28933,2305],{},[1608,28935,28936],{"class":1785,"line":13172},[1608,28937,2249],{},[1608,28939,28940],{"class":1785,"line":13190},[1608,28941,28942],{},"    public void ReturnObject(T obj)\n",[1608,28944,28945],{"class":1785,"line":13195},[1608,28946,28453],{},[1608,28948,28949],{"class":1785,"line":13200},[1608,28950,28951],{},"        obj.gameObject.SetActive(false);\n",[1608,28953,28954],{"class":1785,"line":13226},[1608,28955,28956],{},"        activeObjects.Remove(obj);\n",[1608,28958,28959],{"class":1785,"line":13244},[1608,28960,28961],{},"        pool.Enqueue(obj);\n",[1608,28963,28964],{"class":1785,"line":13921},[1608,28965,2305],{},[1608,28967,28969],{"class":1785,"line":28968},52,[1608,28970,2249],{},[1608,28972,28974],{"class":1785,"line":28973},53,[1608,28975,28976],{},"    public void ReturnAllObjects()\n",[1608,28978,28980],{"class":1785,"line":28979},54,[1608,28981,28453],{},[1608,28983,28985],{"class":1785,"line":28984},55,[1608,28986,28987],{},"        foreach (T obj in activeObjects.ToArray())\n",[1608,28989,28991],{"class":1785,"line":28990},56,[1608,28992,28564],{},[1608,28994,28996],{"class":1785,"line":28995},57,[1608,28997,28998],{},"            ReturnObject(obj);\n",[1608,29000,29002],{"class":1785,"line":29001},58,[1608,29003,2580],{},[1608,29005,29007],{"class":1785,"line":29006},59,[1608,29008,2305],{},[1608,29010,29012],{"class":1785,"line":29011},60,[1608,29013,2005],{},[68,29015,29017],{"id":29016},"_3-مبادئ-solid-في-unity","3. مبادئ SOLID في Unity",[73,29019,29021],{"id":29020},"single-responsibility-principle-srp","Single Responsibility Principle (SRP)",[30,29023,29024],{},[37,29025,29026],{},"سيء - فئة تفعل الكثير:",[441,29028,29030],{"className":28274,"code":29029,"language":28276,"meta":16,"style":16},"public class Player : MonoBehaviour\n{\n    // Movement\n    public float speed = 5f;\n    private Rigidbody rb;\n    \n    // Health\n    public int maxHealth = 100;\n    private int currentHealth;\n    \n    // Animation\n    private Animator animator;\n    \n    // Input handling, collision detection, UI updates...\n}\n",[448,29031,29032,29037,29041,29046,29051,29056,29060,29065,29070,29075,29079,29084,29089,29093,29098],{"__ignoreMap":16},[1608,29033,29034],{"class":1785,"line":1786},[1608,29035,29036],{},"public class Player : MonoBehaviour\n",[1608,29038,29039],{"class":1785,"line":1260},[1608,29040,28302],{},[1608,29042,29043],{"class":1785,"line":17},[1608,29044,29045],{},"    // Movement\n",[1608,29047,29048],{"class":1785,"line":1802},[1608,29049,29050],{},"    public float speed = 5f;\n",[1608,29052,29053],{"class":1785,"line":1808},[1608,29054,29055],{},"    private Rigidbody rb;\n",[1608,29057,29058],{"class":1785,"line":1814},[1608,29059,2249],{},[1608,29061,29062],{"class":1785,"line":1820},[1608,29063,29064],{},"    // Health\n",[1608,29066,29067],{"class":1785,"line":1825},[1608,29068,29069],{},"    public int maxHealth = 100;\n",[1608,29071,29072],{"class":1785,"line":1831},[1608,29073,29074],{},"    private int currentHealth;\n",[1608,29076,29077],{"class":1785,"line":1333},[1608,29078,2249],{},[1608,29080,29081],{"class":1785,"line":2075},[1608,29082,29083],{},"    // Animation\n",[1608,29085,29086],{"class":1785,"line":2099},[1608,29087,29088],{},"    private Animator animator;\n",[1608,29090,29091],{"class":1785,"line":2119},[1608,29092,2249],{},[1608,29094,29095],{"class":1785,"line":2129},[1608,29096,29097],{},"    // Input handling, collision detection, UI updates...\n",[1608,29099,29100],{"class":1785,"line":1635},[1608,29101,2005],{},[30,29103,29104],{},[37,29105,29106],{},"جيد - فصل المسؤوليات:",[441,29108,29110],{"className":28274,"code":29109,"language":28276,"meta":16,"style":16},"public class PlayerMovement : MonoBehaviour\n{\n    [SerializeField] private float speed = 5f;\n    private Rigidbody rb;\n    \n    private void FixedUpdate()\n    {\n        float horizontal = Input.GetAxis(\"Horizontal\");\n        float vertical = Input.GetAxis(\"Vertical\");\n        \n        Vector3 movement = new Vector3(horizontal, 0f, vertical) * speed;\n        rb.AddForce(movement);\n    }\n}\n\npublic class PlayerHealth : MonoBehaviour\n{\n    [SerializeField] private int maxHealth = 100;\n    private int currentHealth;\n    \n    public event Action\u003Cint> OnHealthChanged;\n    public event Action OnDeath;\n    \n    private void Awake()\n    {\n        currentHealth = maxHealth;\n    }\n    \n    public void TakeDamage(int damage)\n    {\n        currentHealth -= damage;\n        OnHealthChanged?.Invoke(currentHealth);\n        \n        if (currentHealth \u003C= 0)\n        {\n            OnDeath?.Invoke();\n        }\n    }\n}\n",[448,29111,29112,29117,29121,29126,29130,29134,29139,29143,29148,29153,29157,29162,29167,29171,29175,29179,29184,29188,29193,29197,29201,29206,29211,29215,29219,29223,29228,29232,29236,29241,29245,29250,29255,29259,29264,29268,29273,29277,29281],{"__ignoreMap":16},[1608,29113,29114],{"class":1785,"line":1786},[1608,29115,29116],{},"public class PlayerMovement : MonoBehaviour\n",[1608,29118,29119],{"class":1785,"line":1260},[1608,29120,28302],{},[1608,29122,29123],{"class":1785,"line":17},[1608,29124,29125],{},"    [SerializeField] private float speed = 5f;\n",[1608,29127,29128],{"class":1785,"line":1802},[1608,29129,29055],{},[1608,29131,29132],{"class":1785,"line":1808},[1608,29133,2249],{},[1608,29135,29136],{"class":1785,"line":1814},[1608,29137,29138],{},"    private void FixedUpdate()\n",[1608,29140,29141],{"class":1785,"line":1820},[1608,29142,28453],{},[1608,29144,29145],{"class":1785,"line":1825},[1608,29146,29147],{},"        float horizontal = Input.GetAxis(\"Horizontal\");\n",[1608,29149,29150],{"class":1785,"line":1831},[1608,29151,29152],{},"        float vertical = Input.GetAxis(\"Vertical\");\n",[1608,29154,29155],{"class":1785,"line":1333},[1608,29156,28663],{},[1608,29158,29159],{"class":1785,"line":2075},[1608,29160,29161],{},"        Vector3 movement = new Vector3(horizontal, 0f, vertical) * speed;\n",[1608,29163,29164],{"class":1785,"line":2099},[1608,29165,29166],{},"        rb.AddForce(movement);\n",[1608,29168,29169],{"class":1785,"line":2119},[1608,29170,2305],{},[1608,29172,29173],{"class":1785,"line":2129},[1608,29174,2005],{},[1608,29176,29177],{"class":1785,"line":1635},[1608,29178,1805],{"emptyLinePlaceholder":1305},[1608,29180,29181],{"class":1785,"line":2296},[1608,29182,29183],{},"public class PlayerHealth : MonoBehaviour\n",[1608,29185,29186],{"class":1785,"line":2302},[1608,29187,28302],{},[1608,29189,29190],{"class":1785,"line":2308},[1608,29191,29192],{},"    [SerializeField] private int maxHealth = 100;\n",[1608,29194,29195],{"class":1785,"line":3279},[1608,29196,29074],{},[1608,29198,29199],{"class":1785,"line":3284},[1608,29200,2249],{},[1608,29202,29203],{"class":1785,"line":3293},[1608,29204,29205],{},"    public event Action\u003Cint> OnHealthChanged;\n",[1608,29207,29208],{"class":1785,"line":3298},[1608,29209,29210],{},"    public event Action OnDeath;\n",[1608,29212,29213],{"class":1785,"line":3308},[1608,29214,2249],{},[1608,29216,29217],{"class":1785,"line":3318},[1608,29218,28631],{},[1608,29220,29221],{"class":1785,"line":3342},[1608,29222,28453],{},[1608,29224,29225],{"class":1785,"line":3365},[1608,29226,29227],{},"        currentHealth = maxHealth;\n",[1608,29229,29230],{"class":1785,"line":3402},[1608,29231,2305],{},[1608,29233,29234],{"class":1785,"line":3412},[1608,29235,2249],{},[1608,29237,29238],{"class":1785,"line":3704},[1608,29239,29240],{},"    public void TakeDamage(int damage)\n",[1608,29242,29243],{"class":1785,"line":3712},[1608,29244,28453],{},[1608,29246,29247],{"class":1785,"line":3720},[1608,29248,29249],{},"        currentHealth -= damage;\n",[1608,29251,29252],{"class":1785,"line":3728},[1608,29253,29254],{},"        OnHealthChanged?.Invoke(currentHealth);\n",[1608,29256,29257],{"class":1785,"line":3734},[1608,29258,28663],{},[1608,29260,29261],{"class":1785,"line":3739},[1608,29262,29263],{},"        if (currentHealth \u003C= 0)\n",[1608,29265,29266],{"class":1785,"line":4422},[1608,29267,28564],{},[1608,29269,29270],{"class":1785,"line":4431},[1608,29271,29272],{},"            OnDeath?.Invoke();\n",[1608,29274,29275],{"class":1785,"line":4440},[1608,29276,2580],{},[1608,29278,29279],{"class":1785,"line":12419},[1608,29280,2305],{},[1608,29282,29283],{"class":1785,"line":12427},[1608,29284,2005],{},[73,29286,29288],{"id":29287},"dependency-inversion-principle-dip","Dependency Inversion Principle (DIP)",[30,29290,29291],{},[37,29292,29293],{},"استخدم الواجهات للتبعيات:",[441,29295,29297],{"className":28274,"code":29296,"language":28276,"meta":16,"style":16},"public interface IDamageable\n{\n    void TakeDamage(int damage);\n    bool IsAlive { get; }\n}\n\npublic interface IInteractable\n{\n    void Interact(GameObject interactor);\n    string InteractionPrompt { get; }\n}\n\npublic class Enemy : MonoBehaviour, IDamageable\n{\n    [SerializeField] private int maxHealth = 50;\n    private int currentHealth;\n    \n    public bool IsAlive => currentHealth > 0;\n    \n    private void Awake()\n    {\n        currentHealth = maxHealth;\n    }\n    \n    public void TakeDamage(int damage)\n    {\n        currentHealth -= damage;\n        if (currentHealth \u003C= 0)\n        {\n            Die();\n        }\n    }\n    \n    private void Die()\n    {\n        // Death logic\n        Destroy(gameObject);\n    }\n}\n",[448,29298,29299,29304,29308,29313,29318,29322,29326,29331,29335,29340,29345,29349,29353,29358,29362,29367,29371,29375,29380,29384,29388,29392,29396,29400,29404,29408,29412,29416,29420,29424,29429,29433,29437,29441,29446,29450,29455,29460,29464],{"__ignoreMap":16},[1608,29300,29301],{"class":1785,"line":1786},[1608,29302,29303],{},"public interface IDamageable\n",[1608,29305,29306],{"class":1785,"line":1260},[1608,29307,28302],{},[1608,29309,29310],{"class":1785,"line":17},[1608,29311,29312],{},"    void TakeDamage(int damage);\n",[1608,29314,29315],{"class":1785,"line":1802},[1608,29316,29317],{},"    bool IsAlive { get; }\n",[1608,29319,29320],{"class":1785,"line":1808},[1608,29321,2005],{},[1608,29323,29324],{"class":1785,"line":1814},[1608,29325,1805],{"emptyLinePlaceholder":1305},[1608,29327,29328],{"class":1785,"line":1820},[1608,29329,29330],{},"public interface IInteractable\n",[1608,29332,29333],{"class":1785,"line":1825},[1608,29334,28302],{},[1608,29336,29337],{"class":1785,"line":1831},[1608,29338,29339],{},"    void Interact(GameObject interactor);\n",[1608,29341,29342],{"class":1785,"line":1333},[1608,29343,29344],{},"    string InteractionPrompt { get; }\n",[1608,29346,29347],{"class":1785,"line":2075},[1608,29348,2005],{},[1608,29350,29351],{"class":1785,"line":2099},[1608,29352,1805],{"emptyLinePlaceholder":1305},[1608,29354,29355],{"class":1785,"line":2119},[1608,29356,29357],{},"public class Enemy : MonoBehaviour, IDamageable\n",[1608,29359,29360],{"class":1785,"line":2129},[1608,29361,28302],{},[1608,29363,29364],{"class":1785,"line":1635},[1608,29365,29366],{},"    [SerializeField] private int maxHealth = 50;\n",[1608,29368,29369],{"class":1785,"line":2296},[1608,29370,29074],{},[1608,29372,29373],{"class":1785,"line":2302},[1608,29374,2249],{},[1608,29376,29377],{"class":1785,"line":2308},[1608,29378,29379],{},"    public bool IsAlive => currentHealth > 0;\n",[1608,29381,29382],{"class":1785,"line":3279},[1608,29383,2249],{},[1608,29385,29386],{"class":1785,"line":3284},[1608,29387,28631],{},[1608,29389,29390],{"class":1785,"line":3293},[1608,29391,28453],{},[1608,29393,29394],{"class":1785,"line":3298},[1608,29395,29227],{},[1608,29397,29398],{"class":1785,"line":3308},[1608,29399,2305],{},[1608,29401,29402],{"class":1785,"line":3318},[1608,29403,2249],{},[1608,29405,29406],{"class":1785,"line":3342},[1608,29407,29240],{},[1608,29409,29410],{"class":1785,"line":3365},[1608,29411,28453],{},[1608,29413,29414],{"class":1785,"line":3402},[1608,29415,29249],{},[1608,29417,29418],{"class":1785,"line":3412},[1608,29419,29263],{},[1608,29421,29422],{"class":1785,"line":3704},[1608,29423,28564],{},[1608,29425,29426],{"class":1785,"line":3712},[1608,29427,29428],{},"            Die();\n",[1608,29430,29431],{"class":1785,"line":3720},[1608,29432,2580],{},[1608,29434,29435],{"class":1785,"line":3728},[1608,29436,2305],{},[1608,29438,29439],{"class":1785,"line":3734},[1608,29440,2249],{},[1608,29442,29443],{"class":1785,"line":3739},[1608,29444,29445],{},"    private void Die()\n",[1608,29447,29448],{"class":1785,"line":4422},[1608,29449,28453],{},[1608,29451,29452],{"class":1785,"line":4431},[1608,29453,29454],{},"        // Death logic\n",[1608,29456,29457],{"class":1785,"line":4440},[1608,29458,29459],{},"        Destroy(gameObject);\n",[1608,29461,29462],{"class":1785,"line":12419},[1608,29463,2305],{},[1608,29465,29466],{"class":1785,"line":12427},[1608,29467,2005],{},[68,29469,29471],{"id":29470},"_4-نظام-service-locator","4. نظام Service Locator",[441,29473,29475],{"className":28274,"code":29474,"language":28276,"meta":16,"style":16},"using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\npublic class ServiceLocator : MonoBehaviour\n{\n    private static ServiceLocator instance;\n    public static ServiceLocator Instance => instance;\n    \n    private readonly Dictionary\u003CType, object> services = new Dictionary\u003CType, object>();\n    \n    private void Awake()\n    {\n        if (instance != null && instance != this)\n        {\n            Destroy(gameObject);\n            return;\n        }\n        \n        instance = this;\n        DontDestroyOnLoad(gameObject);\n    }\n    \n    public void RegisterService\u003CT>(T service)\n    {\n        services[typeof(T)] = service;\n    }\n    \n    public void UnregisterService\u003CT>()\n    {\n        services.Remove(typeof(T));\n    }\n    \n    public T GetService\u003CT>()\n    {\n        if (services.TryGetValue(typeof(T), out object service))\n        {\n            return (T)service;\n        }\n        \n        throw new Exception($\"Service {typeof(T)} not registered!\");\n    }\n    \n    public bool TryGetService\u003CT>(out T service)\n    {\n        if (services.TryGetValue(typeof(T), out object obj))\n        {\n            service = (T)obj;\n            return true;\n        }\n        \n        service = default;\n        return false;\n    }\n}\n\n// Usage\npublic class AudioManager : MonoBehaviour\n{\n    private void Awake()\n    {\n        ServiceLocator.Instance.RegisterService\u003CAudioManager>(this);\n    }\n    \n    public void PlaySound(AudioClip clip)\n    {\n        // Play sound logic\n    }\n}\n\npublic class PlayerController : MonoBehaviour\n{\n    private AudioManager audioManager;\n    \n    private void Start()\n    {\n        audioManager = ServiceLocator.Instance.GetService\u003CAudioManager>();\n    }\n    \n    private void OnJump()\n    {\n        audioManager.PlaySound(jumpSound);\n    }\n}\n",[448,29476,29477,29482,29486,29490,29494,29499,29503,29508,29513,29517,29522,29526,29530,29534,29538,29542,29546,29550,29554,29558,29562,29566,29570,29574,29579,29583,29588,29592,29596,29601,29605,29610,29614,29618,29623,29627,29632,29636,29641,29645,29649,29654,29658,29662,29667,29671,29676,29680,29685,29690,29694,29698,29703,29708,29712,29716,29720,29725,29730,29734,29738,29743,29749,29754,29759,29765,29770,29776,29781,29786,29791,29797,29802,29808,29813,29819,29824,29830,29835,29840,29846,29851,29857,29862],{"__ignoreMap":16},[1608,29478,29479],{"class":1785,"line":1786},[1608,29480,29481],{},"using System;\n",[1608,29483,29484],{"class":1785,"line":1260},[1608,29485,28741],{},[1608,29487,29488],{"class":1785,"line":17},[1608,29489,28283],{},[1608,29491,29492],{"class":1785,"line":1802},[1608,29493,1805],{"emptyLinePlaceholder":1305},[1608,29495,29496],{"class":1785,"line":1808},[1608,29497,29498],{},"public class ServiceLocator : MonoBehaviour\n",[1608,29500,29501],{"class":1785,"line":1814},[1608,29502,28302],{},[1608,29504,29505],{"class":1785,"line":1820},[1608,29506,29507],{},"    private static ServiceLocator instance;\n",[1608,29509,29510],{"class":1785,"line":1825},[1608,29511,29512],{},"    public static ServiceLocator Instance => instance;\n",[1608,29514,29515],{"class":1785,"line":1831},[1608,29516,2249],{},[1608,29518,29519],{"class":1785,"line":1333},[1608,29520,29521],{},"    private readonly Dictionary\u003CType, object> services = new Dictionary\u003CType, object>();\n",[1608,29523,29524],{"class":1785,"line":2075},[1608,29525,2249],{},[1608,29527,29528],{"class":1785,"line":2099},[1608,29529,28631],{},[1608,29531,29532],{"class":1785,"line":2119},[1608,29533,28453],{},[1608,29535,29536],{"class":1785,"line":2129},[1608,29537,28640],{},[1608,29539,29540],{"class":1785,"line":1635},[1608,29541,28564],{},[1608,29543,29544],{"class":1785,"line":2296},[1608,29545,28649],{},[1608,29547,29548],{"class":1785,"line":2302},[1608,29549,28654],{},[1608,29551,29552],{"class":1785,"line":2308},[1608,29553,2580],{},[1608,29555,29556],{"class":1785,"line":3279},[1608,29557,28663],{},[1608,29559,29560],{"class":1785,"line":3284},[1608,29561,28668],{},[1608,29563,29564],{"class":1785,"line":3293},[1608,29565,28673],{},[1608,29567,29568],{"class":1785,"line":3298},[1608,29569,2305],{},[1608,29571,29572],{"class":1785,"line":3308},[1608,29573,2249],{},[1608,29575,29576],{"class":1785,"line":3318},[1608,29577,29578],{},"    public void RegisterService\u003CT>(T service)\n",[1608,29580,29581],{"class":1785,"line":3342},[1608,29582,28453],{},[1608,29584,29585],{"class":1785,"line":3365},[1608,29586,29587],{},"        services[typeof(T)] = service;\n",[1608,29589,29590],{"class":1785,"line":3402},[1608,29591,2305],{},[1608,29593,29594],{"class":1785,"line":3412},[1608,29595,2249],{},[1608,29597,29598],{"class":1785,"line":3704},[1608,29599,29600],{},"    public void UnregisterService\u003CT>()\n",[1608,29602,29603],{"class":1785,"line":3712},[1608,29604,28453],{},[1608,29606,29607],{"class":1785,"line":3720},[1608,29608,29609],{},"        services.Remove(typeof(T));\n",[1608,29611,29612],{"class":1785,"line":3728},[1608,29613,2305],{},[1608,29615,29616],{"class":1785,"line":3734},[1608,29617,2249],{},[1608,29619,29620],{"class":1785,"line":3739},[1608,29621,29622],{},"    public T GetService\u003CT>()\n",[1608,29624,29625],{"class":1785,"line":4422},[1608,29626,28453],{},[1608,29628,29629],{"class":1785,"line":4431},[1608,29630,29631],{},"        if (services.TryGetValue(typeof(T), out object service))\n",[1608,29633,29634],{"class":1785,"line":4440},[1608,29635,28564],{},[1608,29637,29638],{"class":1785,"line":12419},[1608,29639,29640],{},"            return (T)service;\n",[1608,29642,29643],{"class":1785,"line":12427},[1608,29644,2580],{},[1608,29646,29647],{"class":1785,"line":12436},[1608,29648,28663],{},[1608,29650,29651],{"class":1785,"line":12441},[1608,29652,29653],{},"        throw new Exception($\"Service {typeof(T)} not registered!\");\n",[1608,29655,29656],{"class":1785,"line":12446},[1608,29657,2305],{},[1608,29659,29660],{"class":1785,"line":13141},[1608,29661,2249],{},[1608,29663,29664],{"class":1785,"line":13146},[1608,29665,29666],{},"    public bool TryGetService\u003CT>(out T service)\n",[1608,29668,29669],{"class":1785,"line":13172},[1608,29670,28453],{},[1608,29672,29673],{"class":1785,"line":13190},[1608,29674,29675],{},"        if (services.TryGetValue(typeof(T), out object obj))\n",[1608,29677,29678],{"class":1785,"line":13195},[1608,29679,28564],{},[1608,29681,29682],{"class":1785,"line":13200},[1608,29683,29684],{},"            service = (T)obj;\n",[1608,29686,29687],{"class":1785,"line":13226},[1608,29688,29689],{},"            return true;\n",[1608,29691,29692],{"class":1785,"line":13244},[1608,29693,2580],{},[1608,29695,29696],{"class":1785,"line":13921},[1608,29697,28663],{},[1608,29699,29700],{"class":1785,"line":28968},[1608,29701,29702],{},"        service = default;\n",[1608,29704,29705],{"class":1785,"line":28973},[1608,29706,29707],{},"        return false;\n",[1608,29709,29710],{"class":1785,"line":28979},[1608,29711,2305],{},[1608,29713,29714],{"class":1785,"line":28984},[1608,29715,2005],{},[1608,29717,29718],{"class":1785,"line":28990},[1608,29719,1805],{"emptyLinePlaceholder":1305},[1608,29721,29722],{"class":1785,"line":28995},[1608,29723,29724],{},"// Usage\n",[1608,29726,29727],{"class":1785,"line":29001},[1608,29728,29729],{},"public class AudioManager : MonoBehaviour\n",[1608,29731,29732],{"class":1785,"line":29006},[1608,29733,28302],{},[1608,29735,29736],{"class":1785,"line":29011},[1608,29737,28631],{},[1608,29739,29741],{"class":1785,"line":29740},61,[1608,29742,28453],{},[1608,29744,29746],{"class":1785,"line":29745},62,[1608,29747,29748],{},"        ServiceLocator.Instance.RegisterService\u003CAudioManager>(this);\n",[1608,29750,29752],{"class":1785,"line":29751},63,[1608,29753,2305],{},[1608,29755,29757],{"class":1785,"line":29756},64,[1608,29758,2249],{},[1608,29760,29762],{"class":1785,"line":29761},65,[1608,29763,29764],{},"    public void PlaySound(AudioClip clip)\n",[1608,29766,29768],{"class":1785,"line":29767},66,[1608,29769,28453],{},[1608,29771,29773],{"class":1785,"line":29772},67,[1608,29774,29775],{},"        // Play sound logic\n",[1608,29777,29779],{"class":1785,"line":29778},68,[1608,29780,2305],{},[1608,29782,29784],{"class":1785,"line":29783},69,[1608,29785,2005],{},[1608,29787,29789],{"class":1785,"line":29788},70,[1608,29790,1805],{"emptyLinePlaceholder":1305},[1608,29792,29794],{"class":1785,"line":29793},71,[1608,29795,29796],{},"public class PlayerController : MonoBehaviour\n",[1608,29798,29800],{"class":1785,"line":29799},72,[1608,29801,28302],{},[1608,29803,29805],{"class":1785,"line":29804},73,[1608,29806,29807],{},"    private AudioManager audioManager;\n",[1608,29809,29811],{"class":1785,"line":29810},74,[1608,29812,2249],{},[1608,29814,29816],{"class":1785,"line":29815},75,[1608,29817,29818],{},"    private void Start()\n",[1608,29820,29822],{"class":1785,"line":29821},76,[1608,29823,28453],{},[1608,29825,29827],{"class":1785,"line":29826},77,[1608,29828,29829],{},"        audioManager = ServiceLocator.Instance.GetService\u003CAudioManager>();\n",[1608,29831,29833],{"class":1785,"line":29832},78,[1608,29834,2305],{},[1608,29836,29838],{"class":1785,"line":29837},79,[1608,29839,2249],{},[1608,29841,29843],{"class":1785,"line":29842},80,[1608,29844,29845],{},"    private void OnJump()\n",[1608,29847,29849],{"class":1785,"line":29848},81,[1608,29850,28453],{},[1608,29852,29854],{"class":1785,"line":29853},82,[1608,29855,29856],{},"        audioManager.PlaySound(jumpSound);\n",[1608,29858,29860],{"class":1785,"line":29859},83,[1608,29861,2305],{},[1608,29863,29865],{"class":1785,"line":29864},84,[1608,29866,2005],{},[68,29868,29870],{"id":29869},"_5-أنماط-state-للأعداء-واللاعبين","5. أنماط State للأعداء واللاعبين",[441,29872,29874],{"className":28274,"code":29873,"language":28276,"meta":16,"style":16},"using UnityEngine;\n\npublic abstract class State\n{\n    protected Enemy enemy;\n    \n    public State(Enemy enemy)\n    {\n        this.enemy = enemy;\n    }\n    \n    public abstract void Enter();\n    public abstract void Update();\n    public abstract void Exit();\n}\n\npublic class Enemy : MonoBehaviour\n{\n    [SerializeField] private float patrolSpeed = 2f;\n    [SerializeField] private float chaseSpeed = 4f;\n    [SerializeField] private float detectionRange = 10f;\n    \n    private State currentState;\n    \n    public Transform Player { get; set; }\n    public float Speed { get; set; } = 2f;\n    \n    private void Start()\n    {\n        Player = GameObject.FindGameObjectWithTag(\"Player\").transform;\n        ChangeState(new PatrolState(this));\n    }\n    \n    private void Update()\n    {\n        currentState?.Update();\n    }\n    \n    public void ChangeState(State newState)\n    {\n        currentState?.Exit();\n        currentState = newState;\n        currentState.Enter();\n    }\n    \n    public bool CanSeePlayer()\n    {\n        return Vector3.Distance(transform.position, Player.position) \u003C= detectionRange;\n    }\n}\n\npublic class PatrolState : State\n{\n    private Vector3 patrolPoint;\n    private float patrolTimer;\n    \n    public PatrolState(Enemy enemy) : base(enemy) { }\n    \n    public override void Enter()\n    {\n        enemy.Speed = enemy.patrolSpeed;\n        SetNewPatrolPoint();\n    }\n    \n    public override void Update()\n    {\n        patrolTimer -= Time.deltaTime;\n        \n        if (patrolTimer \u003C= 0)\n        {\n            SetNewPatrolPoint();\n        }\n        \n        // Move towards patrol point\n        enemy.transform.position = Vector3.MoveTowards(\n            enemy.transform.position, \n            patrolPoint, \n            enemy.Speed * Time.deltaTime\n        );\n        \n        if (enemy.CanSeePlayer())\n        {\n            enemy.ChangeState(new ChaseState(enemy));\n        }\n    }\n    \n    public override void Exit() { }\n    \n    private void SetNewPatrolPoint()\n    {\n        patrolTimer = Random.Range(3f, 8f);\n        patrolPoint = enemy.transform.position + \n            new Vector3(Random.Range(-5f, 5f), 0f, Random.Range(-5f, 5f));\n    }\n}\n\npublic class ChaseState : State\n{\n    public ChaseState(Enemy enemy) : base(enemy) { }\n    \n    public override void Enter()\n    {\n        enemy.Speed = enemy.chaseSpeed;\n    }\n    \n    public override void Update()\n    {\n        // Move towards player\n        enemy.transform.position = Vector3.MoveTowards(\n            enemy.transform.position,\n            enemy.Player.position,\n            enemy.Speed * Time.deltaTime\n        );\n        \n        if (!enemy.CanSeePlayer())\n        {\n            enemy.ChangeState(new PatrolState(enemy));\n        }\n    }\n    \n    public override void Exit() { }\n}\n",[448,29875,29876,29880,29884,29889,29893,29898,29902,29907,29911,29916,29920,29924,29929,29934,29939,29943,29947,29952,29956,29961,29966,29971,29975,29980,29984,29989,29994,29998,30002,30006,30011,30016,30020,30024,30029,30033,30038,30042,30046,30051,30055,30060,30065,30070,30074,30078,30083,30087,30092,30096,30100,30104,30109,30113,30118,30123,30127,30132,30136,30141,30145,30150,30155,30159,30163,30168,30172,30177,30181,30186,30190,30195,30199,30203,30208,30213,30218,30223,30228,30233,30237,30242,30246,30251,30255,30260,30265,30271,30276,30282,30287,30293,30299,30305,30310,30315,30320,30326,30331,30337,30342,30347,30352,30358,30363,30368,30373,30378,30384,30389,30395,30401,30406,30411,30416,30422,30427,30433,30438,30443,30448,30453],{"__ignoreMap":16},[1608,29877,29878],{"class":1785,"line":1786},[1608,29879,28283],{},[1608,29881,29882],{"class":1785,"line":1260},[1608,29883,1805],{"emptyLinePlaceholder":1305},[1608,29885,29886],{"class":1785,"line":17},[1608,29887,29888],{},"public abstract class State\n",[1608,29890,29891],{"class":1785,"line":1802},[1608,29892,28302],{},[1608,29894,29895],{"class":1785,"line":1808},[1608,29896,29897],{},"    protected Enemy enemy;\n",[1608,29899,29900],{"class":1785,"line":1814},[1608,29901,2249],{},[1608,29903,29904],{"class":1785,"line":1820},[1608,29905,29906],{},"    public State(Enemy enemy)\n",[1608,29908,29909],{"class":1785,"line":1825},[1608,29910,28453],{},[1608,29912,29913],{"class":1785,"line":1831},[1608,29914,29915],{},"        this.enemy = enemy;\n",[1608,29917,29918],{"class":1785,"line":1333},[1608,29919,2305],{},[1608,29921,29922],{"class":1785,"line":2075},[1608,29923,2249],{},[1608,29925,29926],{"class":1785,"line":2099},[1608,29927,29928],{},"    public abstract void Enter();\n",[1608,29930,29931],{"class":1785,"line":2119},[1608,29932,29933],{},"    public abstract void Update();\n",[1608,29935,29936],{"class":1785,"line":2129},[1608,29937,29938],{},"    public abstract void Exit();\n",[1608,29940,29941],{"class":1785,"line":1635},[1608,29942,2005],{},[1608,29944,29945],{"class":1785,"line":2296},[1608,29946,1805],{"emptyLinePlaceholder":1305},[1608,29948,29949],{"class":1785,"line":2302},[1608,29950,29951],{},"public class Enemy : MonoBehaviour\n",[1608,29953,29954],{"class":1785,"line":2308},[1608,29955,28302],{},[1608,29957,29958],{"class":1785,"line":3279},[1608,29959,29960],{},"    [SerializeField] private float patrolSpeed = 2f;\n",[1608,29962,29963],{"class":1785,"line":3284},[1608,29964,29965],{},"    [SerializeField] private float chaseSpeed = 4f;\n",[1608,29967,29968],{"class":1785,"line":3293},[1608,29969,29970],{},"    [SerializeField] private float detectionRange = 10f;\n",[1608,29972,29973],{"class":1785,"line":3298},[1608,29974,2249],{},[1608,29976,29977],{"class":1785,"line":3308},[1608,29978,29979],{},"    private State currentState;\n",[1608,29981,29982],{"class":1785,"line":3318},[1608,29983,2249],{},[1608,29985,29986],{"class":1785,"line":3342},[1608,29987,29988],{},"    public Transform Player { get; set; }\n",[1608,29990,29991],{"class":1785,"line":3365},[1608,29992,29993],{},"    public float Speed { get; set; } = 2f;\n",[1608,29995,29996],{"class":1785,"line":3402},[1608,29997,2249],{},[1608,29999,30000],{"class":1785,"line":3412},[1608,30001,29818],{},[1608,30003,30004],{"class":1785,"line":3704},[1608,30005,28453],{},[1608,30007,30008],{"class":1785,"line":3712},[1608,30009,30010],{},"        Player = GameObject.FindGameObjectWithTag(\"Player\").transform;\n",[1608,30012,30013],{"class":1785,"line":3720},[1608,30014,30015],{},"        ChangeState(new PatrolState(this));\n",[1608,30017,30018],{"class":1785,"line":3728},[1608,30019,2305],{},[1608,30021,30022],{"class":1785,"line":3734},[1608,30023,2249],{},[1608,30025,30026],{"class":1785,"line":3739},[1608,30027,30028],{},"    private void Update()\n",[1608,30030,30031],{"class":1785,"line":4422},[1608,30032,28453],{},[1608,30034,30035],{"class":1785,"line":4431},[1608,30036,30037],{},"        currentState?.Update();\n",[1608,30039,30040],{"class":1785,"line":4440},[1608,30041,2305],{},[1608,30043,30044],{"class":1785,"line":12419},[1608,30045,2249],{},[1608,30047,30048],{"class":1785,"line":12427},[1608,30049,30050],{},"    public void ChangeState(State newState)\n",[1608,30052,30053],{"class":1785,"line":12436},[1608,30054,28453],{},[1608,30056,30057],{"class":1785,"line":12441},[1608,30058,30059],{},"        currentState?.Exit();\n",[1608,30061,30062],{"class":1785,"line":12446},[1608,30063,30064],{},"        currentState = newState;\n",[1608,30066,30067],{"class":1785,"line":13141},[1608,30068,30069],{},"        currentState.Enter();\n",[1608,30071,30072],{"class":1785,"line":13146},[1608,30073,2305],{},[1608,30075,30076],{"class":1785,"line":13172},[1608,30077,2249],{},[1608,30079,30080],{"class":1785,"line":13190},[1608,30081,30082],{},"    public bool CanSeePlayer()\n",[1608,30084,30085],{"class":1785,"line":13195},[1608,30086,28453],{},[1608,30088,30089],{"class":1785,"line":13200},[1608,30090,30091],{},"        return Vector3.Distance(transform.position, Player.position) \u003C= detectionRange;\n",[1608,30093,30094],{"class":1785,"line":13226},[1608,30095,2305],{},[1608,30097,30098],{"class":1785,"line":13244},[1608,30099,2005],{},[1608,30101,30102],{"class":1785,"line":13921},[1608,30103,1805],{"emptyLinePlaceholder":1305},[1608,30105,30106],{"class":1785,"line":28968},[1608,30107,30108],{},"public class PatrolState : State\n",[1608,30110,30111],{"class":1785,"line":28973},[1608,30112,28302],{},[1608,30114,30115],{"class":1785,"line":28979},[1608,30116,30117],{},"    private Vector3 patrolPoint;\n",[1608,30119,30120],{"class":1785,"line":28984},[1608,30121,30122],{},"    private float patrolTimer;\n",[1608,30124,30125],{"class":1785,"line":28990},[1608,30126,2249],{},[1608,30128,30129],{"class":1785,"line":28995},[1608,30130,30131],{},"    public PatrolState(Enemy enemy) : base(enemy) { }\n",[1608,30133,30134],{"class":1785,"line":29001},[1608,30135,2249],{},[1608,30137,30138],{"class":1785,"line":29006},[1608,30139,30140],{},"    public override void Enter()\n",[1608,30142,30143],{"class":1785,"line":29011},[1608,30144,28453],{},[1608,30146,30147],{"class":1785,"line":29740},[1608,30148,30149],{},"        enemy.Speed = enemy.patrolSpeed;\n",[1608,30151,30152],{"class":1785,"line":29745},[1608,30153,30154],{},"        SetNewPatrolPoint();\n",[1608,30156,30157],{"class":1785,"line":29751},[1608,30158,2305],{},[1608,30160,30161],{"class":1785,"line":29756},[1608,30162,2249],{},[1608,30164,30165],{"class":1785,"line":29761},[1608,30166,30167],{},"    public override void Update()\n",[1608,30169,30170],{"class":1785,"line":29767},[1608,30171,28453],{},[1608,30173,30174],{"class":1785,"line":29772},[1608,30175,30176],{},"        patrolTimer -= Time.deltaTime;\n",[1608,30178,30179],{"class":1785,"line":29778},[1608,30180,28663],{},[1608,30182,30183],{"class":1785,"line":29783},[1608,30184,30185],{},"        if (patrolTimer \u003C= 0)\n",[1608,30187,30188],{"class":1785,"line":29788},[1608,30189,28564],{},[1608,30191,30192],{"class":1785,"line":29793},[1608,30193,30194],{},"            SetNewPatrolPoint();\n",[1608,30196,30197],{"class":1785,"line":29799},[1608,30198,2580],{},[1608,30200,30201],{"class":1785,"line":29804},[1608,30202,28663],{},[1608,30204,30205],{"class":1785,"line":29810},[1608,30206,30207],{},"        // Move towards patrol point\n",[1608,30209,30210],{"class":1785,"line":29815},[1608,30211,30212],{},"        enemy.transform.position = Vector3.MoveTowards(\n",[1608,30214,30215],{"class":1785,"line":29821},[1608,30216,30217],{},"            enemy.transform.position, \n",[1608,30219,30220],{"class":1785,"line":29826},[1608,30221,30222],{},"            patrolPoint, \n",[1608,30224,30225],{"class":1785,"line":29832},[1608,30226,30227],{},"            enemy.Speed * Time.deltaTime\n",[1608,30229,30230],{"class":1785,"line":29837},[1608,30231,30232],{},"        );\n",[1608,30234,30235],{"class":1785,"line":29842},[1608,30236,28663],{},[1608,30238,30239],{"class":1785,"line":29848},[1608,30240,30241],{},"        if (enemy.CanSeePlayer())\n",[1608,30243,30244],{"class":1785,"line":29853},[1608,30245,28564],{},[1608,30247,30248],{"class":1785,"line":29859},[1608,30249,30250],{},"            enemy.ChangeState(new ChaseState(enemy));\n",[1608,30252,30253],{"class":1785,"line":29864},[1608,30254,2580],{},[1608,30256,30258],{"class":1785,"line":30257},85,[1608,30259,2305],{},[1608,30261,30263],{"class":1785,"line":30262},86,[1608,30264,2249],{},[1608,30266,30268],{"class":1785,"line":30267},87,[1608,30269,30270],{},"    public override void Exit() { }\n",[1608,30272,30274],{"class":1785,"line":30273},88,[1608,30275,2249],{},[1608,30277,30279],{"class":1785,"line":30278},89,[1608,30280,30281],{},"    private void SetNewPatrolPoint()\n",[1608,30283,30285],{"class":1785,"line":30284},90,[1608,30286,28453],{},[1608,30288,30290],{"class":1785,"line":30289},91,[1608,30291,30292],{},"        patrolTimer = Random.Range(3f, 8f);\n",[1608,30294,30296],{"class":1785,"line":30295},92,[1608,30297,30298],{},"        patrolPoint = enemy.transform.position + \n",[1608,30300,30302],{"class":1785,"line":30301},93,[1608,30303,30304],{},"            new Vector3(Random.Range(-5f, 5f), 0f, Random.Range(-5f, 5f));\n",[1608,30306,30308],{"class":1785,"line":30307},94,[1608,30309,2305],{},[1608,30311,30313],{"class":1785,"line":30312},95,[1608,30314,2005],{},[1608,30316,30318],{"class":1785,"line":30317},96,[1608,30319,1805],{"emptyLinePlaceholder":1305},[1608,30321,30323],{"class":1785,"line":30322},97,[1608,30324,30325],{},"public class ChaseState : State\n",[1608,30327,30329],{"class":1785,"line":30328},98,[1608,30330,28302],{},[1608,30332,30334],{"class":1785,"line":30333},99,[1608,30335,30336],{},"    public ChaseState(Enemy enemy) : base(enemy) { }\n",[1608,30338,30340],{"class":1785,"line":30339},100,[1608,30341,2249],{},[1608,30343,30345],{"class":1785,"line":30344},101,[1608,30346,30140],{},[1608,30348,30350],{"class":1785,"line":30349},102,[1608,30351,28453],{},[1608,30353,30355],{"class":1785,"line":30354},103,[1608,30356,30357],{},"        enemy.Speed = enemy.chaseSpeed;\n",[1608,30359,30361],{"class":1785,"line":30360},104,[1608,30362,2305],{},[1608,30364,30366],{"class":1785,"line":30365},105,[1608,30367,2249],{},[1608,30369,30371],{"class":1785,"line":30370},106,[1608,30372,30167],{},[1608,30374,30376],{"class":1785,"line":30375},107,[1608,30377,28453],{},[1608,30379,30381],{"class":1785,"line":30380},108,[1608,30382,30383],{},"        // Move towards player\n",[1608,30385,30387],{"class":1785,"line":30386},109,[1608,30388,30212],{},[1608,30390,30392],{"class":1785,"line":30391},110,[1608,30393,30394],{},"            enemy.transform.position,\n",[1608,30396,30398],{"class":1785,"line":30397},111,[1608,30399,30400],{},"            enemy.Player.position,\n",[1608,30402,30404],{"class":1785,"line":30403},112,[1608,30405,30227],{},[1608,30407,30409],{"class":1785,"line":30408},113,[1608,30410,30232],{},[1608,30412,30414],{"class":1785,"line":30413},114,[1608,30415,28663],{},[1608,30417,30419],{"class":1785,"line":30418},115,[1608,30420,30421],{},"        if (!enemy.CanSeePlayer())\n",[1608,30423,30425],{"class":1785,"line":30424},116,[1608,30426,28564],{},[1608,30428,30430],{"class":1785,"line":30429},117,[1608,30431,30432],{},"            enemy.ChangeState(new PatrolState(enemy));\n",[1608,30434,30436],{"class":1785,"line":30435},118,[1608,30437,2580],{},[1608,30439,30441],{"class":1785,"line":30440},119,[1608,30442,2305],{},[1608,30444,30446],{"class":1785,"line":30445},120,[1608,30447,2249],{},[1608,30449,30451],{"class":1785,"line":30450},121,[1608,30452,30270],{},[1608,30454,30456],{"class":1785,"line":30455},122,[1608,30457,2005],{},[68,30459,30461],{"id":30460},"_6-نظام-saveload-قابل-للتوسع","6. نظام Save/Load قابل للتوسع",[441,30463,30465],{"className":28274,"code":30464,"language":28276,"meta":16,"style":16},"using System.IO;\nusing UnityEngine;\n\n[System.Serializable]\npublic class GameSaveData\n{\n    public int level;\n    public int score;\n    public Vector3 playerPosition;\n    public string[] inventory;\n    public bool[] completedLevels;\n}\n\npublic static class SaveLoadSystem\n{\n    private static readonly string saveFileName = \"gameSave.json\";\n    \n    public static void SaveGame(GameSaveData data)\n    {\n        string json = JsonUtility.ToJson(data, true);\n        string path = Path.Combine(Application.persistentDataPath, saveFileName);\n        File.WriteAllText(path, json);\n    }\n    \n    public static GameSaveData LoadGame()\n    {\n        string path = Path.Combine(Application.persistentDataPath, saveFileName);\n        \n        if (File.Exists(path))\n        {\n            string json = File.ReadAllText(path);\n            return JsonUtility.FromJson\u003CGameSaveData>(json);\n        }\n        \n        return new GameSaveData(); // Return default save\n    }\n    \n    public static bool HasSaveFile()\n    {\n        string path = Path.Combine(Application.persistentDataPath, saveFileName);\n        return File.Exists(path);\n    }\n    \n    public static void DeleteSaveFile()\n    {\n        string path = Path.Combine(Application.persistentDataPath, saveFileName);\n        if (File.Exists(path))\n        {\n            File.Delete(path);\n        }\n    }\n}\n\n// Usage\npublic class GameManager : MonoBehaviour\n{\n    public static GameManager Instance { get; private set; }\n    \n    public int currentLevel = 1;\n    public int score = 0;\n    public Vector3 playerPosition;\n    \n    private void Awake()\n    {\n        if (Instance == null)\n        {\n            Instance = this;\n            LoadGame();\n        }\n    }\n    \n    private void OnApplicationQuit()\n    {\n        SaveGame();\n    }\n    \n    public void SaveGame()\n    {\n        GameSaveData saveData = new GameSaveData\n        {\n            level = currentLevel,\n            score = score,\n            playerPosition = playerPosition,\n            // Add other save data\n        };\n        \n        SaveLoadSystem.SaveGame(saveData);\n    }\n    \n    public void LoadGame()\n    {\n        if (SaveLoadSystem.HasSaveFile())\n        {\n            GameSaveData saveData = SaveLoadSystem.LoadGame();\n            currentLevel = saveData.level;\n            score = saveData.score;\n            playerPosition = saveData.playerPosition;\n        }\n    }\n}\n",[448,30466,30467,30472,30476,30480,30485,30490,30494,30499,30504,30509,30514,30519,30523,30527,30532,30536,30541,30545,30550,30554,30559,30564,30569,30573,30577,30582,30586,30590,30594,30599,30603,30608,30613,30617,30621,30626,30630,30634,30639,30643,30647,30652,30656,30660,30665,30669,30673,30677,30681,30686,30690,30694,30698,30702,30706,30710,30714,30719,30723,30728,30732,30736,30740,30744,30748,30753,30757,30762,30767,30771,30775,30779,30784,30788,30793,30797,30801,30806,30810,30815,30819,30824,30829,30834,30839,30844,30848,30853,30857,30861,30866,30870,30875,30879,30884,30889,30894,30899,30903,30907],{"__ignoreMap":16},[1608,30468,30469],{"class":1785,"line":1786},[1608,30470,30471],{},"using System.IO;\n",[1608,30473,30474],{"class":1785,"line":1260},[1608,30475,28283],{},[1608,30477,30478],{"class":1785,"line":17},[1608,30479,1805],{"emptyLinePlaceholder":1305},[1608,30481,30482],{"class":1785,"line":1802},[1608,30483,30484],{},"[System.Serializable]\n",[1608,30486,30487],{"class":1785,"line":1808},[1608,30488,30489],{},"public class GameSaveData\n",[1608,30491,30492],{"class":1785,"line":1814},[1608,30493,28302],{},[1608,30495,30496],{"class":1785,"line":1820},[1608,30497,30498],{},"    public int level;\n",[1608,30500,30501],{"class":1785,"line":1825},[1608,30502,30503],{},"    public int score;\n",[1608,30505,30506],{"class":1785,"line":1831},[1608,30507,30508],{},"    public Vector3 playerPosition;\n",[1608,30510,30511],{"class":1785,"line":1333},[1608,30512,30513],{},"    public string[] inventory;\n",[1608,30515,30516],{"class":1785,"line":2075},[1608,30517,30518],{},"    public bool[] completedLevels;\n",[1608,30520,30521],{"class":1785,"line":2099},[1608,30522,2005],{},[1608,30524,30525],{"class":1785,"line":2119},[1608,30526,1805],{"emptyLinePlaceholder":1305},[1608,30528,30529],{"class":1785,"line":2129},[1608,30530,30531],{},"public static class SaveLoadSystem\n",[1608,30533,30534],{"class":1785,"line":1635},[1608,30535,28302],{},[1608,30537,30538],{"class":1785,"line":2296},[1608,30539,30540],{},"    private static readonly string saveFileName = \"gameSave.json\";\n",[1608,30542,30543],{"class":1785,"line":2302},[1608,30544,2249],{},[1608,30546,30547],{"class":1785,"line":2308},[1608,30548,30549],{},"    public static void SaveGame(GameSaveData data)\n",[1608,30551,30552],{"class":1785,"line":3279},[1608,30553,28453],{},[1608,30555,30556],{"class":1785,"line":3284},[1608,30557,30558],{},"        string json = JsonUtility.ToJson(data, true);\n",[1608,30560,30561],{"class":1785,"line":3293},[1608,30562,30563],{},"        string path = Path.Combine(Application.persistentDataPath, saveFileName);\n",[1608,30565,30566],{"class":1785,"line":3298},[1608,30567,30568],{},"        File.WriteAllText(path, json);\n",[1608,30570,30571],{"class":1785,"line":3308},[1608,30572,2305],{},[1608,30574,30575],{"class":1785,"line":3318},[1608,30576,2249],{},[1608,30578,30579],{"class":1785,"line":3342},[1608,30580,30581],{},"    public static GameSaveData LoadGame()\n",[1608,30583,30584],{"class":1785,"line":3365},[1608,30585,28453],{},[1608,30587,30588],{"class":1785,"line":3402},[1608,30589,30563],{},[1608,30591,30592],{"class":1785,"line":3412},[1608,30593,28663],{},[1608,30595,30596],{"class":1785,"line":3704},[1608,30597,30598],{},"        if (File.Exists(path))\n",[1608,30600,30601],{"class":1785,"line":3712},[1608,30602,28564],{},[1608,30604,30605],{"class":1785,"line":3720},[1608,30606,30607],{},"            string json = File.ReadAllText(path);\n",[1608,30609,30610],{"class":1785,"line":3728},[1608,30611,30612],{},"            return JsonUtility.FromJson\u003CGameSaveData>(json);\n",[1608,30614,30615],{"class":1785,"line":3734},[1608,30616,2580],{},[1608,30618,30619],{"class":1785,"line":3739},[1608,30620,28663],{},[1608,30622,30623],{"class":1785,"line":4422},[1608,30624,30625],{},"        return new GameSaveData(); // Return default save\n",[1608,30627,30628],{"class":1785,"line":4431},[1608,30629,2305],{},[1608,30631,30632],{"class":1785,"line":4440},[1608,30633,2249],{},[1608,30635,30636],{"class":1785,"line":12419},[1608,30637,30638],{},"    public static bool HasSaveFile()\n",[1608,30640,30641],{"class":1785,"line":12427},[1608,30642,28453],{},[1608,30644,30645],{"class":1785,"line":12436},[1608,30646,30563],{},[1608,30648,30649],{"class":1785,"line":12441},[1608,30650,30651],{},"        return File.Exists(path);\n",[1608,30653,30654],{"class":1785,"line":12446},[1608,30655,2305],{},[1608,30657,30658],{"class":1785,"line":13141},[1608,30659,2249],{},[1608,30661,30662],{"class":1785,"line":13146},[1608,30663,30664],{},"    public static void DeleteSaveFile()\n",[1608,30666,30667],{"class":1785,"line":13172},[1608,30668,28453],{},[1608,30670,30671],{"class":1785,"line":13190},[1608,30672,30563],{},[1608,30674,30675],{"class":1785,"line":13195},[1608,30676,30598],{},[1608,30678,30679],{"class":1785,"line":13200},[1608,30680,28564],{},[1608,30682,30683],{"class":1785,"line":13226},[1608,30684,30685],{},"            File.Delete(path);\n",[1608,30687,30688],{"class":1785,"line":13244},[1608,30689,2580],{},[1608,30691,30692],{"class":1785,"line":13921},[1608,30693,2305],{},[1608,30695,30696],{"class":1785,"line":28968},[1608,30697,2005],{},[1608,30699,30700],{"class":1785,"line":28973},[1608,30701,1805],{"emptyLinePlaceholder":1305},[1608,30703,30704],{"class":1785,"line":28979},[1608,30705,29724],{},[1608,30707,30708],{"class":1785,"line":28984},[1608,30709,28536],{},[1608,30711,30712],{"class":1785,"line":28990},[1608,30713,28302],{},[1608,30715,30716],{"class":1785,"line":28995},[1608,30717,30718],{},"    public static GameManager Instance { get; private set; }\n",[1608,30720,30721],{"class":1785,"line":29001},[1608,30722,2249],{},[1608,30724,30725],{"class":1785,"line":29006},[1608,30726,30727],{},"    public int currentLevel = 1;\n",[1608,30729,30730],{"class":1785,"line":29011},[1608,30731,28691],{},[1608,30733,30734],{"class":1785,"line":29740},[1608,30735,30508],{},[1608,30737,30738],{"class":1785,"line":29745},[1608,30739,2249],{},[1608,30741,30742],{"class":1785,"line":29751},[1608,30743,28631],{},[1608,30745,30746],{"class":1785,"line":29756},[1608,30747,28453],{},[1608,30749,30750],{"class":1785,"line":29761},[1608,30751,30752],{},"        if (Instance == null)\n",[1608,30754,30755],{"class":1785,"line":29767},[1608,30756,28564],{},[1608,30758,30759],{"class":1785,"line":29772},[1608,30760,30761],{},"            Instance = this;\n",[1608,30763,30764],{"class":1785,"line":29778},[1608,30765,30766],{},"            LoadGame();\n",[1608,30768,30769],{"class":1785,"line":29783},[1608,30770,2580],{},[1608,30772,30773],{"class":1785,"line":29788},[1608,30774,2305],{},[1608,30776,30777],{"class":1785,"line":29793},[1608,30778,2249],{},[1608,30780,30781],{"class":1785,"line":29799},[1608,30782,30783],{},"    private void OnApplicationQuit()\n",[1608,30785,30786],{"class":1785,"line":29804},[1608,30787,28453],{},[1608,30789,30790],{"class":1785,"line":29810},[1608,30791,30792],{},"        SaveGame();\n",[1608,30794,30795],{"class":1785,"line":29815},[1608,30796,2305],{},[1608,30798,30799],{"class":1785,"line":29821},[1608,30800,2249],{},[1608,30802,30803],{"class":1785,"line":29826},[1608,30804,30805],{},"    public void SaveGame()\n",[1608,30807,30808],{"class":1785,"line":29832},[1608,30809,28453],{},[1608,30811,30812],{"class":1785,"line":29837},[1608,30813,30814],{},"        GameSaveData saveData = new GameSaveData\n",[1608,30816,30817],{"class":1785,"line":29842},[1608,30818,28564],{},[1608,30820,30821],{"class":1785,"line":29848},[1608,30822,30823],{},"            level = currentLevel,\n",[1608,30825,30826],{"class":1785,"line":29853},[1608,30827,30828],{},"            score = score,\n",[1608,30830,30831],{"class":1785,"line":29859},[1608,30832,30833],{},"            playerPosition = playerPosition,\n",[1608,30835,30836],{"class":1785,"line":29864},[1608,30837,30838],{},"            // Add other save data\n",[1608,30840,30841],{"class":1785,"line":30257},[1608,30842,30843],{},"        };\n",[1608,30845,30846],{"class":1785,"line":30262},[1608,30847,28663],{},[1608,30849,30850],{"class":1785,"line":30267},[1608,30851,30852],{},"        SaveLoadSystem.SaveGame(saveData);\n",[1608,30854,30855],{"class":1785,"line":30273},[1608,30856,2305],{},[1608,30858,30859],{"class":1785,"line":30278},[1608,30860,2249],{},[1608,30862,30863],{"class":1785,"line":30284},[1608,30864,30865],{},"    public void LoadGame()\n",[1608,30867,30868],{"class":1785,"line":30289},[1608,30869,28453],{},[1608,30871,30872],{"class":1785,"line":30295},[1608,30873,30874],{},"        if (SaveLoadSystem.HasSaveFile())\n",[1608,30876,30877],{"class":1785,"line":30301},[1608,30878,28564],{},[1608,30880,30881],{"class":1785,"line":30307},[1608,30882,30883],{},"            GameSaveData saveData = SaveLoadSystem.LoadGame();\n",[1608,30885,30886],{"class":1785,"line":30312},[1608,30887,30888],{},"            currentLevel = saveData.level;\n",[1608,30890,30891],{"class":1785,"line":30317},[1608,30892,30893],{},"            score = saveData.score;\n",[1608,30895,30896],{"class":1785,"line":30322},[1608,30897,30898],{},"            playerPosition = saveData.playerPosition;\n",[1608,30900,30901],{"class":1785,"line":30328},[1608,30902,2580],{},[1608,30904,30905],{"class":1785,"line":30333},[1608,30906,2305],{},[1608,30908,30909],{"class":1785,"line":30339},[1608,30910,2005],{},[68,30912,30914],{"id":30913},"_7-نظام-input-قابل-للتخصيص","7. نظام Input قابل للتخصيص",[441,30916,30918],{"className":28274,"code":30917,"language":28276,"meta":16,"style":16},"using System;\nusing UnityEngine;\n\n[Serializable]\npublic class InputBinding\n{\n    public string actionName;\n    public KeyCode primaryKey;\n    public KeyCode secondaryKey;\n    \n    public bool IsPressed()\n    {\n        return Input.GetKey(primaryKey) || Input.GetKey(secondaryKey);\n    }\n    \n    public bool IsDown()\n    {\n        return Input.GetKeyDown(primaryKey) || Input.GetKeyDown(secondaryKey);\n    }\n    \n    public bool IsUp()\n    {\n        return Input.GetKeyUp(primaryKey) || Input.GetKeyUp(secondaryKey);\n    }\n}\n\npublic class InputManager : MonoBehaviour\n{\n    public static InputManager Instance { get; private set; }\n    \n    [Header(\"Movement\")]\n    public InputBinding moveUp = new InputBinding { actionName = \"Move Up\", primaryKey = KeyCode.W };\n    public InputBinding moveDown = new InputBinding { actionName = \"Move Down\", primaryKey = KeyCode.S };\n    public InputBinding moveLeft = new InputBinding { actionName = \"Move Left\", primaryKey = KeyCode.A };\n    public InputBinding moveRight = new InputBinding { actionName = \"Move Right\", primaryKey = KeyCode.D };\n    \n    [Header(\"Actions\")]\n    public InputBinding jump = new InputBinding { actionName = \"Jump\", primaryKey = KeyCode.Space };\n    public InputBinding interact = new InputBinding { actionName = \"Interact\", primaryKey = KeyCode.E };\n    \n    private void Awake()\n    {\n        if (Instance == null)\n        {\n            Instance = this;\n            DontDestroyOnLoad(gameObject);\n            LoadInputBindings();\n        }\n        else\n        {\n            Destroy(gameObject);\n        }\n    }\n    \n    // Public methods for checking input\n    public bool IsMovingUp() => moveUp.IsPressed();\n    public bool IsMovingDown() => moveDown.IsPressed();\n    public bool IsMovingLeft() => moveLeft.IsPressed();\n    public bool IsMovingRight() => moveRight.IsPressed();\n    \n    public bool JumpPressed() => jump.IsDown();\n    public bool InteractPressed() => interact.IsDown();\n    \n    // Save/Load input bindings\n    private void LoadInputBindings()\n    {\n        // Load from PlayerPrefs or file\n        // Implementation depends on your save system\n    }\n    \n    public void ResetToDefaults()\n    {\n        // Reset all bindings to default values\n    }\n}\n",[448,30919,30920,30924,30928,30932,30937,30942,30946,30951,30956,30961,30965,30970,30974,30979,30983,30987,30992,30996,31001,31005,31009,31014,31018,31023,31027,31031,31035,31040,31044,31049,31053,31058,31063,31068,31073,31078,31082,31087,31092,31097,31101,31105,31109,31113,31117,31121,31126,31131,31135,31140,31144,31148,31152,31156,31160,31165,31170,31175,31180,31185,31189,31194,31199,31203,31208,31213,31217,31222,31227,31231,31235,31240,31244,31249,31253],{"__ignoreMap":16},[1608,30921,30922],{"class":1785,"line":1786},[1608,30923,29481],{},[1608,30925,30926],{"class":1785,"line":1260},[1608,30927,28283],{},[1608,30929,30930],{"class":1785,"line":17},[1608,30931,1805],{"emptyLinePlaceholder":1305},[1608,30933,30934],{"class":1785,"line":1802},[1608,30935,30936],{},"[Serializable]\n",[1608,30938,30939],{"class":1785,"line":1808},[1608,30940,30941],{},"public class InputBinding\n",[1608,30943,30944],{"class":1785,"line":1814},[1608,30945,28302],{},[1608,30947,30948],{"class":1785,"line":1820},[1608,30949,30950],{},"    public string actionName;\n",[1608,30952,30953],{"class":1785,"line":1825},[1608,30954,30955],{},"    public KeyCode primaryKey;\n",[1608,30957,30958],{"class":1785,"line":1831},[1608,30959,30960],{},"    public KeyCode secondaryKey;\n",[1608,30962,30963],{"class":1785,"line":1333},[1608,30964,2249],{},[1608,30966,30967],{"class":1785,"line":2075},[1608,30968,30969],{},"    public bool IsPressed()\n",[1608,30971,30972],{"class":1785,"line":2099},[1608,30973,28453],{},[1608,30975,30976],{"class":1785,"line":2119},[1608,30977,30978],{},"        return Input.GetKey(primaryKey) || Input.GetKey(secondaryKey);\n",[1608,30980,30981],{"class":1785,"line":2129},[1608,30982,2305],{},[1608,30984,30985],{"class":1785,"line":1635},[1608,30986,2249],{},[1608,30988,30989],{"class":1785,"line":2296},[1608,30990,30991],{},"    public bool IsDown()\n",[1608,30993,30994],{"class":1785,"line":2302},[1608,30995,28453],{},[1608,30997,30998],{"class":1785,"line":2308},[1608,30999,31000],{},"        return Input.GetKeyDown(primaryKey) || Input.GetKeyDown(secondaryKey);\n",[1608,31002,31003],{"class":1785,"line":3279},[1608,31004,2305],{},[1608,31006,31007],{"class":1785,"line":3284},[1608,31008,2249],{},[1608,31010,31011],{"class":1785,"line":3293},[1608,31012,31013],{},"    public bool IsUp()\n",[1608,31015,31016],{"class":1785,"line":3298},[1608,31017,28453],{},[1608,31019,31020],{"class":1785,"line":3308},[1608,31021,31022],{},"        return Input.GetKeyUp(primaryKey) || Input.GetKeyUp(secondaryKey);\n",[1608,31024,31025],{"class":1785,"line":3318},[1608,31026,2305],{},[1608,31028,31029],{"class":1785,"line":3342},[1608,31030,2005],{},[1608,31032,31033],{"class":1785,"line":3365},[1608,31034,1805],{"emptyLinePlaceholder":1305},[1608,31036,31037],{"class":1785,"line":3402},[1608,31038,31039],{},"public class InputManager : MonoBehaviour\n",[1608,31041,31042],{"class":1785,"line":3412},[1608,31043,28302],{},[1608,31045,31046],{"class":1785,"line":3704},[1608,31047,31048],{},"    public static InputManager Instance { get; private set; }\n",[1608,31050,31051],{"class":1785,"line":3712},[1608,31052,2249],{},[1608,31054,31055],{"class":1785,"line":3720},[1608,31056,31057],{},"    [Header(\"Movement\")]\n",[1608,31059,31060],{"class":1785,"line":3728},[1608,31061,31062],{},"    public InputBinding moveUp = new InputBinding { actionName = \"Move Up\", primaryKey = KeyCode.W };\n",[1608,31064,31065],{"class":1785,"line":3734},[1608,31066,31067],{},"    public InputBinding moveDown = new InputBinding { actionName = \"Move Down\", primaryKey = KeyCode.S };\n",[1608,31069,31070],{"class":1785,"line":3739},[1608,31071,31072],{},"    public InputBinding moveLeft = new InputBinding { actionName = \"Move Left\", primaryKey = KeyCode.A };\n",[1608,31074,31075],{"class":1785,"line":4422},[1608,31076,31077],{},"    public InputBinding moveRight = new InputBinding { actionName = \"Move Right\", primaryKey = KeyCode.D };\n",[1608,31079,31080],{"class":1785,"line":4431},[1608,31081,2249],{},[1608,31083,31084],{"class":1785,"line":4440},[1608,31085,31086],{},"    [Header(\"Actions\")]\n",[1608,31088,31089],{"class":1785,"line":12419},[1608,31090,31091],{},"    public InputBinding jump = new InputBinding { actionName = \"Jump\", primaryKey = KeyCode.Space };\n",[1608,31093,31094],{"class":1785,"line":12427},[1608,31095,31096],{},"    public InputBinding interact = new InputBinding { actionName = \"Interact\", primaryKey = KeyCode.E };\n",[1608,31098,31099],{"class":1785,"line":12436},[1608,31100,2249],{},[1608,31102,31103],{"class":1785,"line":12441},[1608,31104,28631],{},[1608,31106,31107],{"class":1785,"line":12446},[1608,31108,28453],{},[1608,31110,31111],{"class":1785,"line":13141},[1608,31112,30752],{},[1608,31114,31115],{"class":1785,"line":13146},[1608,31116,28564],{},[1608,31118,31119],{"class":1785,"line":13172},[1608,31120,30761],{},[1608,31122,31123],{"class":1785,"line":13190},[1608,31124,31125],{},"            DontDestroyOnLoad(gameObject);\n",[1608,31127,31128],{"class":1785,"line":13195},[1608,31129,31130],{},"            LoadInputBindings();\n",[1608,31132,31133],{"class":1785,"line":13200},[1608,31134,2580],{},[1608,31136,31137],{"class":1785,"line":13226},[1608,31138,31139],{},"        else\n",[1608,31141,31142],{"class":1785,"line":13244},[1608,31143,28564],{},[1608,31145,31146],{"class":1785,"line":13921},[1608,31147,28649],{},[1608,31149,31150],{"class":1785,"line":28968},[1608,31151,2580],{},[1608,31153,31154],{"class":1785,"line":28973},[1608,31155,2305],{},[1608,31157,31158],{"class":1785,"line":28979},[1608,31159,2249],{},[1608,31161,31162],{"class":1785,"line":28984},[1608,31163,31164],{},"    // Public methods for checking input\n",[1608,31166,31167],{"class":1785,"line":28990},[1608,31168,31169],{},"    public bool IsMovingUp() => moveUp.IsPressed();\n",[1608,31171,31172],{"class":1785,"line":28995},[1608,31173,31174],{},"    public bool IsMovingDown() => moveDown.IsPressed();\n",[1608,31176,31177],{"class":1785,"line":29001},[1608,31178,31179],{},"    public bool IsMovingLeft() => moveLeft.IsPressed();\n",[1608,31181,31182],{"class":1785,"line":29006},[1608,31183,31184],{},"    public bool IsMovingRight() => moveRight.IsPressed();\n",[1608,31186,31187],{"class":1785,"line":29011},[1608,31188,2249],{},[1608,31190,31191],{"class":1785,"line":29740},[1608,31192,31193],{},"    public bool JumpPressed() => jump.IsDown();\n",[1608,31195,31196],{"class":1785,"line":29745},[1608,31197,31198],{},"    public bool InteractPressed() => interact.IsDown();\n",[1608,31200,31201],{"class":1785,"line":29751},[1608,31202,2249],{},[1608,31204,31205],{"class":1785,"line":29756},[1608,31206,31207],{},"    // Save/Load input bindings\n",[1608,31209,31210],{"class":1785,"line":29761},[1608,31211,31212],{},"    private void LoadInputBindings()\n",[1608,31214,31215],{"class":1785,"line":29767},[1608,31216,28453],{},[1608,31218,31219],{"class":1785,"line":29772},[1608,31220,31221],{},"        // Load from PlayerPrefs or file\n",[1608,31223,31224],{"class":1785,"line":29778},[1608,31225,31226],{},"        // Implementation depends on your save system\n",[1608,31228,31229],{"class":1785,"line":29783},[1608,31230,2305],{},[1608,31232,31233],{"class":1785,"line":29788},[1608,31234,2249],{},[1608,31236,31237],{"class":1785,"line":29793},[1608,31238,31239],{},"    public void ResetToDefaults()\n",[1608,31241,31242],{"class":1785,"line":29799},[1608,31243,28453],{},[1608,31245,31246],{"class":1785,"line":29804},[1608,31247,31248],{},"        // Reset all bindings to default values\n",[1608,31250,31251],{"class":1785,"line":29810},[1608,31252,2305],{},[1608,31254,31255],{"class":1785,"line":29815},[1608,31256,2005],{},[68,31258,31260],{"id":31259},"_8-نظام-ui-قابل-للتوسع","8. نظام UI قابل للتوسع",[441,31262,31264],{"className":28274,"code":31263,"language":28276,"meta":16,"style":16},"using UnityEngine;\nusing UnityEngine.UI;\nusing TMPro;\n\npublic abstract class UIManager : MonoBehaviour\n{\n    protected Canvas canvas;\n    protected GraphicRaycaster raycaster;\n    \n    protected virtual void Awake()\n    {\n        canvas = GetComponent\u003CCanvas>();\n        raycaster = GetComponent\u003CGraphicRaycaster>();\n    }\n    \n    public virtual void Show()\n    {\n        canvas.enabled = true;\n    }\n    \n    public virtual void Hide()\n    {\n        canvas.enabled = false;\n    }\n    \n    public virtual void Toggle()\n    {\n        canvas.enabled = !canvas.enabled;\n    }\n}\n\npublic class HUDManager : UIManager\n{\n    [SerializeField] private TextMeshProUGUI scoreText;\n    [SerializeField] private TextMeshProUGUI healthText;\n    [SerializeField] private Slider healthBar;\n    \n    private void Start()\n    {\n        UpdateScore(0);\n        UpdateHealth(100, 100);\n    }\n    \n    public void UpdateScore(int score)\n    {\n        scoreText.text = $\"Score: {score}\";\n    }\n    \n    public void UpdateHealth(int current, int max)\n    {\n        healthText.text = $\"{current}/{max}\";\n        healthBar.value = (float)current / max;\n    }\n}\n\npublic class PauseMenuManager : UIManager\n{\n    [SerializeField] private Button resumeButton;\n    [SerializeField] private Button settingsButton;\n    [SerializeField] private Button quitButton;\n    \n    protected override void Awake()\n    {\n        base.Awake();\n        \n        resumeButton.onClick.AddListener(ResumeGame);\n        settingsButton.onClick.AddListener(OpenSettings);\n        quitButton.onClick.AddListener(QuitGame);\n    }\n    \n    private void ResumeGame()\n    {\n        Time.timeScale = 1f;\n        Hide();\n    }\n    \n    private void OpenSettings()\n    {\n        // Open settings menu\n    }\n    \n    private void QuitGame()\n    {\n        Application.Quit();\n    }\n}\n",[448,31265,31266,31270,31275,31280,31284,31289,31293,31298,31303,31307,31312,31316,31321,31326,31330,31334,31339,31343,31348,31352,31356,31361,31365,31370,31374,31378,31383,31387,31392,31396,31400,31404,31409,31413,31418,31423,31428,31432,31436,31440,31445,31450,31454,31458,31463,31467,31472,31476,31480,31485,31489,31494,31499,31503,31507,31511,31516,31520,31525,31530,31535,31539,31544,31548,31553,31557,31562,31567,31572,31576,31580,31585,31589,31594,31599,31603,31607,31612,31616,31621,31625,31629,31634,31638,31643,31647],{"__ignoreMap":16},[1608,31267,31268],{"class":1785,"line":1786},[1608,31269,28283],{},[1608,31271,31272],{"class":1785,"line":1260},[1608,31273,31274],{},"using UnityEngine.UI;\n",[1608,31276,31277],{"class":1785,"line":17},[1608,31278,31279],{},"using TMPro;\n",[1608,31281,31282],{"class":1785,"line":1802},[1608,31283,1805],{"emptyLinePlaceholder":1305},[1608,31285,31286],{"class":1785,"line":1808},[1608,31287,31288],{},"public abstract class UIManager : MonoBehaviour\n",[1608,31290,31291],{"class":1785,"line":1814},[1608,31292,28302],{},[1608,31294,31295],{"class":1785,"line":1820},[1608,31296,31297],{},"    protected Canvas canvas;\n",[1608,31299,31300],{"class":1785,"line":1825},[1608,31301,31302],{},"    protected GraphicRaycaster raycaster;\n",[1608,31304,31305],{"class":1785,"line":1831},[1608,31306,2249],{},[1608,31308,31309],{"class":1785,"line":1333},[1608,31310,31311],{},"    protected virtual void Awake()\n",[1608,31313,31314],{"class":1785,"line":2075},[1608,31315,28453],{},[1608,31317,31318],{"class":1785,"line":2099},[1608,31319,31320],{},"        canvas = GetComponent\u003CCanvas>();\n",[1608,31322,31323],{"class":1785,"line":2119},[1608,31324,31325],{},"        raycaster = GetComponent\u003CGraphicRaycaster>();\n",[1608,31327,31328],{"class":1785,"line":2129},[1608,31329,2305],{},[1608,31331,31332],{"class":1785,"line":1635},[1608,31333,2249],{},[1608,31335,31336],{"class":1785,"line":2296},[1608,31337,31338],{},"    public virtual void Show()\n",[1608,31340,31341],{"class":1785,"line":2302},[1608,31342,28453],{},[1608,31344,31345],{"class":1785,"line":2308},[1608,31346,31347],{},"        canvas.enabled = true;\n",[1608,31349,31350],{"class":1785,"line":3279},[1608,31351,2305],{},[1608,31353,31354],{"class":1785,"line":3284},[1608,31355,2249],{},[1608,31357,31358],{"class":1785,"line":3293},[1608,31359,31360],{},"    public virtual void Hide()\n",[1608,31362,31363],{"class":1785,"line":3298},[1608,31364,28453],{},[1608,31366,31367],{"class":1785,"line":3308},[1608,31368,31369],{},"        canvas.enabled = false;\n",[1608,31371,31372],{"class":1785,"line":3318},[1608,31373,2305],{},[1608,31375,31376],{"class":1785,"line":3342},[1608,31377,2249],{},[1608,31379,31380],{"class":1785,"line":3365},[1608,31381,31382],{},"    public virtual void Toggle()\n",[1608,31384,31385],{"class":1785,"line":3402},[1608,31386,28453],{},[1608,31388,31389],{"class":1785,"line":3412},[1608,31390,31391],{},"        canvas.enabled = !canvas.enabled;\n",[1608,31393,31394],{"class":1785,"line":3704},[1608,31395,2305],{},[1608,31397,31398],{"class":1785,"line":3712},[1608,31399,2005],{},[1608,31401,31402],{"class":1785,"line":3720},[1608,31403,1805],{"emptyLinePlaceholder":1305},[1608,31405,31406],{"class":1785,"line":3728},[1608,31407,31408],{},"public class HUDManager : UIManager\n",[1608,31410,31411],{"class":1785,"line":3734},[1608,31412,28302],{},[1608,31414,31415],{"class":1785,"line":3739},[1608,31416,31417],{},"    [SerializeField] private TextMeshProUGUI scoreText;\n",[1608,31419,31420],{"class":1785,"line":4422},[1608,31421,31422],{},"    [SerializeField] private TextMeshProUGUI healthText;\n",[1608,31424,31425],{"class":1785,"line":4431},[1608,31426,31427],{},"    [SerializeField] private Slider healthBar;\n",[1608,31429,31430],{"class":1785,"line":4440},[1608,31431,2249],{},[1608,31433,31434],{"class":1785,"line":12419},[1608,31435,29818],{},[1608,31437,31438],{"class":1785,"line":12427},[1608,31439,28453],{},[1608,31441,31442],{"class":1785,"line":12436},[1608,31443,31444],{},"        UpdateScore(0);\n",[1608,31446,31447],{"class":1785,"line":12441},[1608,31448,31449],{},"        UpdateHealth(100, 100);\n",[1608,31451,31452],{"class":1785,"line":12446},[1608,31453,2305],{},[1608,31455,31456],{"class":1785,"line":13141},[1608,31457,2249],{},[1608,31459,31460],{"class":1785,"line":13146},[1608,31461,31462],{},"    public void UpdateScore(int score)\n",[1608,31464,31465],{"class":1785,"line":13172},[1608,31466,28453],{},[1608,31468,31469],{"class":1785,"line":13190},[1608,31470,31471],{},"        scoreText.text = $\"Score: {score}\";\n",[1608,31473,31474],{"class":1785,"line":13195},[1608,31475,2305],{},[1608,31477,31478],{"class":1785,"line":13200},[1608,31479,2249],{},[1608,31481,31482],{"class":1785,"line":13226},[1608,31483,31484],{},"    public void UpdateHealth(int current, int max)\n",[1608,31486,31487],{"class":1785,"line":13244},[1608,31488,28453],{},[1608,31490,31491],{"class":1785,"line":13921},[1608,31492,31493],{},"        healthText.text = $\"{current}/{max}\";\n",[1608,31495,31496],{"class":1785,"line":28968},[1608,31497,31498],{},"        healthBar.value = (float)current / max;\n",[1608,31500,31501],{"class":1785,"line":28973},[1608,31502,2305],{},[1608,31504,31505],{"class":1785,"line":28979},[1608,31506,2005],{},[1608,31508,31509],{"class":1785,"line":28984},[1608,31510,1805],{"emptyLinePlaceholder":1305},[1608,31512,31513],{"class":1785,"line":28990},[1608,31514,31515],{},"public class PauseMenuManager : UIManager\n",[1608,31517,31518],{"class":1785,"line":28995},[1608,31519,28302],{},[1608,31521,31522],{"class":1785,"line":29001},[1608,31523,31524],{},"    [SerializeField] private Button resumeButton;\n",[1608,31526,31527],{"class":1785,"line":29006},[1608,31528,31529],{},"    [SerializeField] private Button settingsButton;\n",[1608,31531,31532],{"class":1785,"line":29011},[1608,31533,31534],{},"    [SerializeField] private Button quitButton;\n",[1608,31536,31537],{"class":1785,"line":29740},[1608,31538,2249],{},[1608,31540,31541],{"class":1785,"line":29745},[1608,31542,31543],{},"    protected override void Awake()\n",[1608,31545,31546],{"class":1785,"line":29751},[1608,31547,28453],{},[1608,31549,31550],{"class":1785,"line":29756},[1608,31551,31552],{},"        base.Awake();\n",[1608,31554,31555],{"class":1785,"line":29761},[1608,31556,28663],{},[1608,31558,31559],{"class":1785,"line":29767},[1608,31560,31561],{},"        resumeButton.onClick.AddListener(ResumeGame);\n",[1608,31563,31564],{"class":1785,"line":29772},[1608,31565,31566],{},"        settingsButton.onClick.AddListener(OpenSettings);\n",[1608,31568,31569],{"class":1785,"line":29778},[1608,31570,31571],{},"        quitButton.onClick.AddListener(QuitGame);\n",[1608,31573,31574],{"class":1785,"line":29783},[1608,31575,2305],{},[1608,31577,31578],{"class":1785,"line":29788},[1608,31579,2249],{},[1608,31581,31582],{"class":1785,"line":29793},[1608,31583,31584],{},"    private void ResumeGame()\n",[1608,31586,31587],{"class":1785,"line":29799},[1608,31588,28453],{},[1608,31590,31591],{"class":1785,"line":29804},[1608,31592,31593],{},"        Time.timeScale = 1f;\n",[1608,31595,31596],{"class":1785,"line":29810},[1608,31597,31598],{},"        Hide();\n",[1608,31600,31601],{"class":1785,"line":29815},[1608,31602,2305],{},[1608,31604,31605],{"class":1785,"line":29821},[1608,31606,2249],{},[1608,31608,31609],{"class":1785,"line":29826},[1608,31610,31611],{},"    private void OpenSettings()\n",[1608,31613,31614],{"class":1785,"line":29832},[1608,31615,28453],{},[1608,31617,31618],{"class":1785,"line":29837},[1608,31619,31620],{},"        // Open settings menu\n",[1608,31622,31623],{"class":1785,"line":29842},[1608,31624,2305],{},[1608,31626,31627],{"class":1785,"line":29848},[1608,31628,2249],{},[1608,31630,31631],{"class":1785,"line":29853},[1608,31632,31633],{},"    private void QuitGame()\n",[1608,31635,31636],{"class":1785,"line":29859},[1608,31637,28453],{},[1608,31639,31640],{"class":1785,"line":29864},[1608,31641,31642],{},"        Application.Quit();\n",[1608,31644,31645],{"class":1785,"line":30257},[1608,31646,2305],{},[1608,31648,31649],{"class":1785,"line":30262},[1608,31650,2005],{},[68,31652,31654],{"id":31653},"_9-نظام-audio-قابل-للإدارة","9. نظام Audio قابل للإدارة",[441,31656,31658],{"className":28274,"code":31657,"language":28276,"meta":16,"style":16},"using System.Collections.Generic;\nusing UnityEngine;\n\n[System.Serializable]\npublic class Sound\n{\n    public string name;\n    public AudioClip clip;\n    \n    [Range(0f, 1f)]\n    public float volume = 1f;\n    \n    [Range(0.1f, 3f)]\n    public float pitch = 1f;\n    \n    public bool loop = false;\n    \n    [HideInInspector]\n    public AudioSource source;\n}\n\npublic class AudioManager : MonoBehaviour\n{\n    public static AudioManager Instance { get; private set; }\n    \n    [SerializeField] private Sound[] sounds;\n    [SerializeField] private AudioSource musicSource;\n    [SerializeField] private AudioSource sfxSource;\n    \n    private Dictionary\u003Cstring, Sound> soundDictionary;\n    \n    private void Awake()\n    {\n        if (Instance == null)\n        {\n            Instance = this;\n            DontDestroyOnLoad(gameObject);\n            InitializeAudio();\n        }\n        else\n        {\n            Destroy(gameObject);\n        }\n    }\n    \n    private void InitializeAudio()\n    {\n        soundDictionary = new Dictionary\u003Cstring, Sound>();\n        \n        foreach (Sound sound in sounds)\n        {\n            sound.source = gameObject.AddComponent\u003CAudioSource>();\n            sound.source.clip = sound.clip;\n            sound.source.volume = sound.volume;\n            sound.source.pitch = sound.pitch;\n            sound.source.loop = sound.loop;\n            \n            soundDictionary[sound.name] = sound;\n        }\n    }\n    \n    public void Play(string soundName)\n    {\n        if (soundDictionary.TryGetValue(soundName, out Sound sound))\n        {\n            sound.source.Play();\n        }\n        else\n        {\n            Debug.LogWarning($\"Sound {soundName} not found!\");\n        }\n    }\n    \n    public void Stop(string soundName)\n    {\n        if (soundDictionary.TryGetValue(soundName, out Sound sound))\n        {\n            sound.source.Stop();\n        }\n    }\n    \n    public void SetVolume(string soundName, float volume)\n    {\n        if (soundDictionary.TryGetValue(soundName, out Sound sound))\n        {\n            sound.source.volume = volume;\n        }\n    }\n    \n    public void PlayMusic(AudioClip musicClip)\n    {\n        musicSource.clip = musicClip;\n        musicSource.Play();\n    }\n    \n    public void StopMusic()\n    {\n        musicSource.Stop();\n    }\n    \n    public void SetMusicVolume(float volume)\n    {\n        musicSource.volume = volume;\n    }\n}\n",[448,31659,31660,31664,31668,31672,31676,31681,31685,31690,31695,31699,31704,31709,31713,31718,31723,31727,31732,31736,31741,31746,31750,31754,31758,31762,31767,31771,31776,31781,31786,31790,31795,31799,31803,31807,31811,31815,31819,31823,31828,31832,31836,31840,31844,31848,31852,31856,31861,31865,31870,31874,31879,31883,31888,31893,31898,31903,31908,31913,31918,31922,31926,31930,31935,31939,31944,31948,31953,31957,31961,31965,31970,31974,31978,31982,31987,31991,31995,31999,32004,32008,32012,32016,32021,32025,32029,32033,32038,32042,32046,32050,32055,32059,32064,32069,32073,32077,32082,32086,32091,32095,32099,32104,32108,32113,32117],{"__ignoreMap":16},[1608,31661,31662],{"class":1785,"line":1786},[1608,31663,28741],{},[1608,31665,31666],{"class":1785,"line":1260},[1608,31667,28283],{},[1608,31669,31670],{"class":1785,"line":17},[1608,31671,1805],{"emptyLinePlaceholder":1305},[1608,31673,31674],{"class":1785,"line":1802},[1608,31675,30484],{},[1608,31677,31678],{"class":1785,"line":1808},[1608,31679,31680],{},"public class Sound\n",[1608,31682,31683],{"class":1785,"line":1814},[1608,31684,28302],{},[1608,31686,31687],{"class":1785,"line":1820},[1608,31688,31689],{},"    public string name;\n",[1608,31691,31692],{"class":1785,"line":1825},[1608,31693,31694],{},"    public AudioClip clip;\n",[1608,31696,31697],{"class":1785,"line":1831},[1608,31698,2249],{},[1608,31700,31701],{"class":1785,"line":1333},[1608,31702,31703],{},"    [Range(0f, 1f)]\n",[1608,31705,31706],{"class":1785,"line":2075},[1608,31707,31708],{},"    public float volume = 1f;\n",[1608,31710,31711],{"class":1785,"line":2099},[1608,31712,2249],{},[1608,31714,31715],{"class":1785,"line":2119},[1608,31716,31717],{},"    [Range(0.1f, 3f)]\n",[1608,31719,31720],{"class":1785,"line":2129},[1608,31721,31722],{},"    public float pitch = 1f;\n",[1608,31724,31725],{"class":1785,"line":1635},[1608,31726,2249],{},[1608,31728,31729],{"class":1785,"line":2296},[1608,31730,31731],{},"    public bool loop = false;\n",[1608,31733,31734],{"class":1785,"line":2302},[1608,31735,2249],{},[1608,31737,31738],{"class":1785,"line":2308},[1608,31739,31740],{},"    [HideInInspector]\n",[1608,31742,31743],{"class":1785,"line":3279},[1608,31744,31745],{},"    public AudioSource source;\n",[1608,31747,31748],{"class":1785,"line":3284},[1608,31749,2005],{},[1608,31751,31752],{"class":1785,"line":3293},[1608,31753,1805],{"emptyLinePlaceholder":1305},[1608,31755,31756],{"class":1785,"line":3298},[1608,31757,29729],{},[1608,31759,31760],{"class":1785,"line":3308},[1608,31761,28302],{},[1608,31763,31764],{"class":1785,"line":3318},[1608,31765,31766],{},"    public static AudioManager Instance { get; private set; }\n",[1608,31768,31769],{"class":1785,"line":3342},[1608,31770,2249],{},[1608,31772,31773],{"class":1785,"line":3365},[1608,31774,31775],{},"    [SerializeField] private Sound[] sounds;\n",[1608,31777,31778],{"class":1785,"line":3402},[1608,31779,31780],{},"    [SerializeField] private AudioSource musicSource;\n",[1608,31782,31783],{"class":1785,"line":3412},[1608,31784,31785],{},"    [SerializeField] private AudioSource sfxSource;\n",[1608,31787,31788],{"class":1785,"line":3704},[1608,31789,2249],{},[1608,31791,31792],{"class":1785,"line":3712},[1608,31793,31794],{},"    private Dictionary\u003Cstring, Sound> soundDictionary;\n",[1608,31796,31797],{"class":1785,"line":3720},[1608,31798,2249],{},[1608,31800,31801],{"class":1785,"line":3728},[1608,31802,28631],{},[1608,31804,31805],{"class":1785,"line":3734},[1608,31806,28453],{},[1608,31808,31809],{"class":1785,"line":3739},[1608,31810,30752],{},[1608,31812,31813],{"class":1785,"line":4422},[1608,31814,28564],{},[1608,31816,31817],{"class":1785,"line":4431},[1608,31818,30761],{},[1608,31820,31821],{"class":1785,"line":4440},[1608,31822,31125],{},[1608,31824,31825],{"class":1785,"line":12419},[1608,31826,31827],{},"            InitializeAudio();\n",[1608,31829,31830],{"class":1785,"line":12427},[1608,31831,2580],{},[1608,31833,31834],{"class":1785,"line":12436},[1608,31835,31139],{},[1608,31837,31838],{"class":1785,"line":12441},[1608,31839,28564],{},[1608,31841,31842],{"class":1785,"line":12446},[1608,31843,28649],{},[1608,31845,31846],{"class":1785,"line":13141},[1608,31847,2580],{},[1608,31849,31850],{"class":1785,"line":13146},[1608,31851,2305],{},[1608,31853,31854],{"class":1785,"line":13172},[1608,31855,2249],{},[1608,31857,31858],{"class":1785,"line":13190},[1608,31859,31860],{},"    private void InitializeAudio()\n",[1608,31862,31863],{"class":1785,"line":13195},[1608,31864,28453],{},[1608,31866,31867],{"class":1785,"line":13200},[1608,31868,31869],{},"        soundDictionary = new Dictionary\u003Cstring, Sound>();\n",[1608,31871,31872],{"class":1785,"line":13226},[1608,31873,28663],{},[1608,31875,31876],{"class":1785,"line":13244},[1608,31877,31878],{},"        foreach (Sound sound in sounds)\n",[1608,31880,31881],{"class":1785,"line":13921},[1608,31882,28564],{},[1608,31884,31885],{"class":1785,"line":28968},[1608,31886,31887],{},"            sound.source = gameObject.AddComponent\u003CAudioSource>();\n",[1608,31889,31890],{"class":1785,"line":28973},[1608,31891,31892],{},"            sound.source.clip = sound.clip;\n",[1608,31894,31895],{"class":1785,"line":28979},[1608,31896,31897],{},"            sound.source.volume = sound.volume;\n",[1608,31899,31900],{"class":1785,"line":28984},[1608,31901,31902],{},"            sound.source.pitch = sound.pitch;\n",[1608,31904,31905],{"class":1785,"line":28990},[1608,31906,31907],{},"            sound.source.loop = sound.loop;\n",[1608,31909,31910],{"class":1785,"line":28995},[1608,31911,31912],{},"            \n",[1608,31914,31915],{"class":1785,"line":29001},[1608,31916,31917],{},"            soundDictionary[sound.name] = sound;\n",[1608,31919,31920],{"class":1785,"line":29006},[1608,31921,2580],{},[1608,31923,31924],{"class":1785,"line":29011},[1608,31925,2305],{},[1608,31927,31928],{"class":1785,"line":29740},[1608,31929,2249],{},[1608,31931,31932],{"class":1785,"line":29745},[1608,31933,31934],{},"    public void Play(string soundName)\n",[1608,31936,31937],{"class":1785,"line":29751},[1608,31938,28453],{},[1608,31940,31941],{"class":1785,"line":29756},[1608,31942,31943],{},"        if (soundDictionary.TryGetValue(soundName, out Sound sound))\n",[1608,31945,31946],{"class":1785,"line":29761},[1608,31947,28564],{},[1608,31949,31950],{"class":1785,"line":29767},[1608,31951,31952],{},"            sound.source.Play();\n",[1608,31954,31955],{"class":1785,"line":29772},[1608,31956,2580],{},[1608,31958,31959],{"class":1785,"line":29778},[1608,31960,31139],{},[1608,31962,31963],{"class":1785,"line":29783},[1608,31964,28564],{},[1608,31966,31967],{"class":1785,"line":29788},[1608,31968,31969],{},"            Debug.LogWarning($\"Sound {soundName} not found!\");\n",[1608,31971,31972],{"class":1785,"line":29793},[1608,31973,2580],{},[1608,31975,31976],{"class":1785,"line":29799},[1608,31977,2305],{},[1608,31979,31980],{"class":1785,"line":29804},[1608,31981,2249],{},[1608,31983,31984],{"class":1785,"line":29810},[1608,31985,31986],{},"    public void Stop(string soundName)\n",[1608,31988,31989],{"class":1785,"line":29815},[1608,31990,28453],{},[1608,31992,31993],{"class":1785,"line":29821},[1608,31994,31943],{},[1608,31996,31997],{"class":1785,"line":29826},[1608,31998,28564],{},[1608,32000,32001],{"class":1785,"line":29832},[1608,32002,32003],{},"            sound.source.Stop();\n",[1608,32005,32006],{"class":1785,"line":29837},[1608,32007,2580],{},[1608,32009,32010],{"class":1785,"line":29842},[1608,32011,2305],{},[1608,32013,32014],{"class":1785,"line":29848},[1608,32015,2249],{},[1608,32017,32018],{"class":1785,"line":29853},[1608,32019,32020],{},"    public void SetVolume(string soundName, float volume)\n",[1608,32022,32023],{"class":1785,"line":29859},[1608,32024,28453],{},[1608,32026,32027],{"class":1785,"line":29864},[1608,32028,31943],{},[1608,32030,32031],{"class":1785,"line":30257},[1608,32032,28564],{},[1608,32034,32035],{"class":1785,"line":30262},[1608,32036,32037],{},"            sound.source.volume = volume;\n",[1608,32039,32040],{"class":1785,"line":30267},[1608,32041,2580],{},[1608,32043,32044],{"class":1785,"line":30273},[1608,32045,2305],{},[1608,32047,32048],{"class":1785,"line":30278},[1608,32049,2249],{},[1608,32051,32052],{"class":1785,"line":30284},[1608,32053,32054],{},"    public void PlayMusic(AudioClip musicClip)\n",[1608,32056,32057],{"class":1785,"line":30289},[1608,32058,28453],{},[1608,32060,32061],{"class":1785,"line":30295},[1608,32062,32063],{},"        musicSource.clip = musicClip;\n",[1608,32065,32066],{"class":1785,"line":30301},[1608,32067,32068],{},"        musicSource.Play();\n",[1608,32070,32071],{"class":1785,"line":30307},[1608,32072,2305],{},[1608,32074,32075],{"class":1785,"line":30312},[1608,32076,2249],{},[1608,32078,32079],{"class":1785,"line":30317},[1608,32080,32081],{},"    public void StopMusic()\n",[1608,32083,32084],{"class":1785,"line":30322},[1608,32085,28453],{},[1608,32087,32088],{"class":1785,"line":30328},[1608,32089,32090],{},"        musicSource.Stop();\n",[1608,32092,32093],{"class":1785,"line":30333},[1608,32094,2305],{},[1608,32096,32097],{"class":1785,"line":30339},[1608,32098,2249],{},[1608,32100,32101],{"class":1785,"line":30344},[1608,32102,32103],{},"    public void SetMusicVolume(float volume)\n",[1608,32105,32106],{"class":1785,"line":30349},[1608,32107,28453],{},[1608,32109,32110],{"class":1785,"line":30354},[1608,32111,32112],{},"        musicSource.volume = volume;\n",[1608,32114,32115],{"class":1785,"line":30360},[1608,32116,2305],{},[1608,32118,32119],{"class":1785,"line":30365},[1608,32120,2005],{},[68,32122,32124],{"id":32123},"_10-نظام-physics-محسن-للأداء","10. نظام Physics محسن للأداء",[441,32126,32128],{"className":28274,"code":32127,"language":28276,"meta":16,"style":16},"using UnityEngine;\n\npublic class OptimizedPhysics : MonoBehaviour\n{\n    [Header(\"Physics Settings\")]\n    [SerializeField] private float fixedTimeStep = 0.02f;\n    [SerializeField] private int maximumAllowedTimestep = 1;\n    [SerializeField] private int solverIterations = 6;\n    [SerializeField] private int solverVelocityIterations = 1;\n    \n    [Header(\"Layer Collision Matrix\")]\n    [SerializeField] private LayerMask playerLayer;\n    [SerializeField] private LayerMask enemyLayer;\n    [SerializeField] private LayerMask projectileLayer;\n    [SerializeField] private LayerMask environmentLayer;\n    \n    private void Awake()\n    {\n        ConfigurePhysics();\n        SetupCollisionMatrix();\n    }\n    \n    private void ConfigurePhysics()\n    {\n        Time.fixedDeltaTime = fixedTimeStep;\n        Physics.defaultMaxAngularSpeed = maximumAllowedTimestep;\n        \n        // Configure solver iterations for better performance\n        Physics.defaultSolverIterations = solverIterations;\n        Physics.defaultSolverVelocityIterations = solverVelocityIterations;\n        \n        // Enable auto-simulation if needed\n        Physics.autoSimulation = true;\n        \n        // Configure physics gravity if needed\n        Physics.gravity = new Vector3(0, -9.81f, 0);\n    }\n    \n    private void SetupCollisionMatrix()\n    {\n        // Disable unnecessary collisions for performance\n        // Players don't collide with other players\n        Physics.IgnoreLayerCollision(playerLayer, playerLayer, true);\n        \n        // Projectiles don't collide with other projectiles\n        Physics.IgnoreLayerCollision(projectileLayer, projectileLayer, true);\n        \n        // Enemies don't collide with other enemies (use custom collision detection)\n        Physics.IgnoreLayerCollision(enemyLayer, enemyLayer, true);\n    }\n    \n    // Performance monitoring\n    private void Update()\n    {\n        // Monitor physics performance\n        if (Time.frameCount % 60 == 0) // Every second at 60 FPS\n        {\n            MonitorPhysicsPerformance();\n        }\n    }\n    \n    private void MonitorPhysicsPerformance()\n    {\n        int activeBodies = Physics.Bodies.Count;\n        int activeColliders = FindObjectsOfType\u003CCollider>().Length;\n        \n        // Log or send to analytics if performance is degrading\n        if (activeBodies > 1000 || activeColliders > 5000)\n        {\n            Debug.LogWarning($\"High physics load: {activeBodies} bodies, {activeColliders} colliders\");\n        }\n    }\n    \n    // Public methods for runtime physics control\n    public void PausePhysics()\n    {\n        Physics.autoSimulation = false;\n    }\n    \n    public void ResumePhysics()\n    {\n        Physics.autoSimulation = true;\n        Physics.Simulate(Time.fixedDeltaTime);\n    }\n    \n    public void SetTimeScale(float timeScale)\n    {\n        Time.timeScale = timeScale;\n        Time.fixedDeltaTime = fixedTimeStep * timeScale;\n    }\n}\n",[448,32129,32130,32134,32138,32143,32147,32152,32157,32162,32167,32172,32176,32181,32186,32191,32196,32201,32205,32209,32213,32218,32223,32227,32231,32236,32240,32245,32250,32254,32259,32264,32269,32273,32278,32283,32287,32292,32297,32301,32305,32310,32314,32319,32324,32329,32333,32338,32343,32347,32352,32357,32361,32365,32370,32374,32378,32383,32388,32392,32397,32401,32405,32409,32414,32418,32423,32428,32432,32437,32442,32446,32451,32455,32459,32463,32468,32473,32477,32482,32486,32490,32495,32499,32503,32508,32512,32516,32521,32525,32530,32535,32539],{"__ignoreMap":16},[1608,32131,32132],{"class":1785,"line":1786},[1608,32133,28283],{},[1608,32135,32136],{"class":1785,"line":1260},[1608,32137,1805],{"emptyLinePlaceholder":1305},[1608,32139,32140],{"class":1785,"line":17},[1608,32141,32142],{},"public class OptimizedPhysics : MonoBehaviour\n",[1608,32144,32145],{"class":1785,"line":1802},[1608,32146,28302],{},[1608,32148,32149],{"class":1785,"line":1808},[1608,32150,32151],{},"    [Header(\"Physics Settings\")]\n",[1608,32153,32154],{"class":1785,"line":1814},[1608,32155,32156],{},"    [SerializeField] private float fixedTimeStep = 0.02f;\n",[1608,32158,32159],{"class":1785,"line":1820},[1608,32160,32161],{},"    [SerializeField] private int maximumAllowedTimestep = 1;\n",[1608,32163,32164],{"class":1785,"line":1825},[1608,32165,32166],{},"    [SerializeField] private int solverIterations = 6;\n",[1608,32168,32169],{"class":1785,"line":1831},[1608,32170,32171],{},"    [SerializeField] private int solverVelocityIterations = 1;\n",[1608,32173,32174],{"class":1785,"line":1333},[1608,32175,2249],{},[1608,32177,32178],{"class":1785,"line":2075},[1608,32179,32180],{},"    [Header(\"Layer Collision Matrix\")]\n",[1608,32182,32183],{"class":1785,"line":2099},[1608,32184,32185],{},"    [SerializeField] private LayerMask playerLayer;\n",[1608,32187,32188],{"class":1785,"line":2119},[1608,32189,32190],{},"    [SerializeField] private LayerMask enemyLayer;\n",[1608,32192,32193],{"class":1785,"line":2129},[1608,32194,32195],{},"    [SerializeField] private LayerMask projectileLayer;\n",[1608,32197,32198],{"class":1785,"line":1635},[1608,32199,32200],{},"    [SerializeField] private LayerMask environmentLayer;\n",[1608,32202,32203],{"class":1785,"line":2296},[1608,32204,2249],{},[1608,32206,32207],{"class":1785,"line":2302},[1608,32208,28631],{},[1608,32210,32211],{"class":1785,"line":2308},[1608,32212,28453],{},[1608,32214,32215],{"class":1785,"line":3279},[1608,32216,32217],{},"        ConfigurePhysics();\n",[1608,32219,32220],{"class":1785,"line":3284},[1608,32221,32222],{},"        SetupCollisionMatrix();\n",[1608,32224,32225],{"class":1785,"line":3293},[1608,32226,2305],{},[1608,32228,32229],{"class":1785,"line":3298},[1608,32230,2249],{},[1608,32232,32233],{"class":1785,"line":3308},[1608,32234,32235],{},"    private void ConfigurePhysics()\n",[1608,32237,32238],{"class":1785,"line":3318},[1608,32239,28453],{},[1608,32241,32242],{"class":1785,"line":3342},[1608,32243,32244],{},"        Time.fixedDeltaTime = fixedTimeStep;\n",[1608,32246,32247],{"class":1785,"line":3365},[1608,32248,32249],{},"        Physics.defaultMaxAngularSpeed = maximumAllowedTimestep;\n",[1608,32251,32252],{"class":1785,"line":3402},[1608,32253,28663],{},[1608,32255,32256],{"class":1785,"line":3412},[1608,32257,32258],{},"        // Configure solver iterations for better performance\n",[1608,32260,32261],{"class":1785,"line":3704},[1608,32262,32263],{},"        Physics.defaultSolverIterations = solverIterations;\n",[1608,32265,32266],{"class":1785,"line":3712},[1608,32267,32268],{},"        Physics.defaultSolverVelocityIterations = solverVelocityIterations;\n",[1608,32270,32271],{"class":1785,"line":3720},[1608,32272,28663],{},[1608,32274,32275],{"class":1785,"line":3728},[1608,32276,32277],{},"        // Enable auto-simulation if needed\n",[1608,32279,32280],{"class":1785,"line":3734},[1608,32281,32282],{},"        Physics.autoSimulation = true;\n",[1608,32284,32285],{"class":1785,"line":3739},[1608,32286,28663],{},[1608,32288,32289],{"class":1785,"line":4422},[1608,32290,32291],{},"        // Configure physics gravity if needed\n",[1608,32293,32294],{"class":1785,"line":4431},[1608,32295,32296],{},"        Physics.gravity = new Vector3(0, -9.81f, 0);\n",[1608,32298,32299],{"class":1785,"line":4440},[1608,32300,2305],{},[1608,32302,32303],{"class":1785,"line":12419},[1608,32304,2249],{},[1608,32306,32307],{"class":1785,"line":12427},[1608,32308,32309],{},"    private void SetupCollisionMatrix()\n",[1608,32311,32312],{"class":1785,"line":12436},[1608,32313,28453],{},[1608,32315,32316],{"class":1785,"line":12441},[1608,32317,32318],{},"        // Disable unnecessary collisions for performance\n",[1608,32320,32321],{"class":1785,"line":12446},[1608,32322,32323],{},"        // Players don't collide with other players\n",[1608,32325,32326],{"class":1785,"line":13141},[1608,32327,32328],{},"        Physics.IgnoreLayerCollision(playerLayer, playerLayer, true);\n",[1608,32330,32331],{"class":1785,"line":13146},[1608,32332,28663],{},[1608,32334,32335],{"class":1785,"line":13172},[1608,32336,32337],{},"        // Projectiles don't collide with other projectiles\n",[1608,32339,32340],{"class":1785,"line":13190},[1608,32341,32342],{},"        Physics.IgnoreLayerCollision(projectileLayer, projectileLayer, true);\n",[1608,32344,32345],{"class":1785,"line":13195},[1608,32346,28663],{},[1608,32348,32349],{"class":1785,"line":13200},[1608,32350,32351],{},"        // Enemies don't collide with other enemies (use custom collision detection)\n",[1608,32353,32354],{"class":1785,"line":13226},[1608,32355,32356],{},"        Physics.IgnoreLayerCollision(enemyLayer, enemyLayer, true);\n",[1608,32358,32359],{"class":1785,"line":13244},[1608,32360,2305],{},[1608,32362,32363],{"class":1785,"line":13921},[1608,32364,2249],{},[1608,32366,32367],{"class":1785,"line":28968},[1608,32368,32369],{},"    // Performance monitoring\n",[1608,32371,32372],{"class":1785,"line":28973},[1608,32373,30028],{},[1608,32375,32376],{"class":1785,"line":28979},[1608,32377,28453],{},[1608,32379,32380],{"class":1785,"line":28984},[1608,32381,32382],{},"        // Monitor physics performance\n",[1608,32384,32385],{"class":1785,"line":28990},[1608,32386,32387],{},"        if (Time.frameCount % 60 == 0) // Every second at 60 FPS\n",[1608,32389,32390],{"class":1785,"line":28995},[1608,32391,28564],{},[1608,32393,32394],{"class":1785,"line":29001},[1608,32395,32396],{},"            MonitorPhysicsPerformance();\n",[1608,32398,32399],{"class":1785,"line":29006},[1608,32400,2580],{},[1608,32402,32403],{"class":1785,"line":29011},[1608,32404,2305],{},[1608,32406,32407],{"class":1785,"line":29740},[1608,32408,2249],{},[1608,32410,32411],{"class":1785,"line":29745},[1608,32412,32413],{},"    private void MonitorPhysicsPerformance()\n",[1608,32415,32416],{"class":1785,"line":29751},[1608,32417,28453],{},[1608,32419,32420],{"class":1785,"line":29756},[1608,32421,32422],{},"        int activeBodies = Physics.Bodies.Count;\n",[1608,32424,32425],{"class":1785,"line":29761},[1608,32426,32427],{},"        int activeColliders = FindObjectsOfType\u003CCollider>().Length;\n",[1608,32429,32430],{"class":1785,"line":29767},[1608,32431,28663],{},[1608,32433,32434],{"class":1785,"line":29772},[1608,32435,32436],{},"        // Log or send to analytics if performance is degrading\n",[1608,32438,32439],{"class":1785,"line":29778},[1608,32440,32441],{},"        if (activeBodies > 1000 || activeColliders > 5000)\n",[1608,32443,32444],{"class":1785,"line":29783},[1608,32445,28564],{},[1608,32447,32448],{"class":1785,"line":29788},[1608,32449,32450],{},"            Debug.LogWarning($\"High physics load: {activeBodies} bodies, {activeColliders} colliders\");\n",[1608,32452,32453],{"class":1785,"line":29793},[1608,32454,2580],{},[1608,32456,32457],{"class":1785,"line":29799},[1608,32458,2305],{},[1608,32460,32461],{"class":1785,"line":29804},[1608,32462,2249],{},[1608,32464,32465],{"class":1785,"line":29810},[1608,32466,32467],{},"    // Public methods for runtime physics control\n",[1608,32469,32470],{"class":1785,"line":29815},[1608,32471,32472],{},"    public void PausePhysics()\n",[1608,32474,32475],{"class":1785,"line":29821},[1608,32476,28453],{},[1608,32478,32479],{"class":1785,"line":29826},[1608,32480,32481],{},"        Physics.autoSimulation = false;\n",[1608,32483,32484],{"class":1785,"line":29832},[1608,32485,2305],{},[1608,32487,32488],{"class":1785,"line":29837},[1608,32489,2249],{},[1608,32491,32492],{"class":1785,"line":29842},[1608,32493,32494],{},"    public void ResumePhysics()\n",[1608,32496,32497],{"class":1785,"line":29848},[1608,32498,28453],{},[1608,32500,32501],{"class":1785,"line":29853},[1608,32502,32282],{},[1608,32504,32505],{"class":1785,"line":29859},[1608,32506,32507],{},"        Physics.Simulate(Time.fixedDeltaTime);\n",[1608,32509,32510],{"class":1785,"line":29864},[1608,32511,2305],{},[1608,32513,32514],{"class":1785,"line":30257},[1608,32515,2249],{},[1608,32517,32518],{"class":1785,"line":30262},[1608,32519,32520],{},"    public void SetTimeScale(float timeScale)\n",[1608,32522,32523],{"class":1785,"line":30267},[1608,32524,28453],{},[1608,32526,32527],{"class":1785,"line":30273},[1608,32528,32529],{},"        Time.timeScale = timeScale;\n",[1608,32531,32532],{"class":1785,"line":30278},[1608,32533,32534],{},"        Time.fixedDeltaTime = fixedTimeStep * timeScale;\n",[1608,32536,32537],{"class":1785,"line":30284},[1608,32538,2305],{},[1608,32540,32541],{"class":1785,"line":30289},[1608,32542,2005],{},[68,32544,32546],{"id":32545},"الخاتمة-رحلة-مستمرة-للتحسين","الخاتمة: رحلة مستمرة للتحسين",[30,32548,32549],{},"بناء كود قابل للتوسع في Unity ليس وجهة – إنه رحلة مستمرة من التعلم والتحسين. تذكر هذه النقاط الأساسية:",[30,32551,32552,32555],{},[37,32553,32554],{},"ابدأ صغيراً:"," لا تحاول بناء الهندسة المعمارية المثالية من البداية. ابدأ بأنماط بسيطة وقم بتحسينها تدريجياً.",[30,32557,32558,32561],{},[37,32559,32560],{},"اختبر دائماً:"," قم بتشغيل اختبارات الأداء بانتظام وتأكد من أن التغييرات الخاصة بك لا تكسر الأداء.",[30,32563,32564,32567],{},[37,32565,32566],{},"وثق كودك:"," اكتب تعليقات واضحة ووثائق لأنظمة معقدة.",[30,32569,32570,32573],{},[37,32571,32572],{},"تعلم من الأخطاء:"," كل مشروع يعلمك شيئاً جديداً عن كتابة كود أفضل.",[30,32575,32576,32579],{},[37,32577,32578],{},"كن مرناً:"," الهندسة المعمارية الجيدة تتكيف مع تغييرات المتطلبات.",[30,32581,32582],{},"مع هذه الأنماط والتقنيات، ستكون مجهزاً لبناء ألعاب Unity يمكن أن تنمو من أفكار بسيطة إلى تجارب AAA مذهلة. تذكر: الكود القابل للتوسع ليس مجرد ممارسة جيدة – إنه مفتاح نجاح مشاريع الألعاب الكبيرة.",[30,32584,32585,32588],{},[37,32586,32587],{},"ما هي خطوتك التالية في رحلة تطوير الألعاب؟"," 🎮",[2846,32590,32591],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":16,"searchDepth":17,"depth":17,"links":32593},[32594,32598,32602,32606,32610,32611,32612,32613,32614,32615,32616,32617],{"id":28160,"depth":1260,"text":28161,"children":32595},[32596,32597],{"id":28164,"depth":17,"text":28165},{"id":28227,"depth":17,"text":28228},{"id":28263,"depth":1260,"text":28264,"children":32599},[32600,32601],{"id":28270,"depth":17,"text":28271},{"id":28382,"depth":17,"text":28383},{"id":28513,"depth":1260,"text":28514,"children":32603},[32604,32605],{"id":28517,"depth":17,"text":28518},{"id":28730,"depth":17,"text":28731},{"id":29016,"depth":1260,"text":29017,"children":32607},[32608,32609],{"id":29020,"depth":17,"text":29021},{"id":29287,"depth":17,"text":29288},{"id":29470,"depth":1260,"text":29471},{"id":29869,"depth":1260,"text":29870},{"id":30460,"depth":1260,"text":30461},{"id":30913,"depth":1260,"text":30914},{"id":31259,"depth":1260,"text":31260},{"id":31653,"depth":1260,"text":31654},{"id":32123,"depth":1260,"text":32124},{"id":32545,"depth":1260,"text":32546},"إتقان فن كتابة كود نظيف، معياري، وقابل للتوسع في Unity. تعلم أفضل الممارسات، أنماط التصميم، والتقنيات الحديثة لبناء ألعاب قابلة للصيانة يمكن أن تنمو مع طموحاتك.","https://images.unsplash.com/photo-1550745165-9bc0b252726f?q=80&w=1200&auto=format&fit=crop",{"excerpt":32621},{"type":13,"value":32622},[32623],[30,32624,28157],{},"/kwd-qabl-liaadh-alastkhdam-wqabl-lltwsa-fy-unity","2023-01-29T13:12:14.000Z",{"title":28152,"description":32618},"كود-قابل-لإعادة-الاستخدام-وقابل-للتوسع-في-unity",[23876,23874,32630,32631,7291,7289],"c-sharp","design-patterns","-dWrD0Vh2mjU5AAGyXjkbMg-VXAV7M94mXCvDk-PTNE",{"id":32634,"title":32635,"author":26,"body":32636,"category":19,"description":34266,"extension":7,"image":34267,"isDraft":1304,"isFeatured":1304,"locale":9,"meta":34268,"navigation":1305,"path":34295,"publishedAt":34296,"readingTime":2099,"seo":34297,"stem":34298,"tags":34299,"updatedAt":34301,"__hash__":34302},"articles_ar/وحدات-css.md","فهم وحدات CSS: دليل شامل لاختيار القياسات المناسبة",{"type":13,"value":32637,"toc":34244},[32638,32641,32645,32648,32673,32677,32680,32684,32687,32691,32702,32706,32760,32766,32770,32773,32839,32843,32846,32850,32857,32861,32872,32876,33001,33007,33011,33014,33018,33029,33033,33123,33129,33133,33136,33140,33151,33155,33269,33275,33279,33282,33286,33300,33304,33315,33319,33399,33404,33447,33451,33465,33468,33512,33516,33523,33527,33535,33539,33571,33580,33584,33681,33685,33688,33940,33942,33984,33986,33991,34082,34087,34122,34127,34205,34207,34210,34235,34238,34241],[30,32639,32640],{},"عند بناء المواقع، يمكن أن يحدد اختيار وحدات CSS المناسبة الفرق بين تصميم يبدو مثالياً في كل مكان وآخر يتعطل على شاشات مختلفة. يوفر CSS العديد من أنواع الوحدات، ولكل منها نقاط قوتها وحالات استخدامها. سيساعدك هذا الدليل على فهم متى وكيفية استخدام كل نوع وحدة بفعالية.",[68,32642,32644],{"id":32643},"لماذا-تهم-وحدات-css","لماذا تهم وحدات CSS؟",[30,32646,32647],{},"تحدد وحدات CSS كيفية تحجيم العناصر على صفحة الويب الخاصة بك. يؤثر الاختيار الصحيح على:",[49,32649,32650,32656,32662,32668],{},[52,32651,32652,32655],{},[37,32653,32654],{},"الاستجابة",": كيف يتكيف تصميمك مع أحجام الشاشات المختلفة",[52,32657,32658,32661],{},[37,32659,32660],{},"إمكانية الوصول",": مدى سهولة تعديل المستخدمين لحجم النص",[52,32663,32664,32667],{},[37,32665,32666],{},"الاتساق",": مدى بقاء التباعد والتحجيم موحداً",[52,32669,32670,32672],{},[37,32671,2161],{},": مدى سلاسة عرض موقعك",[68,32674,32676],{"id":32675},"الوحدات-المطلقة-القياسات-الثابتة","الوحدات المطلقة: القياسات الثابتة",[30,32678,32679],{},"للوحدات المطلقة حجم ثابت لا يتغير بناءً على العناصر الأخرى أو العرض. بينما توفر الدقة، يمكن أن تجعل التصاميم أقل مرونة.",[73,32681,32683],{"id":32682},"البكسلات-px","البكسلات (px)",[30,32685,32686],{},"البكسلات هي الوحدة الأكثر شيوعاً في تصميم الويب. يساوي بكسل واحد نقطة واحدة على الشاشة.",[30,32688,32689],{},[37,32690,19304],{},[49,32692,32693,32696,32699],{},[52,32694,32695],{},"الحدود والتفاصيل الدقيقة (مثل حدود 1px)",[52,32697,32698],{},"الصور والأيقونات ذات الأبعاد المحددة",[52,32700,32701],{},"عندما تحتاج إلى تحكم دقيق",[30,32703,32704],{},[37,32705,651],{},[441,32707,32709],{"className":15946,"code":32708,"language":15948,"meta":16,"style":16},".button {\n  border: 2px solid #3498db;\n  padding: 10px 20px;\n}\n",[448,32710,32711,32718,32739,32756],{"__ignoreMap":16},[1608,32712,32713,32716],{"class":1785,"line":1786},[1608,32714,32715],{"class":9341},".button",[1608,32717,1960],{"class":1959},[1608,32719,32720,32723,32725,32727,32731,32734,32737],{"class":1785,"line":1260},[1608,32721,32722],{"class":9349},"  border",[1608,32724,4147],{"class":1959},[1608,32726,17950],{"class":3075},[1608,32728,32730],{"class":32729},"sDy_c","px",[1608,32732,32733],{"class":9355}," solid",[1608,32735,32736],{"class":9355}," #3498db",[1608,32738,1977],{"class":1959},[1608,32740,32741,32744,32746,32748,32750,32752,32754],{"class":1785,"line":17},[1608,32742,32743],{"class":9349},"  padding",[1608,32745,4147],{"class":1959},[1608,32747,10402],{"class":3075},[1608,32749,32730],{"class":32729},[1608,32751,21255],{"class":3075},[1608,32753,32730],{"class":32729},[1608,32755,1977],{"class":1959},[1608,32757,32758],{"class":1785,"line":1802},[1608,32759,2005],{"class":1959},[30,32761,32762,32765],{},[37,32763,32764],{},"ملاحظة مهمة:"," بينما تبدو البكسلات بسيطة، لا تتوسع مع تفضيلات المستخدم لنص أكبر. يمكن أن يؤدي ذلك إلى مشاكل في إمكانية الوصول.",[73,32767,32769],{"id":32768},"وحدات-مطلقة-أخرى","وحدات مطلقة أخرى",[30,32771,32772],{},"توجد وحدات تقليدية مثل السنتيمترات (cm)، المليمترات (mm)، البوصات (in)، النقاط (pt)، والبايكات (pc) في CSS لكنها نادراً ما تكون مفيدة لتصميم الشاشات. هي أفضل لأوراق الأنماط المطبوعة.",[441,32774,32776],{"className":15946,"code":32775,"language":15948,"meta":16,"style":16},"@media print {\n  .document {\n    width: 8.5in;  /* عرض حجم الرسالة */\n    height: 11in;  /* ارتفاع حجم الرسالة */\n  }\n}\n",[448,32777,32778,32788,32795,32814,32831,32835],{"__ignoreMap":16},[1608,32779,32780,32783,32786],{"class":1785,"line":1786},[1608,32781,32782],{"class":2046},"@media",[1608,32784,32785],{"class":9355}," print",[1608,32787,1960],{"class":1959},[1608,32789,32790,32793],{"class":1785,"line":1260},[1608,32791,32792],{"class":9341},"  .document",[1608,32794,1960],{"class":1959},[1608,32796,32797,32800,32802,32805,32808,32811],{"class":1785,"line":17},[1608,32798,32799],{"class":9349},"    width",[1608,32801,4147],{"class":1959},[1608,32803,32804],{"class":3075},"8.5",[1608,32806,32807],{"class":32729},"in",[1608,32809,32810],{"class":1959},";  ",[1608,32812,32813],{"class":1945},"/* عرض حجم الرسالة */\n",[1608,32815,32816,32819,32821,32824,32826,32828],{"class":1785,"line":1802},[1608,32817,32818],{"class":9349},"    height",[1608,32820,4147],{"class":1959},[1608,32822,32823],{"class":3075},"11",[1608,32825,32807],{"class":32729},[1608,32827,32810],{"class":1959},[1608,32829,32830],{"class":1945},"/* ارتفاع حجم الرسالة */\n",[1608,32832,32833],{"class":1785,"line":1808},[1608,32834,3619],{"class":1959},[1608,32836,32837],{"class":1785,"line":1814},[1608,32838,2005],{"class":1959},[68,32840,32842],{"id":32841},"الوحدات-النسبية-القياسات-المرنة","الوحدات النسبية: القياسات المرنة",[30,32844,32845],{},"تتوسع الوحدات النسبية بناءً على قيم أخرى، مما يجعلها مثالية للتصميم المتجاوب.",[73,32847,32849],{"id":32848},"rem-root-em","REM (Root EM)",[30,32851,32852,32853,32856],{},"تعتمد وحدات REM على حجم خط العنصر الجذر (عادة عنصر ",[448,32854,32855],{},"\u003Chtml>","). توفر اتساقاً عبر موقعك بالكامل.",[30,32858,32859],{},[37,32860,19304],{},[49,32862,32863,32866,32869],{},[52,32864,32865],{},"أحجام الخط عبر موقعك",[52,32867,32868],{},"التباعد الذي يجب أن يتوسع مع النص",[52,32870,32871],{},"إنشاء نظام تحجيم متسق",[30,32873,32874],{},[37,32875,651],{},[441,32877,32879],{"className":15946,"code":32878,"language":15948,"meta":16,"style":16},"html {\n  font-size: 16px;  /* الحجم الأساسي */\n}\n\nh1 {\n  font-size: 2rem;    /* 32px */\n  margin-bottom: 1rem; /* 16px */\n}\n\np {\n  font-size: 1rem;    /* 16px */\n  line-height: 1.5rem; /* 24px */\n}\n",[448,32880,32881,32889,32905,32909,32913,32919,32936,32952,32956,32960,32966,32980,32997],{"__ignoreMap":16},[1608,32882,32883,32887],{"class":1785,"line":1786},[1608,32884,32886],{"class":32885},"se49E","html",[1608,32888,1960],{"class":1959},[1608,32890,32891,32894,32896,32898,32900,32902],{"class":1785,"line":1260},[1608,32892,32893],{"class":9349},"  font-size",[1608,32895,4147],{"class":1959},[1608,32897,19717],{"class":3075},[1608,32899,32730],{"class":32729},[1608,32901,32810],{"class":1959},[1608,32903,32904],{"class":1945},"/* الحجم الأساسي */\n",[1608,32906,32907],{"class":1785,"line":17},[1608,32908,2005],{"class":1959},[1608,32910,32911],{"class":1785,"line":1802},[1608,32912,1805],{"emptyLinePlaceholder":1305},[1608,32914,32915,32917],{"class":1785,"line":1808},[1608,32916,8655],{"class":32885},[1608,32918,1960],{"class":1959},[1608,32920,32921,32923,32925,32927,32930,32933],{"class":1785,"line":1814},[1608,32922,32893],{"class":9349},[1608,32924,4147],{"class":1959},[1608,32926,17950],{"class":3075},[1608,32928,32929],{"class":32729},"rem",[1608,32931,32932],{"class":1959},";    ",[1608,32934,32935],{"class":1945},"/* 32px */\n",[1608,32937,32938,32941,32943,32945,32947,32949],{"class":1785,"line":1820},[1608,32939,32940],{"class":9349},"  margin-bottom",[1608,32942,4147],{"class":1959},[1608,32944,6398],{"class":3075},[1608,32946,32929],{"class":32729},[1608,32948,17977],{"class":1959},[1608,32950,32951],{"class":1945},"/* 16px */\n",[1608,32953,32954],{"class":1785,"line":1825},[1608,32955,2005],{"class":1959},[1608,32957,32958],{"class":1785,"line":1831},[1608,32959,1805],{"emptyLinePlaceholder":1305},[1608,32961,32962,32964],{"class":1785,"line":1333},[1608,32963,30],{"class":32885},[1608,32965,1960],{"class":1959},[1608,32967,32968,32970,32972,32974,32976,32978],{"class":1785,"line":2075},[1608,32969,32893],{"class":9349},[1608,32971,4147],{"class":1959},[1608,32973,6398],{"class":3075},[1608,32975,32929],{"class":32729},[1608,32977,32932],{"class":1959},[1608,32979,32951],{"class":1945},[1608,32981,32982,32985,32987,32990,32992,32994],{"class":1785,"line":2099},[1608,32983,32984],{"class":9349},"  line-height",[1608,32986,4147],{"class":1959},[1608,32988,32989],{"class":3075},"1.5",[1608,32991,32929],{"class":32729},[1608,32993,17977],{"class":1959},[1608,32995,32996],{"class":1945},"/* 24px */\n",[1608,32998,32999],{"class":1785,"line":2119},[1608,33000,2005],{"class":1959},[30,33002,33003,33006],{},[37,33004,33005],{},"لماذا رائع:"," إذا زاد المستخدم حجم الخط الافتراضي في المتصفح لأغراض إمكانية الوصول، يتوسع كل شيء مقاس بـ rem بشكل متناسب.",[73,33008,33010],{"id":33009},"em","EM",[30,33012,33013],{},"وحدات EM نسبية لحجم خط العنصر الأب. يؤدي ذلك إلى تأثير متسلسل.",[30,33015,33016],{},[37,33017,19304],{},[49,33019,33020,33023,33026],{},[52,33021,33022],{},"الحشو والحواف النسبية لحجم النص",[52,33024,33025],{},"المكونات التي يجب أن تتوسع معاً",[52,33027,33028],{},"عندما تريد أن ترث العناصر الفرعية التوسع",[30,33030,33031],{},[37,33032,651],{},[441,33034,33036],{"className":15946,"code":33035,"language":15948,"meta":16,"style":16},".card {\n  font-size: 18px;\n}\n\n.card-title {\n  font-size: 1.5em;  /* 27px (1.5 × 18px) */\n}\n\n.card-text {\n  padding: 1em;      /* حشو 18px */\n}\n",[448,33037,33038,33045,33058,33062,33066,33073,33088,33092,33096,33103,33119],{"__ignoreMap":16},[1608,33039,33040,33043],{"class":1785,"line":1786},[1608,33041,33042],{"class":9341},".card",[1608,33044,1960],{"class":1959},[1608,33046,33047,33049,33051,33054,33056],{"class":1785,"line":1260},[1608,33048,32893],{"class":9349},[1608,33050,4147],{"class":1959},[1608,33052,33053],{"class":3075},"18",[1608,33055,32730],{"class":32729},[1608,33057,1977],{"class":1959},[1608,33059,33060],{"class":1785,"line":17},[1608,33061,2005],{"class":1959},[1608,33063,33064],{"class":1785,"line":1802},[1608,33065,1805],{"emptyLinePlaceholder":1305},[1608,33067,33068,33071],{"class":1785,"line":1808},[1608,33069,33070],{"class":9341},".card-title",[1608,33072,1960],{"class":1959},[1608,33074,33075,33077,33079,33081,33083,33085],{"class":1785,"line":1814},[1608,33076,32893],{"class":9349},[1608,33078,4147],{"class":1959},[1608,33080,32989],{"class":3075},[1608,33082,33009],{"class":32729},[1608,33084,32810],{"class":1959},[1608,33086,33087],{"class":1945},"/* 27px (1.5 × 18px) */\n",[1608,33089,33090],{"class":1785,"line":1820},[1608,33091,2005],{"class":1959},[1608,33093,33094],{"class":1785,"line":1825},[1608,33095,1805],{"emptyLinePlaceholder":1305},[1608,33097,33098,33101],{"class":1785,"line":1831},[1608,33099,33100],{"class":9341},".card-text",[1608,33102,1960],{"class":1959},[1608,33104,33105,33107,33109,33111,33113,33116],{"class":1785,"line":1333},[1608,33106,32743],{"class":9349},[1608,33108,4147],{"class":1959},[1608,33110,6398],{"class":3075},[1608,33112,33009],{"class":32729},[1608,33114,33115],{"class":1959},";      ",[1608,33117,33118],{"class":1945},"/* حشو 18px */\n",[1608,33120,33121],{"class":1785,"line":2075},[1608,33122,2005],{"class":1959},[30,33124,33125,33128],{},[37,33126,33127],{},"احذر:"," تتضاعف وحدات EM. إذا قمت بتداخل العناصر ذات الأحجام المبنية على em، تتضاعف القيم، مما يؤدي إلى نتائج غير متوقعة.",[73,33130,33132],{"id":33131},"النسب-المئوية","النسب المئوية (%)",[30,33134,33135],{},"النسب المئوية نسبية لحجم العنصر الأب.",[30,33137,33138],{},[37,33139,19304],{},[49,33141,33142,33145,33148],{},[52,33143,33144],{},"إنشاء تخطيطات مرنة",[52,33146,33147],{},"الصور المتجاوبة",[52,33149,33150],{},"حاويات العرض السائل",[30,33152,33153],{},[37,33154,651],{},[441,33156,33158],{"className":15946,"code":33157,"language":15948,"meta":16,"style":16},".container {\n  width: 100%;         /* العرض الكامل للأب */\n  max-width: 1200px;   /* لكن ليس أوسع من 1200px */\n}\n\n.sidebar {\n  width: 30%;          /* يأخذ 30% من الحاوي */\n}\n\n.main-content {\n  width: 70%;          /* يأخذ 70% من الحاوي */\n}\n",[448,33159,33160,33167,33184,33202,33206,33210,33217,33234,33238,33242,33249,33265],{"__ignoreMap":16},[1608,33161,33162,33165],{"class":1785,"line":1786},[1608,33163,33164],{"class":9341},".container",[1608,33166,1960],{"class":1959},[1608,33168,33169,33171,33173,33176,33178,33181],{"class":1785,"line":1260},[1608,33170,16343],{"class":9349},[1608,33172,4147],{"class":1959},[1608,33174,33175],{"class":3075},"100",[1608,33177,19634],{"class":32729},[1608,33179,33180],{"class":1959},";         ",[1608,33182,33183],{"class":1945},"/* العرض الكامل للأب */\n",[1608,33185,33186,33189,33191,33194,33196,33199],{"class":1785,"line":17},[1608,33187,33188],{"class":9349},"  max-width",[1608,33190,4147],{"class":1959},[1608,33192,33193],{"class":3075},"1200",[1608,33195,32730],{"class":32729},[1608,33197,33198],{"class":1959},";   ",[1608,33200,33201],{"class":1945},"/* لكن ليس أوسع من 1200px */\n",[1608,33203,33204],{"class":1785,"line":1802},[1608,33205,2005],{"class":1959},[1608,33207,33208],{"class":1785,"line":1808},[1608,33209,1805],{"emptyLinePlaceholder":1305},[1608,33211,33212,33215],{"class":1785,"line":1814},[1608,33213,33214],{"class":9341},".sidebar",[1608,33216,1960],{"class":1959},[1608,33218,33219,33221,33223,33226,33228,33231],{"class":1785,"line":1820},[1608,33220,16343],{"class":9349},[1608,33222,4147],{"class":1959},[1608,33224,33225],{"class":3075},"30",[1608,33227,19634],{"class":32729},[1608,33229,33230],{"class":1959},";          ",[1608,33232,33233],{"class":1945},"/* يأخذ 30% من الحاوي */\n",[1608,33235,33236],{"class":1785,"line":1825},[1608,33237,2005],{"class":1959},[1608,33239,33240],{"class":1785,"line":1831},[1608,33241,1805],{"emptyLinePlaceholder":1305},[1608,33243,33244,33247],{"class":1785,"line":1333},[1608,33245,33246],{"class":9341},".main-content",[1608,33248,1960],{"class":1959},[1608,33250,33251,33253,33255,33258,33260,33262],{"class":1785,"line":2075},[1608,33252,16343],{"class":9349},[1608,33254,4147],{"class":1959},[1608,33256,33257],{"class":3075},"70",[1608,33259,19634],{"class":32729},[1608,33261,33230],{"class":1959},[1608,33263,33264],{"class":1945},"/* يأخذ 70% من الحاوي */\n",[1608,33266,33267],{"class":1785,"line":2099},[1608,33268,2005],{"class":1959},[30,33270,33271,33274],{},[37,33272,33273],{},"مهم:"," يعمل ارتفاع النسبة المئوية فقط عندما يكون للأب ارتفاع صريح.",[68,33276,33278],{"id":33277},"وحدات-العرض-بناءً-على-نافذة-المتصفح","وحدات العرض: بناءً على نافذة المتصفح",[30,33280,33281],{},"ترتبط وحدات العرض بحجم نافذة المتصفح، مما يجعلها مثالية للأقسام الكاملة الشاشة والطباعة المتجاوبة.",[73,33283,33285],{"id":33284},"عرض-العرض-vw-وارتفاعه-vh","عرض العرض (vw) وارتفاعه (vh)",[49,33287,33288,33294],{},[52,33289,33290,33293],{},[448,33291,33292],{},"1vw"," = 1% من عرض العرض",[52,33295,33296,33299],{},[448,33297,33298],{},"1vh"," = 1% من ارتفاع العرض",[30,33301,33302],{},[37,33303,19304],{},[49,33305,33306,33309,33312],{},[52,33307,33308],{},"أقسام البطل التي تملأ الشاشة",[52,33310,33311],{},"الطباعة المتجاوبة",[52,33313,33314],{},"تراكبات النوافذ المنبثقة",[30,33316,33317],{},[37,33318,651],{},[441,33320,33322],{"className":15946,"code":33321,"language":15948,"meta":16,"style":16},".hero {\n  height: 100vh;        /* ارتفاع العرض الكامل */\n  width: 100vw;         /* عرض العرض الكامل */\n}\n\n.full-screen-section {\n  min-height: 100vh;    /* على الأقل شاشة كاملة */\n}\n",[448,33323,33324,33331,33348,33364,33368,33372,33379,33395],{"__ignoreMap":16},[1608,33325,33326,33329],{"class":1785,"line":1786},[1608,33327,33328],{"class":9341},".hero",[1608,33330,1960],{"class":1959},[1608,33332,33333,33335,33337,33339,33342,33345],{"class":1785,"line":1260},[1608,33334,16353],{"class":9349},[1608,33336,4147],{"class":1959},[1608,33338,33175],{"class":3075},[1608,33340,33341],{"class":32729},"vh",[1608,33343,33344],{"class":1959},";        ",[1608,33346,33347],{"class":1945},"/* ارتفاع العرض الكامل */\n",[1608,33349,33350,33352,33354,33356,33359,33361],{"class":1785,"line":17},[1608,33351,16343],{"class":9349},[1608,33353,4147],{"class":1959},[1608,33355,33175],{"class":3075},[1608,33357,33358],{"class":32729},"vw",[1608,33360,33180],{"class":1959},[1608,33362,33363],{"class":1945},"/* عرض العرض الكامل */\n",[1608,33365,33366],{"class":1785,"line":1802},[1608,33367,2005],{"class":1959},[1608,33369,33370],{"class":1785,"line":1808},[1608,33371,1805],{"emptyLinePlaceholder":1305},[1608,33373,33374,33377],{"class":1785,"line":1814},[1608,33375,33376],{"class":9341},".full-screen-section",[1608,33378,1960],{"class":1959},[1608,33380,33381,33384,33386,33388,33390,33392],{"class":1785,"line":1820},[1608,33382,33383],{"class":9349},"  min-height",[1608,33385,4147],{"class":1959},[1608,33387,33175],{"class":3075},[1608,33389,33341],{"class":32729},[1608,33391,32932],{"class":1959},[1608,33393,33394],{"class":1945},"/* على الأقل شاشة كاملة */\n",[1608,33396,33397],{"class":1785,"line":1825},[1608,33398,2005],{"class":1959},[30,33400,33401],{},[37,33402,33403],{},"طباعة متجاوبة:",[441,33405,33407],{"className":15946,"code":33406,"language":15948,"meta":16,"style":16},"h1 {\n  font-size: calc(2rem + 2vw);  /* يتوسع مع العرض */\n}\n",[448,33408,33409,33415,33443],{"__ignoreMap":16},[1608,33410,33411,33413],{"class":1785,"line":1786},[1608,33412,8655],{"class":32885},[1608,33414,1960],{"class":1959},[1608,33416,33417,33419,33421,33424,33426,33428,33430,33433,33435,33437,33440],{"class":1785,"line":1260},[1608,33418,32893],{"class":9349},[1608,33420,4147],{"class":1959},[1608,33422,33423],{"class":8527},"calc",[1608,33425,3072],{"class":1959},[1608,33427,17950],{"class":3075},[1608,33429,32929],{"class":32729},[1608,33431,33432],{"class":1969}," +",[1608,33434,3150],{"class":3075},[1608,33436,33358],{"class":32729},[1608,33438,33439],{"class":1959},");  ",[1608,33441,33442],{"class":1945},"/* يتوسع مع العرض */\n",[1608,33444,33445],{"class":1785,"line":17},[1608,33446,2005],{"class":1959},[73,33448,33450],{"id":33449},"الحد-الأدنى-للعرض-vmin-والحد-الأقصى-vmax","الحد الأدنى للعرض (vmin) والحد الأقصى (vmax)",[49,33452,33453,33459],{},[52,33454,33455,33458],{},[448,33456,33457],{},"vmin"," = 1% من البعد الأصغر للعرض",[52,33460,33461,33464],{},[448,33462,33463],{},"vmax"," = 1% من البعد الأكبر للعرض",[30,33466,33467],{},"هذه مفيدة للحفاظ على النسب عبر الاتجاهات.",[441,33469,33471],{"className":15946,"code":33470,"language":15948,"meta":16,"style":16},".square-element {\n  width: 50vmin;   /* مربع دائماً، حتى عند تدوير الجهاز */\n  height: 50vmin;\n}\n",[448,33472,33473,33480,33496,33508],{"__ignoreMap":16},[1608,33474,33475,33478],{"class":1785,"line":1786},[1608,33476,33477],{"class":9341},".square-element",[1608,33479,1960],{"class":1959},[1608,33481,33482,33484,33486,33489,33491,33493],{"class":1785,"line":1260},[1608,33483,16343],{"class":9349},[1608,33485,4147],{"class":1959},[1608,33487,33488],{"class":3075},"50",[1608,33490,33457],{"class":32729},[1608,33492,33198],{"class":1959},[1608,33494,33495],{"class":1945},"/* مربع دائماً، حتى عند تدوير الجهاز */\n",[1608,33497,33498,33500,33502,33504,33506],{"class":1785,"line":17},[1608,33499,16353],{"class":9349},[1608,33501,4147],{"class":1959},[1608,33503,33488],{"class":3075},[1608,33505,33457],{"class":32729},[1608,33507,1977],{"class":1959},[1608,33509,33510],{"class":1785,"line":1802},[1608,33511,2005],{"class":1959},[68,33513,33515],{"id":33514},"وحدة-الحرف-ch","وحدة الحرف (ch)",[30,33517,33518,33519,33522],{},"تساوي وحدة ",[448,33520,33521],{},"ch"," عرض حرف \"0\" في الخط الحالي. مفيدة بشكل خاص للتحكم في طول السطر.",[30,33524,33525],{},[37,33526,19304],{},[49,33528,33529,33532],{},[52,33530,33531],{},"تحديد عرض النص للقراءة",[52,33533,33534],{},"تخطيطات الخط ذات العرض الثابت",[30,33536,33537],{},[37,33538,651],{},[441,33540,33542],{"className":15946,"code":33541,"language":15948,"meta":16,"style":16},".readable-text {\n  max-width: 65ch;  /* عرض القراءة المثالي */\n}\n",[448,33543,33544,33551,33567],{"__ignoreMap":16},[1608,33545,33546,33549],{"class":1785,"line":1786},[1608,33547,33548],{"class":9341},".readable-text",[1608,33550,1960],{"class":1959},[1608,33552,33553,33555,33557,33560,33562,33564],{"class":1785,"line":1260},[1608,33554,33188],{"class":9349},[1608,33556,4147],{"class":1959},[1608,33558,33559],{"class":3075},"65",[1608,33561,33521],{"class":32729},[1608,33563,32810],{"class":1959},[1608,33565,33566],{"class":1945},"/* عرض القراءة المثالي */\n",[1608,33568,33569],{"class":1785,"line":17},[1608,33570,2005],{"class":1959},[30,33572,33573,33576,33577,33579],{},[37,33574,33575],{},"ملاحظة:"," دعم المتصفحات لوحدة ",[448,33578,33521],{}," ممتاز في المتصفحات الحديثة، لكن قدم دائماً احتياطياً للمتصفحات القديمة.",[68,33581,33583],{"id":33582},"اختيار-الوحدة-المناسبة-مرجع-سريع","اختيار الوحدة المناسبة: مرجع سريع",[507,33585,33586,33598],{},[510,33587,33588],{},[513,33589,33590,33592,33595],{},[516,33591,19034],{},[516,33593,33594],{},"الوحدة الموصى بها",[516,33596,33597],{},"لماذا",[523,33599,33600,33610,33621,33632,33642,33651,33661,33671],{},[513,33601,33602,33605,33607],{},[528,33603,33604],{},"أحجام الخط",[528,33606,32929],{},[528,33608,33609],{},"تحترم تفضيلات المستخدم، متسقة",[513,33611,33612,33615,33618],{},[528,33613,33614],{},"التباعد (الحواف، الحشو)",[528,33616,33617],{},"rem أو em",[528,33619,33620],{},"يتوسع مع النص",[513,33622,33623,33626,33629],{},[528,33624,33625],{},"عرض الحاويات",[528,33627,33628],{},"% أو max-width في px",[528,33630,33631],{},"مرن لكن محدود",[513,33633,33634,33637,33639],{},[528,33635,33636],{},"الحدود",[528,33638,32730],{},[528,33640,33641],{},"يحتاج تحكم دقيق",[513,33643,33644,33647,33649],{},[528,33645,33646],{},"الظلال",[528,33648,32730],{},[528,33650,33641],{},[513,33652,33653,33656,33658],{},[528,33654,33655],{},"الأقسام ذات الارتفاع الكامل",[528,33657,33341],{},[528,33659,33660],{},"نسبي للعرض",[513,33662,33663,33665,33668],{},[528,33664,33311],{},[528,33666,33667],{},"calc(rem + vw)",[528,33669,33670],{},"سائل ويمكن الوصول إليه",[513,33672,33673,33676,33678],{},[528,33674,33675],{},"عرض حاوي النص",[528,33677,33521],{},[528,33679,33680],{},"قراءة مثالية",[68,33682,33684],{"id":33683},"مثال-عملي-مكون-بطاقة-متجاوب","مثال عملي: مكون بطاقة متجاوب",[30,33686,33687],{},"إليك كيف تعمل وحدات مختلفة معاً في مكون حقيقي:",[441,33689,33691],{"className":15946,"code":33690,"language":15948,"meta":16,"style":16},".card {\n  /* عرض مرن، محدود أقصى */\n  width: 100%;\n  max-width: 400px;\n  \n  /* تباعد يتوسع مع النص */\n  padding: 1.5rem;\n  margin-bottom: 2rem;\n  \n  /* حدود دقيقة */\n  border: 1px solid #e0e0e0;\n  border-radius: 8px;\n  \n  /* ظل متناسب */\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.card-title {\n  /* نص قابل للوصول، قابل للتوسع */\n  font-size: 1.5rem;\n  margin-bottom: 1rem;\n}\n\n.card-image {\n  /* صورة متجاوبة */\n  width: 100%;\n  height: auto;\n}\n",[448,33692,33693,33699,33704,33716,33729,33733,33738,33750,33762,33766,33771,33788,33801,33805,33810,33850,33854,33858,33864,33869,33881,33893,33897,33901,33908,33913,33925,33936],{"__ignoreMap":16},[1608,33694,33695,33697],{"class":1785,"line":1786},[1608,33696,33042],{"class":9341},[1608,33698,1960],{"class":1959},[1608,33700,33701],{"class":1785,"line":1260},[1608,33702,33703],{"class":1945},"  /* عرض مرن، محدود أقصى */\n",[1608,33705,33706,33708,33710,33712,33714],{"class":1785,"line":17},[1608,33707,16343],{"class":9349},[1608,33709,4147],{"class":1959},[1608,33711,33175],{"class":3075},[1608,33713,19634],{"class":32729},[1608,33715,1977],{"class":1959},[1608,33717,33718,33720,33722,33725,33727],{"class":1785,"line":1802},[1608,33719,33188],{"class":9349},[1608,33721,4147],{"class":1959},[1608,33723,33724],{"class":3075},"400",[1608,33726,32730],{"class":32729},[1608,33728,1977],{"class":1959},[1608,33730,33731],{"class":1785,"line":1808},[1608,33732,10139],{"class":1959},[1608,33734,33735],{"class":1785,"line":1814},[1608,33736,33737],{"class":1945},"  /* تباعد يتوسع مع النص */\n",[1608,33739,33740,33742,33744,33746,33748],{"class":1785,"line":1820},[1608,33741,32743],{"class":9349},[1608,33743,4147],{"class":1959},[1608,33745,32989],{"class":3075},[1608,33747,32929],{"class":32729},[1608,33749,1977],{"class":1959},[1608,33751,33752,33754,33756,33758,33760],{"class":1785,"line":1825},[1608,33753,32940],{"class":9349},[1608,33755,4147],{"class":1959},[1608,33757,17950],{"class":3075},[1608,33759,32929],{"class":32729},[1608,33761,1977],{"class":1959},[1608,33763,33764],{"class":1785,"line":1831},[1608,33765,10139],{"class":1959},[1608,33767,33768],{"class":1785,"line":1333},[1608,33769,33770],{"class":1945},"  /* حدود دقيقة */\n",[1608,33772,33773,33775,33777,33779,33781,33783,33786],{"class":1785,"line":2075},[1608,33774,32722],{"class":9349},[1608,33776,4147],{"class":1959},[1608,33778,6398],{"class":3075},[1608,33780,32730],{"class":32729},[1608,33782,32733],{"class":9355},[1608,33784,33785],{"class":9355}," #e0e0e0",[1608,33787,1977],{"class":1959},[1608,33789,33790,33793,33795,33797,33799],{"class":1785,"line":2099},[1608,33791,33792],{"class":9349},"  border-radius",[1608,33794,4147],{"class":1959},[1608,33796,21795],{"class":3075},[1608,33798,32730],{"class":32729},[1608,33800,1977],{"class":1959},[1608,33802,33803],{"class":1785,"line":2119},[1608,33804,10139],{"class":1959},[1608,33806,33807],{"class":1785,"line":2129},[1608,33808,33809],{"class":1945},"  /* ظل متناسب */\n",[1608,33811,33812,33815,33817,33819,33821,33823,33826,33828,33831,33833,33835,33837,33839,33841,33843,33845,33848],{"class":1785,"line":1635},[1608,33813,33814],{"class":9349},"  box-shadow",[1608,33816,4147],{"class":1959},[1608,33818,3076],{"class":3075},[1608,33820,3150],{"class":3075},[1608,33822,32730],{"class":32729},[1608,33824,33825],{"class":3075}," 8",[1608,33827,32730],{"class":32729},[1608,33829,33830],{"class":8527}," rgba",[1608,33832,3072],{"class":1959},[1608,33834,3076],{"class":3075},[1608,33836,3020],{"class":1959},[1608,33838,3076],{"class":3075},[1608,33840,3020],{"class":1959},[1608,33842,3076],{"class":3075},[1608,33844,3020],{"class":1959},[1608,33846,33847],{"class":3075},"0.1",[1608,33849,3079],{"class":1959},[1608,33851,33852],{"class":1785,"line":2296},[1608,33853,2005],{"class":1959},[1608,33855,33856],{"class":1785,"line":2302},[1608,33857,1805],{"emptyLinePlaceholder":1305},[1608,33859,33860,33862],{"class":1785,"line":2308},[1608,33861,33070],{"class":9341},[1608,33863,1960],{"class":1959},[1608,33865,33866],{"class":1785,"line":3279},[1608,33867,33868],{"class":1945},"  /* نص قابل للوصول، قابل للتوسع */\n",[1608,33870,33871,33873,33875,33877,33879],{"class":1785,"line":3284},[1608,33872,32893],{"class":9349},[1608,33874,4147],{"class":1959},[1608,33876,32989],{"class":3075},[1608,33878,32929],{"class":32729},[1608,33880,1977],{"class":1959},[1608,33882,33883,33885,33887,33889,33891],{"class":1785,"line":3293},[1608,33884,32940],{"class":9349},[1608,33886,4147],{"class":1959},[1608,33888,6398],{"class":3075},[1608,33890,32929],{"class":32729},[1608,33892,1977],{"class":1959},[1608,33894,33895],{"class":1785,"line":3298},[1608,33896,2005],{"class":1959},[1608,33898,33899],{"class":1785,"line":3308},[1608,33900,1805],{"emptyLinePlaceholder":1305},[1608,33902,33903,33906],{"class":1785,"line":3318},[1608,33904,33905],{"class":9341},".card-image",[1608,33907,1960],{"class":1959},[1608,33909,33910],{"class":1785,"line":3342},[1608,33911,33912],{"class":1945},"  /* صورة متجاوبة */\n",[1608,33914,33915,33917,33919,33921,33923],{"class":1785,"line":3365},[1608,33916,16343],{"class":9349},[1608,33918,4147],{"class":1959},[1608,33920,33175],{"class":3075},[1608,33922,19634],{"class":32729},[1608,33924,1977],{"class":1959},[1608,33926,33927,33929,33931,33934],{"class":1785,"line":3402},[1608,33928,16353],{"class":9349},[1608,33930,4147],{"class":1959},[1608,33932,33933],{"class":9355},"auto",[1608,33935,1977],{"class":1959},[1608,33937,33938],{"class":1785,"line":3412},[1608,33939,2005],{"class":1959},[68,33941,10991],{"id":10990},[913,33943,33944,33950,33956,33962,33968,33974],{},[52,33945,33946,33949],{},[37,33947,33948],{},"استخدم rem لمعظم التحجيم",": يوفر أفضل توازن بين التحكم وإمكانية الوصول",[52,33951,33952,33955],{},[37,33953,33954],{},"استخدم النسب المئوية للتخطيطات",": تخلق هياكل مرنة ومتجاوبة",[52,33957,33958,33961],{},[37,33959,33960],{},"استخدم البكسلات باعتدال",": احتفظ بها للحدود والظلال والتفاصيل التي تحتاج دقة",[52,33963,33964,33967],{},[37,33965,33966],{},"تجنب em إلا إذا كنت بحاجة للتسلسل",": يمكن أن يكون غير متوقع عند التداخل",[52,33969,33970,33973],{},[37,33971,33972],{},"اختبر مع أحجام نص مختلفة",": تحقق دائماً كيف يبدو تصميمك عندما يزيد المستخدمون حجم النص",[52,33975,33976,33979,33980,33983],{},[37,33977,33978],{},"اجمع الوحدات بذكاء",": استخدم ",[448,33981,33982],{},"calc()"," لخلط أنواع وحدات مختلفة عند الحاجة",[68,33985,27525],{"id":27524},[30,33987,33988],{},[37,33989,33990],{},"استخدام البكسلات لكل شيء:",[441,33992,33994],{"className":15946,"code":33993,"language":15948,"meta":16,"style":16},"/* ❌ غير قابل للوصول */\n.text {\n  font-size: 16px;\n  margin: 20px;\n}\n\n/* ✅ أفضل */\n.text {\n  font-size: 1rem;\n  margin: 1.25rem;\n}\n",[448,33995,33996,34001,34008,34020,34034,34038,34042,34047,34053,34065,34078],{"__ignoreMap":16},[1608,33997,33998],{"class":1785,"line":1786},[1608,33999,34000],{"class":1945},"/* ❌ غير قابل للوصول */\n",[1608,34002,34003,34006],{"class":1785,"line":1260},[1608,34004,34005],{"class":9341},".text",[1608,34007,1960],{"class":1959},[1608,34009,34010,34012,34014,34016,34018],{"class":1785,"line":17},[1608,34011,32893],{"class":9349},[1608,34013,4147],{"class":1959},[1608,34015,19717],{"class":3075},[1608,34017,32730],{"class":32729},[1608,34019,1977],{"class":1959},[1608,34021,34022,34025,34027,34030,34032],{"class":1785,"line":1802},[1608,34023,34024],{"class":9349},"  margin",[1608,34026,4147],{"class":1959},[1608,34028,34029],{"class":3075},"20",[1608,34031,32730],{"class":32729},[1608,34033,1977],{"class":1959},[1608,34035,34036],{"class":1785,"line":1808},[1608,34037,2005],{"class":1959},[1608,34039,34040],{"class":1785,"line":1814},[1608,34041,1805],{"emptyLinePlaceholder":1305},[1608,34043,34044],{"class":1785,"line":1820},[1608,34045,34046],{"class":1945},"/* ✅ أفضل */\n",[1608,34048,34049,34051],{"class":1785,"line":1825},[1608,34050,34005],{"class":9341},[1608,34052,1960],{"class":1959},[1608,34054,34055,34057,34059,34061,34063],{"class":1785,"line":1831},[1608,34056,32893],{"class":9349},[1608,34058,4147],{"class":1959},[1608,34060,6398],{"class":3075},[1608,34062,32929],{"class":32729},[1608,34064,1977],{"class":1959},[1608,34066,34067,34069,34071,34074,34076],{"class":1785,"line":1333},[1608,34068,34024],{"class":9349},[1608,34070,4147],{"class":1959},[1608,34072,34073],{"class":3075},"1.25",[1608,34075,32929],{"class":32729},[1608,34077,1977],{"class":1959},[1608,34079,34080],{"class":1785,"line":2075},[1608,34081,2005],{"class":1959},[30,34083,34084],{},[37,34085,34086],{},"نسيان تعيين حجم خط أساسي:",[441,34088,34090],{"className":15946,"code":34089,"language":15948,"meta":16,"style":16},"/* ✅ حدد دائماً قاعدتك */\nhtml {\n  font-size: 16px;  /* أو 100% */\n}\n",[448,34091,34092,34097,34103,34118],{"__ignoreMap":16},[1608,34093,34094],{"class":1785,"line":1786},[1608,34095,34096],{"class":1945},"/* ✅ حدد دائماً قاعدتك */\n",[1608,34098,34099,34101],{"class":1785,"line":1260},[1608,34100,32886],{"class":32885},[1608,34102,1960],{"class":1959},[1608,34104,34105,34107,34109,34111,34113,34115],{"class":1785,"line":17},[1608,34106,32893],{"class":9349},[1608,34108,4147],{"class":1959},[1608,34110,19717],{"class":3075},[1608,34112,32730],{"class":32729},[1608,34114,32810],{"class":1959},[1608,34116,34117],{"class":1945},"/* أو 100% */\n",[1608,34119,34120],{"class":1785,"line":1802},[1608,34121,2005],{"class":1959},[30,34123,34124],{},[37,34125,34126],{},"استخدام vh لكل شيء:",[441,34128,34130],{"className":15946,"code":34129,"language":15948,"meta":16,"style":16},"/* ❌ يمكن أن يسبب مشاكل على الهاتف مع أشرطة العناوين */\n.section {\n  height: 100vh;\n}\n\n/* ✅ أفضل لأقسام المحتوى */\n.section {\n  min-height: 100vh;\n  padding: 2rem 0;\n}\n",[448,34131,34132,34137,34144,34156,34160,34164,34169,34175,34187,34201],{"__ignoreMap":16},[1608,34133,34134],{"class":1785,"line":1786},[1608,34135,34136],{"class":1945},"/* ❌ يمكن أن يسبب مشاكل على الهاتف مع أشرطة العناوين */\n",[1608,34138,34139,34142],{"class":1785,"line":1260},[1608,34140,34141],{"class":9341},".section",[1608,34143,1960],{"class":1959},[1608,34145,34146,34148,34150,34152,34154],{"class":1785,"line":17},[1608,34147,16353],{"class":9349},[1608,34149,4147],{"class":1959},[1608,34151,33175],{"class":3075},[1608,34153,33341],{"class":32729},[1608,34155,1977],{"class":1959},[1608,34157,34158],{"class":1785,"line":1802},[1608,34159,2005],{"class":1959},[1608,34161,34162],{"class":1785,"line":1808},[1608,34163,1805],{"emptyLinePlaceholder":1305},[1608,34165,34166],{"class":1785,"line":1814},[1608,34167,34168],{"class":1945},"/* ✅ أفضل لأقسام المحتوى */\n",[1608,34170,34171,34173],{"class":1785,"line":1820},[1608,34172,34141],{"class":9341},[1608,34174,1960],{"class":1959},[1608,34176,34177,34179,34181,34183,34185],{"class":1785,"line":1825},[1608,34178,33383],{"class":9349},[1608,34180,4147],{"class":1959},[1608,34182,33175],{"class":3075},[1608,34184,33341],{"class":32729},[1608,34186,1977],{"class":1959},[1608,34188,34189,34191,34193,34195,34197,34199],{"class":1785,"line":1831},[1608,34190,32743],{"class":9349},[1608,34192,4147],{"class":1959},[1608,34194,17950],{"class":3075},[1608,34196,32929],{"class":32729},[1608,34198,10220],{"class":3075},[1608,34200,1977],{"class":1959},[1608,34202,34203],{"class":1785,"line":1333},[1608,34204,2005],{"class":1959},[68,34206,7222],{"id":7222},[30,34208,34209],{},"فهم وحدات CSS أساسي لإنشاء مواقع مرنة وقابلة للوصول وسهلة الصيانة. بينما قد يبدو تنوع الخيارات مربكاً في البداية، تذكر هذه النقاط الرئيسية:",[49,34211,34212,34217,34223,34229],{},[52,34213,34214,34216],{},[37,34215,32929],{}," هو خيارك الأساسي لمعظم احتياجات التحجيم",[52,34218,34219,34222],{},[37,34220,34221],{},"النسب المئوية"," تتفوق في التخطيطات المرنة",[52,34224,34225,34228],{},[37,34226,34227],{},"وحدات العرض"," مثالية للتصاميم الكاملة الشاشة",[52,34230,34231,34234],{},[37,34232,34233],{},"البكسلات"," يجب استخدامها باعتدال للتفاصيل الدقيقة",[30,34236,34237],{},"ابدأ باستخدام rem للنص والتباعد، والنسب المئوية للتخطيطات، وستنشئ تصاميم تعمل بشكل جميل عبر جميع الأجهزة وتحترم تفضيلات المستخدم. مع اكتساب الخبرة، ستطور حدساً لمتى تستخدم كل نوع وحدة.",[30,34239,34240],{},"الأهم من ذلك هو اختبار تصاميمك عبر أحجام شاشات مختلفة ومع تفضيلات أحجام نص مختلفة لضمان قدرة الجميع على استخدام موقعك بشكل مريح.",[2846,34242,34243],{},"html pre.shiki code .sO3gw, html code.shiki .sO3gw{--shiki-light:#6F42C1;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sps74, html code.shiki .sps74{--shiki-light:#005CC5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .sDy_c, html code.shiki .sDy_c{--shiki-light:#D73A49;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .sqBZk, html code.shiki .sqBZk{--shiki-light:#005CC5;--shiki-default:#CE9178;--shiki-dark:#CE9178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .se49E, html code.shiki .se49E{--shiki-light:#22863A;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sNX3-, html code.shiki .sNX3-{--shiki-light:#005CC5;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}",{"title":16,"searchDepth":17,"depth":17,"links":34245},[34246,34247,34251,34256,34260,34261,34262,34263,34264,34265],{"id":32643,"depth":1260,"text":32644},{"id":32675,"depth":1260,"text":32676,"children":34248},[34249,34250],{"id":32682,"depth":17,"text":32683},{"id":32768,"depth":17,"text":32769},{"id":32841,"depth":1260,"text":32842,"children":34252},[34253,34254,34255],{"id":32848,"depth":17,"text":32849},{"id":33009,"depth":17,"text":33010},{"id":33131,"depth":17,"text":33132},{"id":33277,"depth":1260,"text":33278,"children":34257},[34258,34259],{"id":33284,"depth":17,"text":33285},{"id":33449,"depth":17,"text":33450},{"id":33514,"depth":1260,"text":33515},{"id":33582,"depth":1260,"text":33583},{"id":33683,"depth":1260,"text":33684},{"id":10990,"depth":1260,"text":10991},{"id":27524,"depth":1260,"text":27525},{"id":7222,"depth":1260,"text":7222},"تعلم كيفية اختيار وحدات CSS المناسبة لتصاميم الويب الخاصة بك. يغطي هذا الدليل الشامل البكسلات، rem، em، النسب المئوية، وحدات العرض، والمزيد مع أمثلة عملية.","https://images.unsplash.com/photo-1505685296765-3a2736de412f?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDV8fGNzc3xlbnwwfHx8fDE2NzQxMzg3ODQ&ixlib=rb-4.0.3&q=80&w=2000",{"excerpt":34269},{"type":13,"value":34270},[34271,34273,34275,34277],[30,34272,32640],{},[68,34274,32644],{"id":32643},[30,34276,32647],{},[49,34278,34279,34283,34287,34291],{},[52,34280,34281,32655],{},[37,34282,32654],{},[52,34284,34285,32661],{},[37,34286,32660],{},[52,34288,34289,32667],{},[37,34290,32666],{},[52,34292,34293,32672],{},[37,34294,2161],{},"/whdat-css","2023-01-21T14:39:04.000Z",{"title":32635,"description":34266},"وحدات-css",[15948,2886,34300,7290],"responsive-design","2025-10-10T00:00:00.000Z","KTU9X6En_nSfmJL0-H5_yMHsa2DZS7g5JnqN2pEk9mg",{"id":34304,"avatar":34305,"bio":34306,"extension":7,"github":34307,"linkedin":34308,"locale":9,"meta":34309,"name":34311,"role":34316,"slug":26,"stem":34317,"twitter":34318,"website":34319,"__hash__":34320},"authors_ar/ar/authors/رائد-البحري.md","/images/raed-bahri.avif","مدير منتجات ومطور متخصص في التطبيقات العربية أولاً","lord007tn","raed-bahri",{"path":34310,"title":34311,"description":16,"body":34312},"/ar/authors/raed-albhry","رائد البحري",{"type":13,"value":34313,"toc":34314},[],{"title":16,"searchDepth":17,"depth":17,"links":34315},[],"المؤسس و مطور منتجات","ar/authors/رائد-البحري","El_Raed_Bahri","https://raedbahri.com","pMOe7fRPZ-myQQEq3wdjao2Xvtyy74dyBfL4UTF1K2s",{"id":4,"title":5,"description":6,"extension":7,"image":8,"locale":9,"meta":34322,"slug":19,"stem":20,"__hash__":21},{"path":11,"body":34323},{"type":13,"value":34324,"toc":34325},[],{"title":16,"searchDepth":17,"depth":17,"links":34326},[],1761775951223]