<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های mojtaba hassanzadeh</title>
        <link>https://virgool.io/feed/@mj.hassanzadeh1995</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-04-14 15:19:29</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2046367/avatar/avatar.png?height=120&amp;width=120</url>
            <title>mojtaba hassanzadeh</title>
            <link>https://virgool.io/@mj.hassanzadeh1995</link>
        </image>

                    <item>
                <title>تفاوت type , interface</title>
                <link>https://virgool.io/@mj.hassanzadeh1995/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-type-interface-nv93ykgbcnfp</link>
                <description>تفاوت type و interface توی TypeScript(با مثال‌هایی مثل پیتزا و لگو 😅)تصور کن داری یه شهر لگویی می‌سازی:interface مثل اون صفحه‌ی لگوی پایه‌ایه که می‌تونی روش تیکه‌تیکه چیزای جدید اضافه کنی.امروز یه خونه، فردا بالکن، پس‌فردا پنل خورشیدی. هر چی جلوتر بری، می‌تونی بازش کنی و روش چیز جدید بذاری.type مثل یه قطعه‌ی لگوی پرینت سه‌بعدی اختصاصیه. خیلی دقیق و تیز. کاری رو که براش طراحی شده انجام می‌ده، اما دیگه نمی‌تونی تغییرش بدی. اگه بخوای تغییر بدی باید کلش رو از نو بسازی.خب، فرق اصلی چیه؟1. توسعه‌پذیری (Extensibility)interface می‌تونه دوباره باز بشه و چیزای جدید بهش اضافه بشه:interface Cat {
  meow: () =&gt; string;
}

// یه جای دیگه
interface Cat {
  purr: () =&gt; string;
}

// الان Cat هم meow داره هم purr
ولی type اینو قبول نمی‌کنه. اگه دوباره تعریفش کنی خطا می‌گیری:type Dog = {
  bark: () =&gt; string;
};

type Dog = {
  wagTail: () =&gt; void;
}; 
// ❌ Error: Cannot redeclare ‘Dog’
📌 نتیجه: اگه می‌خوای چیزی توی پروژه یا لایبرریت رشد کنه و بعداً قابل گسترش باشه → interface.2. انعطاف در شکل (Flexibility in Shape)type خیلی انعطاف‌پذیره. می‌تونه union، tuple، شرطی و … رو بسازه.interface بیشتر برای object طراحی شده.مثال:type Status = &#039;loading&#039; | &#039;success&#039; | &#039;error&#039;; // حالت‌های مختلف
type Coordinates = [number, number];          // tuple
type Maybe&lt;T&gt; = T | null | undefined;         // generic
اینارو با interface نمی‌تونی بسازی.3. ادغام (Merging) در مقابل اشتراک (Intersection)interface خودش خودکار merge می‌شه:interface User {
  id: number;
}

interface User {
  name: string;
}

