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.
Files changed (41) hide show
  1. package/README.md +160 -0
  2. package/dist/components/button/button.d.ts +54 -0
  3. package/dist/components/button/button.d.ts.map +1 -0
  4. package/dist/components/button/index.d.ts +3 -0
  5. package/dist/components/button/index.d.ts.map +1 -0
  6. package/dist/components/input/SearchIcon.d.ts +26 -0
  7. package/dist/components/input/SearchIcon.d.ts.map +1 -0
  8. package/dist/components/input/index.d.ts +4 -0
  9. package/dist/components/input/index.d.ts.map +1 -0
  10. package/dist/components/input/input.d.ts +100 -0
  11. package/dist/components/input/input.d.ts.map +1 -0
  12. package/dist/components/menu-button/GraduationCapIcon.d.ts +6 -0
  13. package/dist/components/menu-button/GraduationCapIcon.d.ts.map +1 -0
  14. package/dist/components/menu-button/index.d.ts +4 -0
  15. package/dist/components/menu-button/index.d.ts.map +1 -0
  16. package/dist/components/menu-button/menu-button.d.ts +63 -0
  17. package/dist/components/menu-button/menu-button.d.ts.map +1 -0
  18. package/dist/components/typography/Heading.d.ts +34 -0
  19. package/dist/components/typography/Heading.d.ts.map +1 -0
  20. package/dist/components/typography/Metric.d.ts +50 -0
  21. package/dist/components/typography/Metric.d.ts.map +1 -0
  22. package/dist/components/typography/Text.d.ts +64 -0
  23. package/dist/components/typography/Text.d.ts.map +1 -0
  24. package/dist/components/typography/index.d.ts +7 -0
  25. package/dist/components/typography/index.d.ts.map +1 -0
  26. package/dist/index.cjs +1 -0
  27. package/dist/index.d.ts +14 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +217 -0
  30. package/dist/styles/mbt-ui-kit.css +1 -0
  31. package/dist/styles/tokens.css +111 -0
  32. package/dist/styles/tokens.d.ts +174 -0
  33. package/dist/styles/tokens.d.ts.map +1 -0
  34. package/dist/tokens-Bab0xxwT.cjs +1 -0
  35. package/dist/tokens-Dmbd19AM.js +96 -0
  36. package/dist/tokens-only.cjs +1 -0
  37. package/dist/tokens-only.d.ts +9 -0
  38. package/dist/tokens-only.d.ts.map +1 -0
  39. package/dist/tokens-only.js +12 -0
  40. package/package.json +67 -0
  41. 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,3 @@
1
+ export { Button } from "./button";
2
+ export type { ButtonProps } from "./button";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export { Input } from "./input";
2
+ export type { InputProps } from "./input";
3
+ export { SearchIcon } from "./SearchIcon";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,6 @@
1
+ interface GraduationCapIconProps {
2
+ className?: string;
3
+ }
4
+ export declare function GraduationCapIcon({ className }: GraduationCapIconProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
6
+ //# sourceMappingURL=GraduationCapIcon.d.ts.map
@@ -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,4 @@
1
+ export { MenuButton } from "./menu-button";
2
+ export type { MenuButtonProps } from "./menu-button";
3
+ export { GraduationCapIcon } from "./GraduationCapIcon";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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;
@@ -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"}