mbt-ui-kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +160 -0
- package/dist/components/button/button.d.ts +54 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/index.d.ts +3 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/input/SearchIcon.d.ts +26 -0
- package/dist/components/input/SearchIcon.d.ts.map +1 -0
- package/dist/components/input/index.d.ts +4 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/input.d.ts +100 -0
- package/dist/components/input/input.d.ts.map +1 -0
- package/dist/components/menu-button/GraduationCapIcon.d.ts +6 -0
- package/dist/components/menu-button/GraduationCapIcon.d.ts.map +1 -0
- package/dist/components/menu-button/index.d.ts +4 -0
- package/dist/components/menu-button/index.d.ts.map +1 -0
- package/dist/components/menu-button/menu-button.d.ts +63 -0
- package/dist/components/menu-button/menu-button.d.ts.map +1 -0
- package/dist/components/typography/Heading.d.ts +34 -0
- package/dist/components/typography/Heading.d.ts.map +1 -0
- package/dist/components/typography/Metric.d.ts +50 -0
- package/dist/components/typography/Metric.d.ts.map +1 -0
- package/dist/components/typography/Text.d.ts +64 -0
- package/dist/components/typography/Text.d.ts.map +1 -0
- package/dist/components/typography/index.d.ts +7 -0
- package/dist/components/typography/index.d.ts.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +217 -0
- package/dist/styles/mbt-ui-kit.css +1 -0
- package/dist/styles/tokens.css +111 -0
- package/dist/styles/tokens.d.ts +174 -0
- package/dist/styles/tokens.d.ts.map +1 -0
- package/dist/tokens-Bab0xxwT.cjs +1 -0
- package/dist/tokens-Dmbd19AM.js +96 -0
- package/dist/tokens-only.cjs +1 -0
- package/dist/tokens-only.d.ts +9 -0
- package/dist/tokens-only.d.ts.map +1 -0
- package/dist/tokens-only.js +12 -0
- package/package.json +67 -0
- package/src/styles/_tokens.scss +108 -0
package/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# MBT UI Kit
|
|
2
|
+
|
|
3
|
+
React компонентная библиотека со стилями на SCSS для Electron приложений.
|
|
4
|
+
|
|
5
|
+
## Установка
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install mbt-ui-kit
|
|
9
|
+
# или
|
|
10
|
+
bun install mbt-ui-kit
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Использование
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { Button, Input } from "mbt-ui-kit";
|
|
17
|
+
import "mbt-ui-kit/styles";
|
|
18
|
+
|
|
19
|
+
function App() {
|
|
20
|
+
return (
|
|
21
|
+
<div>
|
|
22
|
+
<Input label="Email" placeholder="Введите email" showSearchIcon />
|
|
23
|
+
<Button>Отправить</Button>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Компоненты
|
|
30
|
+
|
|
31
|
+
### Button
|
|
32
|
+
Кнопка с тремя состояниями: default, hover, disabled.
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
<Button>Start</Button>
|
|
36
|
+
<Button disabled>Start</Button>
|
|
37
|
+
<Button fullWidth>Start</Button>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Input
|
|
41
|
+
Текстовое поле с label и опциональной иконкой.
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
<Input label="Label" placeholder="text_input" showSearchIcon />
|
|
45
|
+
<Input label="Label" placeholder="text_input" muted />
|
|
46
|
+
<Input placeholder="text_input" fullWidth />
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Typography
|
|
50
|
+
Компоненты для заголовков, текста и метрик.
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
<Heading level={1}>Main Title</Heading>
|
|
54
|
+
<Text>Regular text</Text>
|
|
55
|
+
<Text strong>Strong text</Text>
|
|
56
|
+
<Metric large>1,234</Metric>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### MenuButton
|
|
60
|
+
Кнопка для боковых меню с иконкой и текстом.
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
<MenuButton>Training</MenuButton>
|
|
64
|
+
<MenuButton selected>Training</MenuButton>
|
|
65
|
+
<MenuButton small>Training</MenuButton>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Разработка
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Установка зависимостей
|
|
72
|
+
bun install
|
|
73
|
+
|
|
74
|
+
# Запуск Storybook
|
|
75
|
+
bun storybook
|
|
76
|
+
|
|
77
|
+
# Сборка библиотеки
|
|
78
|
+
bun run build
|
|
79
|
+
|
|
80
|
+
# Линтинг и форматирование
|
|
81
|
+
bun run lint
|
|
82
|
+
bun run format
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Дизайн-токены
|
|
86
|
+
|
|
87
|
+
Токены дизайн-системы доступны в трёх форматах для максимальной гибкости.
|
|
88
|
+
|
|
89
|
+
### 1. TypeScript/JavaScript
|
|
90
|
+
|
|
91
|
+
Импорт только токенов (без компонентов и стилей):
|
|
92
|
+
```tsx
|
|
93
|
+
import { tokens, colors, spacing, radius } from "mbt-ui-kit/tokens";
|
|
94
|
+
|
|
95
|
+
const MyComponent = () => (
|
|
96
|
+
<div style={{
|
|
97
|
+
backgroundColor: colors.primary,
|
|
98
|
+
padding: spacing[4],
|
|
99
|
+
borderRadius: radius.sm
|
|
100
|
+
}}>
|
|
101
|
+
Content
|
|
102
|
+
</div>
|
|
103
|
+
);
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Или из основного пакета:
|
|
107
|
+
```tsx
|
|
108
|
+
import { colors, spacing, fontSizes } from "mbt-ui-kit";
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Доступные токены:
|
|
112
|
+
- `colors` — цветовая палитра
|
|
113
|
+
- `fonts` — семейства шрифтов
|
|
114
|
+
- `fontSizes` — размеры текста
|
|
115
|
+
- `fontWeights` — начертания шрифтов
|
|
116
|
+
- `spacing` — отступы и размеры
|
|
117
|
+
- `radius` — радиусы скругления
|
|
118
|
+
- `zIndex` — z-индексы
|
|
119
|
+
- `transitions` — анимации
|
|
120
|
+
|
|
121
|
+
### 2. CSS Custom Properties
|
|
122
|
+
|
|
123
|
+
Импорт CSS переменных:
|
|
124
|
+
```tsx
|
|
125
|
+
import "mbt-ui-kit/tokens.css";
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Использование в CSS/SCSS:
|
|
129
|
+
```css
|
|
130
|
+
.my-class {
|
|
131
|
+
background-color: var(--mbt-color-primary);
|
|
132
|
+
padding: var(--mbt-space-4);
|
|
133
|
+
border-radius: var(--mbt-radius-sm);
|
|
134
|
+
font-family: var(--mbt-font-primary);
|
|
135
|
+
transition: all var(--mbt-transition-fast);
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Все переменные имеют префикс `--mbt-` для избежания конфликтов.
|
|
140
|
+
|
|
141
|
+
### 3. SCSS Variables (для расширения библиотеки)
|
|
142
|
+
|
|
143
|
+
```scss
|
|
144
|
+
@use "mbt-ui-kit/src/styles/tokens" as *;
|
|
145
|
+
|
|
146
|
+
.my-class {
|
|
147
|
+
background-color: $primary;
|
|
148
|
+
padding: $space-4;
|
|
149
|
+
border-radius: $radius-sm;
|
|
150
|
+
font-family: $font-ui-primary;
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## TypeScript
|
|
155
|
+
|
|
156
|
+
Библиотека полностью типизирована с подробными JSDoc комментариями.
|
|
157
|
+
|
|
158
|
+
## Лицензия
|
|
159
|
+
|
|
160
|
+
MIT
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ButtonHTMLAttributes, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Button component props
|
|
4
|
+
*
|
|
5
|
+
* Расширяет стандартные HTML button атрибуты с дополнительными кастомными свойствами.
|
|
6
|
+
*/
|
|
7
|
+
export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
8
|
+
/**
|
|
9
|
+
* Содержимое кнопки (текст, иконки, элементы)
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* <Button>Start</Button>
|
|
14
|
+
* <Button><Icon /> Start</Button>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
/**
|
|
19
|
+
* Растягивает кнопку на всю ширину контейнера
|
|
20
|
+
*
|
|
21
|
+
* @default false
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* <Button fullWidth>Full Width Button</Button>
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
fullWidth?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Button — компонент кнопки с тремя состояниями (default, hover, disabled)
|
|
32
|
+
*
|
|
33
|
+
* Дизайн с диагональными закруглениями (top-right и bottom-left).
|
|
34
|
+
* Шрифт: IBM Plex Sans Medium, 16px, uppercase.
|
|
35
|
+
*
|
|
36
|
+
* @component
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```tsx
|
|
40
|
+
* // Обычная кнопка
|
|
41
|
+
* <Button>Start</Button>
|
|
42
|
+
*
|
|
43
|
+
* // Отключенная кнопка
|
|
44
|
+
* <Button disabled>Start</Button>
|
|
45
|
+
*
|
|
46
|
+
* // Кнопка на всю ширину
|
|
47
|
+
* <Button fullWidth>Start</Button>
|
|
48
|
+
*
|
|
49
|
+
* // С обработчиком клика
|
|
50
|
+
* <Button onClick={() => console.log('Clicked!')}>Click Me</Button>
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function Button({ children, fullWidth, disabled, className, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,WAAW,2CAeb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SearchIcon component props
|
|
3
|
+
*/
|
|
4
|
+
interface SearchIconProps {
|
|
5
|
+
/**
|
|
6
|
+
* CSS класс для кастомизации стилей
|
|
7
|
+
*/
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* SearchIcon — SVG иконка поиска (лупа)
|
|
12
|
+
*
|
|
13
|
+
* Размер: 24x24px.
|
|
14
|
+
* Цвет наследуется через `currentColor`.
|
|
15
|
+
*
|
|
16
|
+
* @component
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <SearchIcon />
|
|
21
|
+
* <SearchIcon className="custom-class" />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function SearchIcon({ className }: SearchIconProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=SearchIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchIcon.d.ts","sourceRoot":"","sources":["../../../src/components/input/SearchIcon.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,UAAU,eAAe;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,eAAe,2CA4BxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/input/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { InputHTMLAttributes, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Input component props
|
|
4
|
+
*
|
|
5
|
+
* Расширяет стандартные HTML input атрибуты с дополнительными кастомными свойствами.
|
|
6
|
+
* Свойство `size` исключено, чтобы избежать конфликтов со стилями.
|
|
7
|
+
*/
|
|
8
|
+
export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
9
|
+
/**
|
|
10
|
+
* Текст label над полем ввода
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <Input label="Email" placeholder="example@mail.com" />
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
label?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Приглушённое состояние (серый цвет текста и бордера)
|
|
20
|
+
*
|
|
21
|
+
* Используется для disabled или визуально неактивных полей.
|
|
22
|
+
*
|
|
23
|
+
* @default false
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* <Input label="Label" muted />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
muted?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Показывать встроенную иконку поиска справа
|
|
33
|
+
*
|
|
34
|
+
* @default false
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* <Input placeholder="Search..." showSearchIcon />
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
showSearchIcon?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Кастомная иконка для отображения справа
|
|
44
|
+
*
|
|
45
|
+
* Переопределяет `showSearchIcon` если указана.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* <Input icon={<CustomIcon />} />
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
icon?: ReactNode;
|
|
53
|
+
/**
|
|
54
|
+
* Растягивает input на всю ширину контейнера
|
|
55
|
+
*
|
|
56
|
+
* По умолчанию максимальная ширина 296px.
|
|
57
|
+
*
|
|
58
|
+
* @default false
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```tsx
|
|
62
|
+
* <Input fullWidth placeholder="Full width input" />
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
fullWidth?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Input — компонент текстового поля с label и опциональной иконкой
|
|
69
|
+
*
|
|
70
|
+
* Поддерживает два визуальных состояния: обычный (светлый) и muted (серый).
|
|
71
|
+
* Шрифт: Inter Regular, 16px.
|
|
72
|
+
* Border radius: 8px.
|
|
73
|
+
*
|
|
74
|
+
* @component
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```tsx
|
|
78
|
+
* // С label и иконкой поиска
|
|
79
|
+
* <Input label="Search" placeholder="text_input" showSearchIcon />
|
|
80
|
+
*
|
|
81
|
+
* // Приглушённое состояние
|
|
82
|
+
* <Input label="Disabled field" muted disabled />
|
|
83
|
+
*
|
|
84
|
+
* // Без label, с кастомной иконкой
|
|
85
|
+
* <Input placeholder="Custom" icon={<MyIcon />} />
|
|
86
|
+
*
|
|
87
|
+
* // На всю ширину
|
|
88
|
+
* <Input label="Email" fullWidth />
|
|
89
|
+
*
|
|
90
|
+
* // С обработчиками
|
|
91
|
+
* <Input
|
|
92
|
+
* label="Name"
|
|
93
|
+
* value={value}
|
|
94
|
+
* onChange={(e) => setValue(e.target.value)}
|
|
95
|
+
* onFocus={() => console.log('Focused')}
|
|
96
|
+
* />
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare function Input({ label, muted, showSearchIcon, icon, fullWidth, className, ...props }: InputProps): import("react/jsx-runtime").JSX.Element;
|
|
100
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/input/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D;;;;;GAKG;AACH,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3D;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,KAAa,EACb,cAAsB,EACtB,IAAI,EACJ,SAAiB,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,UAAU,2CAkDZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraduationCapIcon.d.ts","sourceRoot":"","sources":["../../../src/components/menu-button/GraduationCapIcon.tsx"],"names":[],"mappings":"AAAA,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,2CA0BtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/menu-button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ButtonHTMLAttributes, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* MenuButton component props
|
|
4
|
+
*
|
|
5
|
+
* Расширяет стандартные HTML button атрибуты с дополнительными кастомными свойствами.
|
|
6
|
+
*/
|
|
7
|
+
export interface MenuButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
8
|
+
/**
|
|
9
|
+
* Содержимое кнопки (текст)
|
|
10
|
+
*/
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* Иконка слева от текста
|
|
14
|
+
*
|
|
15
|
+
* @default <GraduationCapIcon />
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* <MenuButton icon={<CustomIcon />}>Training</MenuButton>
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
icon?: ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Активное/выбранное состояние кнопки
|
|
25
|
+
*
|
|
26
|
+
* @default false
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* <MenuButton selected>Training</MenuButton>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
selected?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Компактный размер кнопки (12px текст, 16px иконка)
|
|
36
|
+
*
|
|
37
|
+
* @default false
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* <MenuButton small>Training</MenuButton>
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
small?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* MenuButton — кнопка для боковых меню с иконкой и текстом
|
|
48
|
+
*
|
|
49
|
+
* Поддерживает три визуальных состояния: default, hover (с фоном), selected (активное).
|
|
50
|
+
* Иконка и текст меняют цвет в зависимости от состояния.
|
|
51
|
+
*
|
|
52
|
+
* @props
|
|
53
|
+
* @icon {ReactNode} Иконка слева от текста
|
|
54
|
+
* @selected {boolean} Активное/выбранное состояние кнопки
|
|
55
|
+
* @small {boolean} Компактный размер кнопки
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```tsx
|
|
59
|
+
* <MenuButton>Training</MenuButton>
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function MenuButton({ children, icon, selected, small, disabled, className, ...props }: MenuButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
//# sourceMappingURL=menu-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button.d.ts","sourceRoot":"","sources":["../../../src/components/menu-button/menu-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG7D;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC9E;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,IAAI,EACJ,QAAgB,EAChB,KAAa,EACb,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,2CAwBjB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Heading component props
|
|
4
|
+
*/
|
|
5
|
+
export interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {
|
|
6
|
+
/**
|
|
7
|
+
* Уровень заголовка
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <Heading level={1}>Main Title</Heading>
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
level: 1 | 2 | 3 | 4 | 5;
|
|
15
|
+
/**
|
|
16
|
+
* Содержимое заголовка
|
|
17
|
+
*/
|
|
18
|
+
children?: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Heading — компонент заголовков с 5 уровнями
|
|
22
|
+
*
|
|
23
|
+
* Использует IBM Plex Sans с правильными размерами из дизайн-системы.
|
|
24
|
+
*
|
|
25
|
+
* @props
|
|
26
|
+
* @level {1 | 2 | 3 | 4 | 5} Уровень заголовка
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* <Heading level={1}>Main Title</Heading>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function Heading({ level, children, className, ...props }: HeadingProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
//# sourceMappingURL=Heading.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Heading.d.ts","sourceRoot":"","sources":["../../../src/components/typography/Heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IACtE;;;;;;;OAOG;IACH,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,YAAY,2CASd"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Metric component props
|
|
4
|
+
*/
|
|
5
|
+
export interface MetricProps extends HTMLAttributes<HTMLDivElement> {
|
|
6
|
+
/**
|
|
7
|
+
* Содержимое метрики
|
|
8
|
+
*/
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* Крупный размер (24px)
|
|
12
|
+
*
|
|
13
|
+
* @default false
|
|
14
|
+
*/
|
|
15
|
+
large?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Приглушённый цвет
|
|
18
|
+
*
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
muted?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* HTML элемент для рендера
|
|
24
|
+
*
|
|
25
|
+
* @default "div"
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* <Metric as="span" large>42</Metric>
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
as?: "div" | "span" | "p";
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Metric — компонент для отображения метрик и числовых значений
|
|
36
|
+
*
|
|
37
|
+
* Использует IBM Plex Mono в двух размерах (16px и 24px).
|
|
38
|
+
*
|
|
39
|
+
* @props
|
|
40
|
+
* @large {boolean} Крупный размер (24px)
|
|
41
|
+
* @muted {boolean} Приглушённый цвет
|
|
42
|
+
* @as {string} HTML элемент для рендера
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```tsx
|
|
46
|
+
* <Metric large>1,234</Metric>
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function Metric({ children, large, muted, as, className, ...props }: MetricProps): import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
//# sourceMappingURL=Metric.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metric.d.ts","sourceRoot":"","sources":["../../../src/components/typography/Metric.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,cAAc,CAAC;IACjE;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;OASG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,KAAa,EACb,KAAa,EACb,EAAU,EACV,SAAS,EACT,GAAG,KAAK,EACT,EAAE,WAAW,2CAgBb"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Text component props
|
|
4
|
+
*/
|
|
5
|
+
export interface TextProps extends HTMLAttributes<HTMLParagraphElement> {
|
|
6
|
+
/**
|
|
7
|
+
* Содержимое текста
|
|
8
|
+
*/
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* Усиленное начертание (medium weight)
|
|
12
|
+
*
|
|
13
|
+
* @default false
|
|
14
|
+
*/
|
|
15
|
+
strong?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Мелкий текст (12px)
|
|
18
|
+
*
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
small?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Стиль label (12px, uppercase)
|
|
24
|
+
*
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
label?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Приглушённый цвет
|
|
30
|
+
*
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
muted?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* HTML элемент для рендера
|
|
36
|
+
*
|
|
37
|
+
* @default "p"
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* <Text as="span">Inline text</Text>
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
as?: "p" | "span" | "div";
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Text — компонент для основного текста
|
|
48
|
+
*
|
|
49
|
+
* Использует Inter с поддержкой вариаций (strong, small, label).
|
|
50
|
+
*
|
|
51
|
+
* @props
|
|
52
|
+
* @strong {boolean} Усиленное начертание (medium weight)
|
|
53
|
+
* @small {boolean} Мелкий текст (12px)
|
|
54
|
+
* @label {boolean} Стиль label (12px, uppercase)
|
|
55
|
+
* @muted {boolean} Приглушённый цвет
|
|
56
|
+
* @as {string} HTML элемент для рендера
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* <Text>Regular text</Text>
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function Text({ children, strong, small, label, muted, as, className, ...props }: TextProps): import("react/jsx-runtime").JSX.Element;
|
|
64
|
+
//# sourceMappingURL=Text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../src/components/typography/Text.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,oBAAoB,CAAC;IACrE;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;OASG;IACH,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,MAAc,EACd,KAAa,EACb,KAAa,EACb,KAAa,EACb,EAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,SAAS,2CAkBX"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { Heading } from "./Heading";
|
|
2
|
+
export type { HeadingProps } from "./Heading";
|
|
3
|
+
export { Text } from "./Text";
|
|
4
|
+
export type { TextProps } from "./Text";
|
|
5
|
+
export { Metric } from "./Metric";
|
|
6
|
+
export type { MetricProps } from "./Metric";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/typography/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./tokens-Bab0xxwT.cjs"),t=require("react/jsx-runtime");function j({children:n,fullWidth:e,disabled:s,className:o,...i}){const r=["mbt-button",e&&"mbt-button--full-width",s&&"mbt-button--disabled",o].filter(Boolean).join(" ");return t.jsx("button",{type:"button",className:r,disabled:s,...i,children:n})}function b({className:n}){return t.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:n,children:[t.jsx("circle",{cx:"10.5",cy:"10.5",r:"6.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),t.jsx("path",{d:"M15 15L19 19",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function h({label:n,muted:e=!1,showSearchIcon:s=!1,icon:o,fullWidth:i=!1,className:r,...l}){const c=["mbt-input",i&&"mbt-input--full-width",r].filter(Boolean).join(" "),u=["mbt-input__label",e&&"mbt-input__label--muted"].filter(Boolean).join(" "),m=["mbt-input__wrapper",e&&"mbt-input__wrapper--muted"].filter(Boolean).join(" "),p=["mbt-input__field",e&&"mbt-input__field--muted"].filter(Boolean).join(" "),x=["mbt-input__icon",e&&"mbt-input__icon--muted"].filter(Boolean).join(" "),d=o||s&&t.jsx(b,{});return t.jsx("div",{className:c,children:t.jsxs("div",{className:"mbt-input__container",children:[n&&t.jsx("label",{className:u,children:n}),t.jsxs("div",{className:m,children:[t.jsx("input",{type:"text",className:p,...l}),d&&t.jsx("div",{className:x,children:d})]})]})})}function _({level:n,children:e,className:s,...o}){const i=`h${n}`,r=[`mbt-h${n}`,s].filter(Boolean).join(" ");return t.jsx(i,{className:r,...o,children:e})}function g({children:n,strong:e=!1,small:s=!1,label:o=!1,muted:i=!1,as:r="p",className:l,...c}){const u=r,m=["mbt-text",e&&"mbt-text--strong",s&&"mbt-text--small",o&&"mbt-text--label",i&&"mbt-text--muted",l].filter(Boolean).join(" ");return t.jsx(u,{className:m,...c,children:n})}function k({children:n,large:e=!1,muted:s=!1,as:o="div",className:i,...r}){const l=o,c=["mbt-metric",e&&"mbt-metric--large",s&&"mbt-metric--muted",i].filter(Boolean).join(" ");return t.jsx(l,{className:c,...r,children:n})}function f({className:n}){return t.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:n,children:[t.jsx("path",{d:"M2 9L12 4L22 9L12 14L2 9Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),t.jsx("path",{d:"M6 11V16L12 19L18 16V11",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function N({children:n,icon:e,selected:s=!1,small:o=!1,disabled:i,className:r,...l}){const c=["mbt-menu-button",s&&"mbt-menu-button--selected",o&&"mbt-menu-button--small",r].filter(Boolean).join(" "),u=e??t.jsx(f,{});return t.jsxs("button",{type:"button",className:c,disabled:i,"aria-pressed":s,...l,children:[t.jsx("div",{className:"mbt-menu-button__icon",children:u}),t.jsx("span",{className:"mbt-menu-button__text",children:n})]})}exports.colors=a.colors;exports.fontSizes=a.fontSizes;exports.fontWeights=a.fontWeights;exports.fonts=a.fonts;exports.radius=a.radius;exports.spacing=a.spacing;exports.tokens=a.tokens;exports.transitions=a.transitions;exports.zIndex=a.zIndex;exports.Button=j;exports.GraduationCapIcon=f;exports.Heading=_;exports.Input=h;exports.MenuButton=N;exports.Metric=k;exports.SearchIcon=b;exports.Text=g;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import "./styles/index.scss";
|
|
2
|
+
export { tokens, colors, fonts, fontSizes, fontWeights, spacing, radius, zIndex, transitions } from "./styles/tokens";
|
|
3
|
+
export type { Color, Font, FontSize, FontWeight, Spacing, Radius, ZIndex, Transition } from "./styles/tokens";
|
|
4
|
+
export { Button } from "./components/button";
|
|
5
|
+
export type { ButtonProps } from "./components/button";
|
|
6
|
+
export { Input } from "./components/input";
|
|
7
|
+
export type { InputProps } from "./components/input";
|
|
8
|
+
export { SearchIcon } from "./components/input";
|
|
9
|
+
export { Heading, Text, Metric } from "./components/typography";
|
|
10
|
+
export type { HeadingProps, TextProps, MetricProps, } from "./components/typography";
|
|
11
|
+
export { MenuButton } from "./components/menu-button";
|
|
12
|
+
export type { MenuButtonProps } from "./components/menu-button";
|
|
13
|
+
export { GraduationCapIcon } from "./components/menu-button";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,CAAC;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtH,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG9G,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EACV,YAAY,EACZ,SAAS,EACT,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
|