// User = { id: number; name: string }
ولی type نیاز به &amp; داره (intersection):type Id = { id: number };
type Name = { name: string };
type User = Id &amp; Name;
4. کارایی (Performance &amp; Tooling)توی پروژه‌های بزرگ، interface سریع‌تره (autocomplete بهتر، کمتر هنگ کردن VSCode).type مخصوصاً وقتی union یا شرطی زیاد داری می‌تونه IDE رو سنگین کنه.خب، پس چی استفاده کنیم؟قاعده‌ی کلی:✅ interface:شکل آبجکت‌ها (کاربر، کانفیگ، ریسپانس API)وقتی می‌خوای کلاس یه قرارداد رو implement کنهتوی لایبرری‌ها یا کدی که قراره بقیه extend کنن✅ type:union (&#039;dark&#039; | &#039;light&#039;)tuple ([string, number])فانکشن‌ها و overloadهاmapped types یا conditional typesچند نکته‌ی خاصمی‌تونی یه interface رو از یه type که شکل آبجکت داره extend کنی:type Animal = { sound: string };
interface Dog extends Animal { breed: string; } // ✅ کار می‌کنه
ولی اگه type شامل union یا primitive باشه، interface نمی‌تونه ازش extend بشه.نتیجه نهایی؟interface مثل یه کت‌و‌شلوار دوخته‌شده‌ست → شیک، تمیز، آماده‌ی گسترش.type مثل چاقوی سوئیسیه → همه‌کاره، انعطاف‌پذیر، مخصوص وقتی اوضاع عجیب می‌شه.هر دوش لازمن. نباید مذهبی فقط یکی رو انتخاب کنی.اگه همکارت گفت «type همیشه بهتره» ازش بخواه یه union با interface بنویسه… بعدم آروم آروم ازش فاصله بگیر 😏.</description>
                <category>mojtaba hassanzadeh</category>
                <author>mojtaba hassanzadeh</author>
                <pubDate>Sun, 17 Aug 2025 09:34:07 +0330</pubDate>
            </item>
                    <item>
                <title>mantine hooks 🇮🇷</title>
                <link>https://virgool.io/@mj.hassanzadeh1995/mantine-hooks-avteapirxecj</link>
                <description>🇮🇷 دنیای جذاب Hookهای Mantıne: رفقای صمیمی توسعه رابط کاربری 🇮🇷امروز میخوایم یه گپ دوستانه باهاتون داشته باشیم راجع به Hookهای Mantıne، یه سری ابزار فوقالعاده برای ساخت رابطهای کاربری جذاب و پویا توی React.هوک ها یه سری تابع هستن که به شما امکان میدن بدون نیاز به نوشتن کد زیاد، از قابلیتهای مختلف کتابخانهها استفاده کنید. Mantıne هم یه سری Hook کاربردی داره که میتونن کار شما رو توی ساخت رابطهای کاربری خیلی راحتتر و سریعتر کنن.در این مقاله به معرفی چند تا از مهمترین Hookهای Mantıne میپردازیم:1. useMantineTheme:این Hook به شما امکان دسترسی به تم فعلی Mantıne رو میده.پراپها:defaultValue: تم پیشفرض (در صورتی که تم فعلی وجود نداشته باشه)مثال:JavaScriptimport { useMantineTheme } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { colors } = useMantineTheme();

  return (
    &lt;div style={{ backgroundColor: colors.primary }}&gt;
      {/* ... */}
    &lt;/div&gt;
  );
};2. useDisclosure:این Hook یه ابزار قدرتمند برای مدیریت نمایش و پنهان کردن عناصر رابط کاربری هستش.پراپها:isOpen: وضعیت فعلی نمایش (باز یا بسته)onOpen: تابعی که هنگام باز شدن عنصر اجرا میشهonClose: تابعی که هنگام بسته شدن عنصر اجرا میشهمثال:JavaScriptimport { useDisclosure } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { isOpen, onOpen,  } = useDisclosure();

  return (
    &lt;&gt;
      &lt;button ={onOpen}&gt;باز کردن&lt;/button&gt;
      {isOpen &amp;&amp; (
        &lt;div style={{ position: &#039;absolute&#039;, top: 0, left: 0 }}&gt;
          {/* ... محتوای مورد نظر شما */}
          &lt;button ={}&gt;بستن&lt;/button&gt;
        &lt;/div&gt;
      )}
    &lt;/&gt;
  );
};3. useModals:این Hook یه ابزار کاربردی برای مدیریت Modalها (پنجرههای مجزا) در رابط کاربری شما هستش.پراپها:opened: وضعیت فعلی Modal (باز یا بسته)onClose: تابعی که هنگام بسته شدن Modal اجرا میشهمثال:JavaScriptimport { useModals } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { opened,  } = useModals();

  return (
    &lt;&gt;
      &lt;button ={() =&gt; opened.show(&lt;MyModal /&gt;)}&gt;باز کردن Modal&lt;/button&gt;
      &lt;MyModal opened={opened} ={} /&gt;
    &lt;/&gt;
  );
};

