1.2.12 • Published 1 year ago
@burna/monster-design-system v1.2.12
نحوه استفاده
- پکیج را نصب کنید.
- فایل css را یک بار در ابتدای نرمافزار ایمپورت کنید.
import 'monster-design-system/styles.css'- سپس هر جا که خواستید کامپوننتها را ایمپورت کرده و استفاده کنید.
import { Button, Textfield } from 'monster-design-system'
<Button text="text" />
<Textfield />نحوه تعریف کامپوننت جدید
هر کامپوننت یک فولدر است که با حرف بزرگ شروع شده و در داخل فولدر components قرار دارد. برای افزودن کامپوننت جدید یک فولدر ساخته و داخل آن ۳ فایل زیر را قرار دهید:
index.jsstyle.scssreadme.md
در تعریف محتوای این فایلها به نکات زیر توجه کنید:
- دو فایل
variables.scssوmixins.scssموجود در فولدرsharedبه طور خودکار در تمام فایلهایstyle.scssقابل دسترسی هستند و نیازی به ایمپورت ندارند. - عکسها در فولدر
assets/imagesبر اساس پسوند فایل در فولدر مناسب خود قرار گرفتهاند. برای استفاده از عکسها کافیاست نام آنها را بیاوریم. مثلا برای دسترسی به فایل موجود درassets/images/png/picture.pngکافیاست بنویسیم:
background-image: url('picture.png');- همچنین برای دسترسی به
assets/images/svg/sub-folder-1/sub-folder-2/file.svgکد زیر را مینویسیم. توجه شود که نام فولدر (در اینجاsvg) از پسوند عکس به طور خودکار محاسبه میشود:
background-image: url('sub-folder-1/sub-folder-2/file.svg');- کتابخانههای
reactوprop-typesو همچنین تعدادی از توابع پراستفادهیreactمثلuseState،useEffectوmemoبه طور خودکار در تمام فایلهایindex.jsقابل دسترسی هستند و نیازی به ایمپورت ندارند. - در فایل
index.jsنام کامپوننت باید همنام فولدر باشد و نیازی بهexportندارد. - برای هر کامپوننت باید
propTypesوdefaultPropsتعریف شود. قبل از هر پراپ نامبردهشده درpropTypesکامنتی بنویسید که کاربرد آن را توضیح دهد. به عنوان مثال:
Button.propTypes = {
/**
* متن دکمه
*/
text: PropTypes.string.isRequired,
// ...
}- ساختار کامنتهای بالای پراپها مهم است. باید حتما ۳ خط باشد و خط اول شامل ۲ ستاره و خطوط بعدی شامل یک ستاره باشند.
- تابع
cnدر تمام فایلهایjsقابل دسترسی است. این تابع که مخففclassNameاست به ما در گرفتن نام کلاسها کمک میکند. به عنوان مثال فرض کنید فایلcomponents/Button/style.scssشامل کد زیر است:
.button {
font-family: iryekan;
align-items: center;
justify-content: center;
&--disabled {
background: #999;
}
&--xs {
width: 50px;
}
&--sm {
width: 100px;
}
&--md {
width: 150px;
}
&--lg {
width: 200px;
}
}خروجی نهایی به شکل زیر خواهد بود:
._button_141oi_1 {
font-family: iryekan;
align-items: center;
justify-content: center;
}
._button--disabled_141oi_11 {
background: #999;
}
._button--xs_141oi_12 {
width: 50px;
}
._button--sm_141oi_13 {
width: 100px;
}
._button--md_141oi_14 {
width: 150px;
}
._button--lg_141oi_15 {
width: 200px;
}همانطور که مشخص است، به انتهای نام همهی کلاسها پسوندی اضافه شدهاست تا از تداخل با کلاسهای دیگر جلوگیری شود. در این شرایط:
- خروجی
cn('button')برابر است با_button_141oi_1 - خروجی
cn('button', { xs: true })برابر است با_button_141oi_1 _button_xs_141oi_12یعنی هر دو کلاس را میگیرد. این امر inheritance را خیلی ساده میکند. - خروجی
cn('button'و 'other-class-name' { lg: true, disabled: true })برابر است با_button_141oi_1 _button--lg_141oi_15 other-class-name