const MyModal = ({ opened,  }) =&gt; (
  &lt;Modal opened={opened} ={}&gt;
    {/* ... محتوای مورد نظر شما */}
  &lt;/Modal&gt;
);4. useHover:این Hook به شما امکان میده که تشخیص بدید که آیا اشاره گر ماوس روی یه عنصر خاص قرار گرفته یا نه.پراپها:isHovered: وضعیت فعلی Hover (روی عنصر یا نه)onHover: تابعی که هنگام Hover کردن روی عنصر اجرا میشهonLeave: تابعی که هنگام خارج شدن اشاره گر از روی عنصر اجرا میشهمثال:JavaScriptimport { useHover } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { isHovered, onHover, onLeave } = useHover();

  return (
    &lt;div
      style={{
        backgroundColor: isHovered ? &#039;lightgray&#039; : &#039;white&#039;,
      }}
      ={onHover}
      ={onLeave}
    &gt;
      {/* ... محتوای مورد نظر شما */}
    &lt;/div&gt;
  );
};5. useMediaQuery:این Hook به شما امکان میده که بر اساس اندازه صفحه نمایش، کدهای مختلفی رو اجرا کنید.پراپها:query: یه عبارت CSS Media Querymatches: وضعیت فعلی Media Query (مطابقت داره یا نه)onChange: تابعی که هر بار وضعیت Media Query تغییر میکنه اجرا میشهمثال:JavaScriptimport { useMediaQuery } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { matches } = useMediaQuery(&#039;(max-width: 768px)&#039;);

  return (
    &lt;&gt;
      {matches ? (
        &lt;div style={{ flexDirection: &#039;column&#039; }}&gt;
          {/* محتوای برای نمایش در صفحات کوچک */}
        &lt;/div&gt;
      ) : (
        &lt;div style={{ flexDirection: &#039;row&#039; }}&gt;
          {/* محتوای برای نمایش در صفحات بزرگ */}
        &lt;/div&gt;
      )}
    &lt;/&gt;
  );
};6. useTransition:این Hook یه ابزار قدرتمند برای ایجاد انیمیشنهای روان و جذاب در رابط کاربری شما هستش.پراپها:mounted: وضعیت فعلی نمایش (نمایش داده شده یا نه)children: محتوایی که میخواید انیمیشن بشهtransition: یه شیء که نوع و زمان انیمیشن رو مشخص میکنهمثال:JavaScriptimport { useTransition } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { mounted, children } = useTransition({ duration: 500 });

  return (
    &lt;&gt;
      {mounted &amp;&amp; children}
    &lt;/&gt;
  );
};7. useClipboard:این Hook به شما امکان میده که متن رو به حافظه موقت (Clipboard) کپی کنید.پراپها:isCopied: وضعیت فعلی کپی شدن متن (کپی شده یا نه)value: متنی که میخواید کپی بشهonCopy: تابعی که هنگام کپی شدن متن اجرا میشهمثال:JavaScriptimport { useClipboard } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { isCopied, value,  } = useClipboard(&#039;متن مورد نظر برای کپی&#039;);

  return (
    &lt;&gt;
      &lt;button ={}&gt;کپی کردن&lt;/button&gt;
      {isCopied &amp;&amp; &lt;div&gt;متن با موفقیت کپی شد!&lt;/div&gt;}
    &lt;/&gt;
  );
};
8. useHotkey:این Hook به شما امکان میده که میانبرهای صفحه کلید رو برای انجام کارهای مختلف در رابط کاربری خودتون تعریف کنید.پراپها:hotkey: میانبر صفحه کلید (مثل &quot;Ctrl+Shift+C&quot;)handler: تابعی که هنگام فشردن میانبر صفحه کلید اجرا میشهمثال:JavaScriptimport { useHotkey } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const handleHotkey = () =&gt; {
    // ... کاری که میخواید انجام بشه
  };

  useHotkey(&#039;Ctrl+Shift+C&#039;, handleHotkey);

  return (
    &lt;div&gt;
      {/* ... محتوای مورد نظر شما */}
    &lt;/div&gt;
  );
};9. useBreakpoint:این Hook به شما امکان میده که بر اساس نقطه شکست (Breakpoint) فعلی صفحه نمایش، کدهای مختلفی رو اجرا کنید.پراپها:breakpoint: نقطه شکست مورد نظر (مثل &quot;sm&quot; یا &quot;md&quot;)children: محتوایی که میخواید بر اساس نقطه شکست نمایش داده بشهrender: تابعی که محتوای مورد نظر رو بر اساس نقطه شکست برمیگردونهمثال:JavaScriptimport { useBreakpoint } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { breakpoint } = useBreakpoint();

  return (
    &lt;&gt;
      {breakpoint === &#039;sm&#039; ? (
        &lt;div style={{ flexDirection: &#039;column&#039; }}&gt;
          {/* محتوای برای نمایش در صفحات کوچک */}
        &lt;/div&gt;
      ) : (
        &lt;div style={{ flexDirection: &#039;row&#039; }}&gt;
          {/* محتوای برای نمایش در صفحات بزرگ */}
        &lt;/div&gt;
      )}
    &lt;/&gt;
  );
};10. useScroll:این Hook به شما امکان میده که موقعیت اسکرول فعلی یه عنصر رو ردیابی کنید.پراپها:scrollPosition: موقعیت اسکرول فعلی (در پیکسل)onScroll: تابعی کهمثال:JavaScriptimport { useScroll } from &#039;@mantine/core&#039;;

const MyComponent = () =&gt; {
  const { scrollPosition,  } = useScroll();

  return (
    &lt;div style={{ height: 200, overflow: &#039;auto&#039; }} ={}&gt;
      {/* ... محتوای مورد نظر شما */}
    &lt;/div&gt;
  );
};نکته:برای استفاده از Hookهای Mantıne، باید کتابخانه @mantine/core رو نصب کنید.میتونید از سایر Hookهای Mantıne برای انجام کارهای مختلف در رابطهای کاربری خودتون استفاده کنید.امیدواریم این مقاله برای شما مفید بوده باشه.#Mantıne #React #Hook #برنامهنویسی </description>
                <category>mojtaba hassanzadeh</category>
                <author>mojtaba hassanzadeh</author>
                <pubDate>Tue, 30 Apr 2024 10:09:47 +0330</pubDate>
            </item>
                    <item>
                <title>Mantine ui (Menu, Drawer, Modal)</title>
                <link>https://virgool.io/@mj.hassanzadeh1995/mantine-ui-menu-drawer-modal-nmikisdvliig</link>
                <description>عناصر رابط کاربری جذاب در Mantini: راهنمای جامعسلام رفیق!  آمادهای تا با سه عنصر قدرتمند Mantini برای ساخت رابطهای کاربری جذاب آشنا بشی؟در این مقاله، به دنیای Menu، Drawer و Modal در Mantini سفر خواهیم کرد و به طور کامل با پراپها، نحوه استفاده و  استایلدهی آنها آشنا میشویم.1. Menu: منوی کشویی دوستداشتنیپراپها:children: محتوای منوی شما را در خود جای میدهد.variant: نوع منوی کشویی را مشخص میکند (مانند popover, dropdown, context).trigger: نحوه نمایش منو را تعیین میکند (مانند click, hover).placement: جهت نمایش منو را مشخص میکند (مانند top, bottom, left, right).items: لیستی از آیتمهای منو را شامل میشود.defaultActiveItem: آیتم پیشفرض فعال را مشخص میکند.onClose: تابعی که هنگام بسته شدن منو اجرا میشود.مثال:JavaScriptimport { Menu } from &#039;@mantine/core&#039;;

const items = [
  { label: &#039;خانه&#039;, icon: &#039;Home&#039; },
  { label: &#039;درباره ما&#039;, icon: &#039;Info&#039; },
  { label: &#039;تماس با ما&#039;, icon: &#039;At&#039; },
];

const MyMenu = () =&gt; {
  return (
    &lt;Menu variant=&amp;quotpopover&amp;quot trigger=&amp;quotclick&amp;quot&gt;
      &lt;Menu.Trigger&gt;
        &lt;Button&gt;منو&lt;/Button&gt;
      &lt;/Menu.Trigger&gt;
      &lt;Menu.Content&gt;
        {items.map((item) =&gt; (
          &lt;Menu.Item key={item.label}&gt;
            &lt;Menu.ItemLabel&gt;{item.label}&lt;/Menu.ItemLabel&gt;
            &lt;Menu.ItemIcon icon={item.icon} /&gt;
          &lt;/Menu.Item&gt;
        ))}
      &lt;/Menu.Content&gt;
    &lt;/Menu&gt;
  );
};تغییر استایل:میتوانید با استفاده از theme  Mantini، ظاهر منوی خود را به طور کامل شخصیسازی کنید. به عنوان مثال، برای تغییر رنگ پسزمینه منو، میتوانید از کد زیر استفاده کنید:JavaScriptconst theme = {
  colors: {
    menu: {
      background: &#039;#f0f0f0&#039;,
    },
  },
};2. Drawer: کشوی جانبی جادوییپراپها:children: محتوای کشوی شما را در خود جای میدهد.opened: وضعیت کشو را مشخص میکند (باز یا بسته).onClose: تابعی که هنگام بسته شدن کشو اجرا میشود.size: عرض کشو را تعیین میکند.position: موقعیت کشو را مشخص میکند (مانند left, right).variant: نوع کشو را مشخص میکند (مانند permanent, temporary).shadow: سایه کشو را فعال یا غیرفعال میکند.مثال:JavaScriptimport { Drawer } from &#039;@mantine/core&#039;;

const MyDrawer = () =&gt; {
  const [opened, setOpen] = useState(false);

  return (
    &lt;&gt;
      &lt;Button ={() =&gt; setOpen(true)}&gt;باز کردن کشو&lt;/Button&gt;
      &lt;Drawer
        opened={opened}
        ={() =&gt; setOpen(false)}
        size={300}
        position=&amp;quotleft&amp;quot
        variant=&amp;quottemporary&amp;quot
        shadow
      &gt;
        &lt;Drawer.Header&gt;عنوان کشو&lt;/Drawer.Header&gt;
        &lt;Drawer.Body&gt;
          &lt;p&gt;محتوای کشو&lt;/p&gt;
        &lt;/Drawer.Body&gt;
      &lt;/Drawer&gt;
    &lt;/&gt;
  );
};تغییر استایل:مانند Menu، میتوانید از theme  Mantini برای استایلدهی کشوی خود استفاده کنید. به عنوان مثال، برای تغییر رنگ عنوان کشو، میتوانید از کد زیر استفاده کنید:JavaScriptconst theme = {
  colors: {
    drawer: {
      header: {
        background: &#039;#e0e0e0&#039;,
        color: &#039;#333&#039;,
      },
    },
  },
};3. Modal: پنجرههای پاپآپ جذابپراپها:children: محتوای پنجره پاپآپ شما را در خود جای میدهد.opened: وضعیت پنجره پاپآپ را مشخص میکند (باز یا بسته).onClose: تابعی که هنگام بسته شدن پنجره پاپآپ اجرا میشود.title: عنوان پنجره پاپآپ را نمایش میدهد.overlay: نوع پوشش روی صفحه را مشخص میکند (مانند dimmed, transparent).withOverlay: پوشش روی صفحه را فعال یا غیرفعال میکند.size: اندازه پنجره پاپآپ را تعیین میکند (مانند xs, sm, md, lg, xl).centered: پنجره پاپآپ را در مرکز صفحه قرار میدهد.مثال:JavaScriptimport { Modal } from &#039;@mantine/core&#039;;

const MyModal = () =&gt; {
  const [opened, setOpen] = useState(false);

  return (
    &lt;&gt;
      &lt;Button ={() =&gt; setOpen(true)}&gt;باز کردن Modal&lt;/Button&gt;
      &lt;Modal
        opened={opened}
        ={() =&gt; setOpen(false)}
        title=&amp;quotعنوان Modal&amp;quot
        overlay=&amp;quotdimmed&amp;quot
        size=&amp;quotmd&amp;quot
        centered
      &gt;
        &lt;p&gt;محتوای Modal&lt;/p&gt;
      &lt;/Modal&gt;
    &lt;/&gt;
  );
};تغییر استایل:مانند Menu و Drawer، میتوانید از theme  Mantini برای استایلدهی پنجره پاپآپ خود استفاده کنید. به عنوان مثال، برای تغییر رنگ عنوان Modal، میتوانید از کد زیر استفاده کنید:JavaScriptconst theme = {
  colors: {
    modal: {
      title: {
        background: &#039;#f5f5f5&#039;,
        color: &#039;#666&#039;,
      },
    },
  },
};نکات تکمیلی:برای مشاهده لیست کامل پراپها و نمونههای کد هر عنصر، به مستندات رسمی Mantini مراجعه کنید: از قدرت theme  Mantini برای شخصیسازی کامل ظاهر عناصر خود استفاده کنید.خلاق باشید و از این عناصر قدرتمند برای ساخت رابطهای کاربری جذاب و کاربرپسند استفاده کنید!امیدوارم این مقاله برای شما مفید بوده باشد!اگر سوالی دارید، در بخش نظرات مطرح کنید.</description>
                <category>mojtaba hassanzadeh</category>
                <author>mojtaba hassanzadeh</author>
                <pubDate>Sun, 28 Apr 2024 14:31:43 +0330</pubDate>
            </item>
                    <item>
                <title>mantine (TextInput , Select, Checkbox, Radio Group)</title>
                <link>https://virgool.io/@mj.hassanzadeh1995/mantine-components-ui-lzxklt59owgg</link>
                <description>🇮🇷 دنیای جذاب کامپوننتهای Mantıne: گشت و گذار در میان ابزارهای کاربردی 🇮🇷سلام به رفقای برنامهنویس فارسیزبان!امروز میخوایم یه گپ دوستانه باهاتون داشته باشیم راجع به کامپوننتهای Mantıne، یه سری ابزار فوقالعاده برای ساخت رابطهای کاربری جذاب و کارآمد.ما توی این مقاله به 4 تا از محبوبترین کامپوننتهای Mantıne میپردازیم:1. TextInput:TextInput یه ابزار قدرتمند برای ساخت فیلدهای ورودی متن هستش.ویژگیهای اصلی TextInput:پراپها:value: مقدار فعلی فیلد ورودیonChange: تابعی که هر بار مقدار فیلد ورودی تغییر میکنه اجرا میشهplaceholder: متنی که داخل فیلد ورودی به صورت پیشفرض نمایش داده میشهlabel: برچسب فیلد ورودیsize: اندازه فیلد ورودی (کوچک، متوسط، بزرگ)variant: نوع فیلد ورودی (پیشفرض، مخفی، شبحوار)error: نمایش خطای اعتبارسنجیrequired: الزامی بودن فیلد ورودیمثال:JavaScriptimport { TextInput } from &#039;@mantine/core&#039;;

const MyTextInput = () =&gt; (
  &lt;TextInput
    value=&amp;quotمتن پیشفرض&amp;quot
    ={(e) =&gt; console.log(e.target.value)}
    placeholder=&amp;quotمتن مورد نظر خود را وارد کنید&amp;quot
    label=&amp;quotنام شما&amp;quot
    size=&amp;quotmd&amp;quot
    variant=&amp;quotdefault&amp;quot
    error=&amp;quotمقدار نامعتبر&amp;quot
    required
  /&gt;
);تغییر استایل TextInput:Theme: میتونید با استفاده از تم Mantıne، ظاهر TextInput رو به طور کلی تغییر بدید.CSS: میتونید با استفاده از CSS، ظاهر TextInput رو به طور خاص تغییر بدید.2. Select:Select یه ابزار کاربردی برای ساخت منوی انتخابی هستش.ویژگیهای اصلی Select:پراپها:value: مقدار فعلی منوی انتخابیonChange: تابعی که هر بار مقدار منوی انتخابی تغییر میکنه اجرا میشهoptions: لیستی از گزینههای موجود در منوlabel: برچسب منوی انتخابیsize: اندازه منوی انتخابی (کوچک، متوسط، بزرگ)variant: نوع منوی انتخابی (پیشفرض، مخفی، شبحوار)multiple: امکان انتخاب چند گزینه به طور همزمانمثال:JavaScriptimport { Select } from &#039;@mantine/core&#039;;

const MySelect = () =&gt; (
  &lt;Select
    value=&amp;quotگزینه 1&amp;quot
    ={(e) =&gt; console.log(e.target.value)}
    options={[
      { value: &#039;گزینه 1&#039;, label: &#039;گزینه 1&#039; },
      { value: &#039;گزینه 2&#039;, label: &#039;گزینه 2&#039; },
      { value: &#039;گزینه 3&#039;, label: &#039;گزینه 3&#039; },
    ]}
    label=&amp;quotانتخاب رنگ&amp;quot
    size=&amp;quotmd&amp;quot
    variant=&amp;quotdefault&amp;quot
    multiple
  /&gt;
);تغییر استایل Select:Theme: میتونید با استفاده از تم Mantıne، ظاهر Select رو به طور کلی تغییر بدید.CSS: میتونید با استفاده از CSS، ظاهر Select رو به طور خاص تغییر بدید.3. Checkbox:Checkbox یه ابزار ساده و کاربردی برای ساخت کادرهای علامتدار هستش.ویژگیهای اصلی Checkbox:پراپها:checked: وضعیت فعلی کادر علامتدار (فعال یا غیرفعال)onChange: تابعی که هر بار وضعیت کادر علامتدار تغییر میکنه اجرا میشهlabel: برچسب کادر علامتدارsize: اندازه کادر علامتدار (کوچک، متوسط، بزرگ)variant: نوع کادر علامتدار (پیشفرض، مخفی، شبحوار)مثال:JavaScriptimport { Checkbox } from &#039;@mantine/core&#039;;

const MyCheckbox = () =&gt; (
  &lt;Checkbox
4. Radio Group:Radio Group یه ابزار کاربردی برای ساخت گروهی از دکمههای رادیویی هستش.ویژگیهای اصلی Radio Group:پراپها:value: مقدار فعلی دکمه رادیویی انتخابشدهonChange: تابعی که هر بار مقدار دکمه رادیویی انتخابشده تغییر میکنه اجرا میشهoptions: لیستی از گزینههای موجود در گروهlabel: برچسب گروه دکمههای رادیوییsize: اندازه دکمههای رادیویی (کوچک، متوسط، بزرگ)variant: نوع دکمههای رادیویی (پیشفرض، مخفی، شبحوار)مثال:JavaScriptimport { RadioGroup } from &#039;@mantine/core&#039;;

const MyRadioGroup = () =&gt; (
  &lt;RadioGroup
    value=&amp;quotگزینه 1&amp;quot
    ={(e) =&gt; console.log(e.target.value)}
    options={[
      { value: &#039;گزینه 1&#039;, label: &#039;گزینه 1&#039; },
      { value: &#039;گزینه 2&#039;, label: &#039;گزینه 2&#039; },
      { value: &#039;گزینه 3&#039;, label: &#039;گزینه 3&#039; },
    ]}
    label=&amp;quotانتخاب نوع کاربری&amp;quot
    size=&amp;quotmd&amp;quot
    variant=&amp;quotdefault&amp;quot
  /&gt;
);تغییر استایل Radio Group:Theme: میتونید با استفاده از تم Mantıne، ظاهر Radio Group رو به طور کلی تغییر بدید.CSS: میتونید با استفاده از CSS، ظاهر Radio Group رو به طور خاص تغییر بدید.</description>
                <category>mojtaba hassanzadeh</category>
                <author>mojtaba hassanzadeh</author>
                <pubDate>Sat, 27 Apr 2024 15:07:45 +0330</pubDate>
            </item>
                    <item>
                <title>Button Mantıne ui</title>
                <link>https://virgool.io/@mj.hassanzadeh1995/button-mant%C4%B1ne-ui-ou58v0qvt1vo</link>
                <description>🇮🇷 دکمه‌های Mantıne: رفیق صمیمی رابط کاربری شما 🇮🇷سلام به رفقای برنامه‌نویس فارسی‌زبان!امروز می‌خوایم یه گپ دوستانه باهاتون داشته باشیم راجع به دکمه‌های Mantıne، یه ابزار فوق‌العاده برای ساخت دکمه‌های جذاب و کارآمد توی رابط‌های کاربریتون.دکمه‌ها نقش خیلی مهمی توی رابط کاربری دارن.اونا به کاربر کمک می‌کنن تا با برنامه یا وب‌سایت شما تعامل داشته باشن و کارهای مختلفی مثل ارسال فرم، ثبت‌نام، دانلود و ... رو انجام بدن.Mantıne یه سری ویژگی‌های جذاب به شما ارائه می‌کنه که می‌تونید با استفاده از اون‌ها دکمه‌های منحصر به فرد و چشم‌نواز بسازید.قابلیت‌های اصلی Button در Mantıne:انواع مختلف: دکمه‌های Mantıne توی انواع مختلفی مثل دکمه‌های اولیه، ثانویه، مخفی، شبح‌وار و ... ارائه می‌شن.رنگ‌ها: می‌تونید رنگ دکمه‌ها رو مطابق با تم و سلیقه خودتون تنظیم کنید.اندازه‌ها: دکمه‌ها توی اندازه‌های مختلفی از کوچک تا بزرگ ارائه می‌شن.آیکون‌ها: می‌تونید به دکمه‌ها آیکون اضافه کنید تا کارکردشون رو به صورت بصری به کاربر نشون بدید.بارگذاری: می‌تونید از دکمه‌های بارگذاری برای نمایش وضعیت انجام یه فرآیند استفاده کنید.تنظیمات پیشرفته: Mantıne به شما امکاناتی برای تنظیمات پیشرفته مثل حاشیه، سایه، انیمیشن و ... دکمه‌ها هم ارائه می‌کنه.کاستومایز کردن Button:یکی از جذاب‌ترین ویژگی‌های Button در Mantıne، امکان کاستومایز کردن اون هستش.شما می‌تونید با استفاده از CSS یا Styled Components، ظاهر دکمه‌ها رو مطابق با سلیقه و نیاز خودتون تغییر بدید.مثال:JavaScriptconst theme = {
  colors: {
    primary: &#039;#007bff&#039;,
    secondary: &#039;#6c757d&#039;,
  },
  fonts: {
    body: &#039;Roboto, sans-serif&#039;,
  },
  shadows: {
    md: &#039;0 2px 5px rgba(0, 0, 0, 0.1)&#039;,
  },
};

// MyButton.js
import { Button } from &#039;@mantine/core&#039;;

const MyButton = () =&gt; (
  &lt;Button variant=&amp;quotprimary&amp;quot  shadow=&amp;quotmd&amp;quot  theme={theme}&gt;
    ارسال
  &lt;/Button&gt;
);استفاده از آیکون‌های سفارشی:می‌تونید از آیکون‌های سفارشی توی دکمه‌هاتون استفاده کنید و به رابط کاربریتون یه جلوه بصری جذاب و متمایز بدید.مراحل استفاده از آیکون‌های سفارشی در Button:ایجاد آیکون‌های سفارشی: می‌تونید از ابزارهای مختلف مثل Iconify یا Font Awesome برای ساخت آیکون‌های سفارشی خودتون استفاده کنید.آپلود آیکون‌ها: آیکون‌های سفارشی خودتون رو توی یه پوشه توی پروژهتون آپلود کنید.استفاده از آیکون‌ها در Button: از prop icon در کامپوننت Button برای استفاده از آیکون‌های سفارشی خودتون استفاده کنید.مثال:JavaScript// theme.css
const theme = {
  icons: {
    myIcon: {
      src: &#039;/path/to/my-icon.svg&#039;,
      size: 24,
    },
  },
};

// MyButton.js
import { Button } from &#039;@mantine/core&#039;;

const MyButton = () =&gt; (
  &lt;Button variant=&amp;quotprimary&amp;quot icon=&amp;quotmyIcon&amp;quot theme={theme}&gt;
    ارسال
  &lt;/Button&gt;
);نکته:اگه از Iconify برای ساخت آیکون‌های سفارشی خودتون استفاده می‌کنید، باید یه CDN رو توی پروژهتون ست کنید.می‌تونید از CSS برای تنظیمات ظاهری مثل رنگ، اندازه و موقعیت آیکون‌ها در دکمه استفاده کنید.</description>
                <category>mojtaba hassanzadeh</category>
                <author>mojtaba hassanzadeh</author>
                <pubDate>Sat, 27 Apr 2024 12:39:19 +0330</pubDate>
            </item>
                    <item>
                <title>🇮🇷 دیت پیکر Mantıne  دردسر عدم پشتیبانی از فارسی 🇮🇷</title>
                <link>https://virgool.io/@mj.hassanzadeh1995/%D8%AF%DB%8C%D8%AA-%D9%BE%DB%8C%DA%A9%D8%B1-mant%C4%B1ne-%D8%AF%D8%B1%D8%AF%D8%B3%D8%B1-%D8%B9%D8%AF%D9%85-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C-%D8%A7%D8%B2-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-jqfjiyhbvhek</link>
                <description>سلام دوباره به رفقای برنامه‌نویس فارسی‌زبان!خب، خبر خوب اینکه تنها ما نبودیم که از این موضوع شاکی بودیم!خوشبختانه یه سری از برنامه‌نویس‌های خلاق یه وکیج به اسم mantine-persian-date-picker ساختن که این مشکل رو حل می‌کنه.با استفاده از این پکیج، می‌تونید تاریخ و ماه‌ها رو به صورت فارسی توی Mantıne نمایش بدید.یعنی دیگه خبری از گیجی و سردرگمی کاربرانی که فارسی‌زبان هستن نیست!چطوری از mantine-persian-date-picker استفاده کنیم؟استفاده از این وکیج خیلی سادست. فقط کافیه مراحل زیر رو دنبال کنید:mantine-persian-date-picker رو با استفاده از npm یا yarn نصب کنید:Bashnpm install mantine-persian-date-pickermantine-persian-date-picker رو توی پروژهتون import کنید:JavaScriptimport { DatePicker } from &#039;mantine-persian-date-picker&#039;;از DatePicker مثل یه کامپوننت معمولی Mantıne استفاده کنید:JavaScript&lt;DatePicker /&gt;به همین سادگی!حالا می‌تونید تاریخ و ماه‌ها رو به صورت فارسی توی Mantıne نمایش بدید و از یه تجربه کاربری بی‌نظیر برای کاربرانتون لذت ببرید.**راستی، یادتون نره که mantine-persian-date-picker هنوز توی مراحل اولیه توسعه هستش و ممکنه یه سری باگ یا نقص داشته باشه.اگه توی استفاده ازش به مشکلی برخوردید، می‌تونید توی گیت‌هاب پروژه https://github.com/Soheil-Saberi/mantine-datepicker-jalali یه issue ایجاد کنید.**امیدوارم این مقاله براتون مفید بوده باشه.#Mantıne #دیت‌پیکر #فارسی #برنامه‌نویسی #ایران #mantine-persian-date-picker</description>
                <category>mojtaba hassanzadeh</category>
                <author>mojtaba hassanzadeh</author>
                <pubDate>Sat, 27 Apr 2024 09:28:01 +0330</pubDate>
            </item>
                    <item>
                <title>Mantine ui : کتابخانه</title>
                <link>https://virgool.io/@mj.hassanzadeh1995/mantine-ui-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-xun1959wzio3</link>
                <description>Mantine With Nextjs 13من مجتبی حسن زاده هستم و میخوام با یه مثال  درک ساده ای از mantine بهت بدم .فرض کن یه جعبه ابزار پر از قطعات Lego داری که باهاش می‌تونی هرچیزی که تو ذهنت داری بسازی! Mantine UI هم یه جوریه. یه جعبه ابزار پر از کامپوننت‌های React که باهاش می‌تونی رابط‌های کاربری شیک و مدرن بسازی . دکمه‌ها، فرم‌ها، منوها، نمودارها و یه عالمه چیز دیگه... همه چی تو این جعبه ابزاره .                                        چرا Mantine UI؟سرعت ⚡️: با Mantine UI رابط کاربری‌تو سریع‌تر بساز و بارگذاری صفحه‌تو به حداقل برسون.قابلیت انعطاف‌پذیری ‍♀️: رابط کاربری‌تو جوری که دوست داری بساز. Mantine UI دستتو تو همه چی باز می‌ذاره.دسترسی ♿️: همه، حتی کسایی که مشکل بینایی دارن، می‌تونن از رابط کاربری که با Mantine UI می‌سازی استفاده کنن.جامعه : یه عالمه آدم مهربون و باحال هستن که تو Mantine UI کار می‌کنن و همیشه حاضرن کمکت کنن.نکس جی اس  یه جور چارچوب قدرتمنده که بهت کمک می‌کنه وب‌سایت و اپلیکیشن‌های جذاب بسازی. Mantine UI هم باهاش دوست صمیمی‌ه! BFF . با Mantine UI می‌تونی رابط‌های کاربری شیک و مدرن برای وب‌سایت و اپلیکیشن‌های Next.js 14 خودت بسازی.چطوری Mantine UI رو با Next.js 14 استفاده کنیم؟ خیلی ساده‌ست! فقط کافیه این مراحل رو دنبال کنی:Mantine UI رو نصب کن:npm install @mantine/core2 .یه Provider Mantine UI به پروژه Next.js خودت اضافه کن:import { createTheme, MantineProvider } from &#039;@mantine/core &#039; ;
import &#039;@mantine/core/styles.css&#039;;

const theme = createTheme({
تنظیمات مربوط به تم  
});
function Demo() {
  return (
    &lt;MantineProvider theme={theme}&gt;
      {/* Your app here */}
    &lt;/MantineProvider&gt;
  );
}
از کامپوننت‌های Mantine UI تو صفحات و کامپوننت‌های Next.js خودت استفاده کن.خیلی ساده‌ست! فقط کافیه این مراحل رو دنبال کنی:از کامپوننت‌های Mantine UI تو صفحات و کامپوننت‌های Next.js خودت استفاده کن.**حالا برو و یه رابط کاربری خفن بساز! **موفق باشی! ✨</description>
                <category>mojtaba hassanzadeh</category>
                <author>mojtaba hassanzadeh</author>
                <pubDate>Thu, 25 Apr 2024 10:37:26 +0330</pubDate>
            </item>
            </channel>
</rss>