mimir-ui-kit 1.27.1 → 1.27.3
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
CHANGED
@@ -1,62 +1,62 @@
|
|
1
|
-
# Mimir-ui
|
2
|
-
|
3
|
-
## Установка и запуск проекта
|
4
|
-
|
5
|
-
1. Установите зависимости:
|
6
|
-
```bash
|
7
|
-
npm install
|
8
|
-
```
|
9
|
-
2. Запуск storybook
|
10
|
-
```bash
|
11
|
-
npm run storybook
|
12
|
-
```
|
13
|
-
|
14
|
-
## Сборка проекта
|
15
|
-
|
16
|
-
1. Скрипт для сборки
|
17
|
-
```bash
|
18
|
-
npm run build
|
19
|
-
```
|
20
|
-
|
21
|
-
## Создание нового компонента
|
22
|
-
|
23
|
-
```bash
|
24
|
-
npm run create-component <ComponentName>
|
25
|
-
```
|
26
|
-
|
27
|
-
## Поднятие версии для публикации на npm
|
28
|
-
|
29
|
-
Для поднятия версии пакета перед публикацией на npm используем следующие скрипты:
|
30
|
-
|
31
|
-
1. `patch`: Этот скрипт увеличивает версию пакета на один патч (например, с версии 1.0.0 до 1.0.1). Он автоматически обновляет версию в файле package.json и создает коммит с обновленной версией.
|
32
|
-
|
33
|
-
```bash
|
34
|
-
npm version patch
|
35
|
-
```
|
36
|
-
|
37
|
-
2. `minor`: Этот скрипт увеличивает версию пакета на один минорный уровень (например, с версии 1.0.0 до 1.1.0). Также обновляет версию в package.json и создает коммит.
|
38
|
-
```bash
|
39
|
-
npm version minor
|
40
|
-
```
|
41
|
-
3. `major`: Этот скрипт увеличивает версию пакета на один мажорный уровень (например, с версии 1.0.0 до 2.0.0). Он также обновляет версию в package.json и создает коммит.
|
42
|
-
```bash
|
43
|
-
npm version major
|
44
|
-
```
|
45
|
-
|
46
|
-
## Публикация на npm
|
47
|
-
|
48
|
-
1. Скрипт для публикации на npm:
|
49
|
-
```bash
|
50
|
-
npm publish
|
51
|
-
```
|
52
|
-
|
53
|
-
## Ручная Генерация иконок
|
54
|
-
|
55
|
-
1. Экспортируем с фигмы иконку.
|
56
|
-
2. Добавляем ее в папку svgs.
|
57
|
-
3. Запускаем скрипт:
|
58
|
-
```bash
|
59
|
-
npm run icons
|
60
|
-
```
|
61
|
-
4. Смотрим в папку `icons/components`
|
62
|
-
5. Готово.
|
1
|
+
# Mimir-ui
|
2
|
+
|
3
|
+
## Установка и запуск проекта
|
4
|
+
|
5
|
+
1. Установите зависимости:
|
6
|
+
```bash
|
7
|
+
npm install
|
8
|
+
```
|
9
|
+
2. Запуск storybook
|
10
|
+
```bash
|
11
|
+
npm run storybook
|
12
|
+
```
|
13
|
+
|
14
|
+
## Сборка проекта
|
15
|
+
|
16
|
+
1. Скрипт для сборки
|
17
|
+
```bash
|
18
|
+
npm run build
|
19
|
+
```
|
20
|
+
|
21
|
+
## Создание нового компонента
|
22
|
+
|
23
|
+
```bash
|
24
|
+
npm run create-component <ComponentName>
|
25
|
+
```
|
26
|
+
|
27
|
+
## Поднятие версии для публикации на npm
|
28
|
+
|
29
|
+
Для поднятия версии пакета перед публикацией на npm используем следующие скрипты:
|
30
|
+
|
31
|
+
1. `patch`: Этот скрипт увеличивает версию пакета на один патч (например, с версии 1.0.0 до 1.0.1). Он автоматически обновляет версию в файле package.json и создает коммит с обновленной версией.
|
32
|
+
|
33
|
+
```bash
|
34
|
+
npm version patch
|
35
|
+
```
|
36
|
+
|
37
|
+
2. `minor`: Этот скрипт увеличивает версию пакета на один минорный уровень (например, с версии 1.0.0 до 1.1.0). Также обновляет версию в package.json и создает коммит.
|
38
|
+
```bash
|
39
|
+
npm version minor
|
40
|
+
```
|
41
|
+
3. `major`: Этот скрипт увеличивает версию пакета на один мажорный уровень (например, с версии 1.0.0 до 2.0.0). Он также обновляет версию в package.json и создает коммит.
|
42
|
+
```bash
|
43
|
+
npm version major
|
44
|
+
```
|
45
|
+
|
46
|
+
## Публикация на npm
|
47
|
+
|
48
|
+
1. Скрипт для публикации на npm:
|
49
|
+
```bash
|
50
|
+
npm publish
|
51
|
+
```
|
52
|
+
|
53
|
+
## Ручная Генерация иконок
|
54
|
+
|
55
|
+
1. Экспортируем с фигмы иконку.
|
56
|
+
2. Добавляем ее в папку svgs.
|
57
|
+
3. Запускаем скрипт:
|
58
|
+
```bash
|
59
|
+
npm run icons
|
60
|
+
```
|
61
|
+
4. Смотрим в папку `icons/components`
|
62
|
+
5. Готово.
|
@@ -1,7 +1,8 @@
|
|
1
|
+
import { ComponentProps } from 'react';
|
1
2
|
import { TCommonStepsProps } from './types';
|
2
3
|
import { TStepsZone } from './types.ts';
|
3
4
|
|
4
|
-
export type TProps = TCommonStepsProps & {
|
5
|
+
export type TProps = TCommonStepsProps & Omit<ComponentProps<'div'>, 'onClick'> & {
|
5
6
|
/**
|
6
7
|
* Класс, применяемый к корневому элементу
|
7
8
|
*/
|
@@ -46,50 +47,28 @@ export type TProps = TCommonStepsProps & {
|
|
46
47
|
* Класс для иконки шага
|
47
48
|
*/
|
48
49
|
classNameIconStep?: string;
|
49
|
-
};
|
50
|
-
export declare const Steps: import('react').ForwardRefExoticComponent<TCommonStepsProps & {
|
51
|
-
/**
|
52
|
-
* Класс, применяемый к корневому элементу
|
53
|
-
*/
|
54
|
-
rootClassName?: string;
|
55
|
-
/**
|
56
|
-
* Класс, применяемый к шагам
|
57
|
-
*/
|
58
|
-
stepClassName?: string;
|
59
|
-
/**
|
60
|
-
* Количество шагов.
|
61
|
-
*/
|
62
|
-
quantity: number;
|
63
|
-
/**
|
64
|
-
* Текущий шаг
|
65
|
-
*/
|
66
|
-
current?: number;
|
67
|
-
/**
|
68
|
-
* Есть ли возможность переключать шаги по клику
|
69
|
-
*/
|
70
|
-
editable?: boolean;
|
71
50
|
/**
|
72
|
-
*
|
51
|
+
* Кастомные размеры шагов.
|
73
52
|
*/
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
disabled?: boolean;
|
53
|
+
customSize?: {
|
54
|
+
width?: number;
|
55
|
+
height?: number;
|
56
|
+
};
|
79
57
|
/**
|
80
|
-
*
|
58
|
+
* Заливать ли элементы цветом той зоны на которую сейчас наведен курсор
|
81
59
|
*/
|
82
|
-
|
60
|
+
fillByActualZone?: boolean;
|
83
61
|
/**
|
84
|
-
*
|
62
|
+
* Коллбек для события наведения на шаг курсором
|
85
63
|
*/
|
86
|
-
|
64
|
+
onStepMouseEnter?: (idx: number) => void;
|
87
65
|
/**
|
88
|
-
*
|
66
|
+
* Коллбэк для события покидания шага курсором
|
89
67
|
*/
|
90
|
-
|
68
|
+
onStepMouseLeave?: () => void;
|
91
69
|
/**
|
92
|
-
*
|
70
|
+
* Передача текущего цвета в родительский компонент
|
93
71
|
*/
|
94
|
-
|
95
|
-
}
|
72
|
+
setParentColor?: (color: string) => void;
|
73
|
+
};
|
74
|
+
export declare const Steps: import('react').ForwardRefExoticComponent<Omit<TProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
|
@@ -35,19 +35,34 @@ const Steps = forwardRef(
|
|
35
35
|
editable: editable2 = false,
|
36
36
|
size = EStepsSize.M,
|
37
37
|
onClick,
|
38
|
+
customSize,
|
38
39
|
resizable: resizable2,
|
39
40
|
disabled = false,
|
40
41
|
zones = [{ color: "#ff0000", to: quantity }],
|
41
42
|
unselectedColor = "#ffffff",
|
42
|
-
|
43
|
+
fillByActualZone,
|
44
|
+
onStepMouseEnter,
|
45
|
+
onStepMouseLeave,
|
46
|
+
setParentColor,
|
47
|
+
classNameIconStep,
|
48
|
+
...otherProps
|
43
49
|
} = props;
|
44
50
|
const idPrefix = useId();
|
45
51
|
const [step2, setStep] = useState(current);
|
46
52
|
const [hoveredStep, setHoveredStep] = useState(null);
|
47
53
|
const stepWasChangedRef = useRef(null);
|
54
|
+
const [currentColor, setCurrentColor] = useState(null);
|
48
55
|
useEffect(() => {
|
49
56
|
setStep(current);
|
50
57
|
}, [current]);
|
58
|
+
useEffect(() => {
|
59
|
+
if (fillByActualZone) {
|
60
|
+
const zone = zones.find((zone2) => zone2.to >= (step2 + 1 || 0));
|
61
|
+
if (zone) {
|
62
|
+
setCurrentColor(zone.color);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}, []);
|
51
66
|
const handleClick = (idx) => {
|
52
67
|
const clickedStep = idx + DIFF_BETWEEN_STEP_AND_INDEX;
|
53
68
|
stepWasChangedRef.current = true;
|
@@ -62,9 +77,25 @@ const Steps = forwardRef(
|
|
62
77
|
const handleMouseEnter = (evt) => {
|
63
78
|
const hoveredIdx = Number(evt.currentTarget.id.split(ID_SEPARATOR)[1]);
|
64
79
|
setHoveredStep(hoveredIdx);
|
80
|
+
onStepMouseEnter && onStepMouseEnter(hoveredIdx);
|
81
|
+
const zone = zones.find((zone2) => zone2.to >= (hoveredIdx + 1 || 0));
|
82
|
+
if (zone) {
|
83
|
+
setParentColor && setParentColor(zone.color);
|
84
|
+
if (fillByActualZone) {
|
85
|
+
setCurrentColor(zone.color);
|
86
|
+
}
|
87
|
+
}
|
65
88
|
};
|
66
89
|
const handleMouseLeave = () => {
|
67
90
|
setHoveredStep(null);
|
91
|
+
onStepMouseLeave && onStepMouseLeave();
|
92
|
+
const zone = zones.find((zone2) => zone2.to >= (step2 + 1 || 0));
|
93
|
+
if (zone) {
|
94
|
+
setParentColor && setParentColor(zone.color);
|
95
|
+
if (fillByActualZone) {
|
96
|
+
setCurrentColor(zone.color);
|
97
|
+
}
|
98
|
+
}
|
68
99
|
};
|
69
100
|
const buttons = Array.from({ length: quantity }, (_, idx) => {
|
70
101
|
var _a, _b;
|
@@ -72,12 +103,24 @@ const Steps = forwardRef(
|
|
72
103
|
while (currentZone < zones.length && zones[currentZone].to <= idx) {
|
73
104
|
currentZone++;
|
74
105
|
}
|
75
|
-
|
106
|
+
let color;
|
107
|
+
if (fillByActualZone && hoveredStep !== null) {
|
108
|
+
color = idx <= hoveredStep ? currentColor : unselectedColor;
|
109
|
+
} else {
|
110
|
+
if (fillByActualZone) {
|
111
|
+
color = step2 > idx ? currentColor : unselectedColor;
|
112
|
+
} else {
|
113
|
+
color = hoveredStep !== null && idx <= hoveredStep ? (_a = zones[currentZone]) == null ? void 0 : _a.color : step2 > idx && hoveredStep === null ? (_b = zones[currentZone]) == null ? void 0 : _b.color : unselectedColor;
|
114
|
+
}
|
115
|
+
}
|
76
116
|
return /* @__PURE__ */ jsx(
|
77
117
|
"button",
|
78
118
|
{
|
79
|
-
|
80
|
-
|
119
|
+
style: {
|
120
|
+
backgroundColor: resizable2 ? color !== null ? color : void 0 : void 0,
|
121
|
+
color: color !== null ? color : void 0,
|
122
|
+
height: customSize == null ? void 0 : customSize.height
|
123
|
+
},
|
81
124
|
id: `${idPrefix}${ID_SEPARATOR}${idx}`,
|
82
125
|
className: classNames(cls.step, cls[size], stepClassName, {
|
83
126
|
[cls.editable]: editable2 && !disabled,
|
@@ -102,6 +145,7 @@ const Steps = forwardRef(
|
|
102
145
|
return /* @__PURE__ */ jsx(
|
103
146
|
"div",
|
104
147
|
{
|
148
|
+
...otherProps,
|
105
149
|
className: classNames(
|
106
150
|
cls.container,
|
107
151
|
{
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { TCommonVoteProps } from './types';
|
2
|
-
import { TStepsZone } from '../Steps
|
2
|
+
import { TStepsZone } from '../Steps';
|
3
3
|
|
4
4
|
export type TProps = TCommonVoteProps & {
|
5
5
|
/**
|
@@ -69,6 +69,17 @@ export type TProps = TCommonVoteProps & {
|
|
69
69
|
* Класс для иконки шага
|
70
70
|
*/
|
71
71
|
classNameIconStep?: string;
|
72
|
+
/**
|
73
|
+
* Кастомные размеры шагов.
|
74
|
+
*/
|
75
|
+
customSize?: {
|
76
|
+
width?: number;
|
77
|
+
height?: number;
|
78
|
+
};
|
79
|
+
/**
|
80
|
+
* Заливать ли элементы цветом той зоны на которую сейчас наведен курсор
|
81
|
+
*/
|
82
|
+
fillByActualZone?: boolean;
|
72
83
|
};
|
73
84
|
export declare const Vote: import('react').ForwardRefExoticComponent<TCommonVoteProps & {
|
74
85
|
/**
|
@@ -138,4 +149,15 @@ export declare const Vote: import('react').ForwardRefExoticComponent<TCommonVote
|
|
138
149
|
* Класс для иконки шага
|
139
150
|
*/
|
140
151
|
classNameIconStep?: string;
|
152
|
+
/**
|
153
|
+
* Кастомные размеры шагов.
|
154
|
+
*/
|
155
|
+
customSize?: {
|
156
|
+
width?: number;
|
157
|
+
height?: number;
|
158
|
+
};
|
159
|
+
/**
|
160
|
+
* Заливать ли элементы цветом той зоны на которую сейчас наведен курсор
|
161
|
+
*/
|
162
|
+
fillByActualZone?: boolean;
|
141
163
|
} & import('react').RefAttributes<HTMLDivElement>>;
|
@@ -3,7 +3,7 @@ import { c as classNames } from "../../index-CweZ_OcN.js";
|
|
3
3
|
import { forwardRef, useState, useEffect } from "react";
|
4
4
|
import { DEFAULT_TITLE, EVoteSize, ZERO_VALUE } from "./constants.js";
|
5
5
|
import { Steps } from "../Steps/Steps.js";
|
6
|
-
import { ZERO_STEP } from "../Steps/constants.js";
|
6
|
+
import { ZERO_STEP, StepSize } from "../Steps/constants.js";
|
7
7
|
import '../../assets/Vote.css';const container = "_container_1akd9_2";
|
8
8
|
const title = "_title_1akd9_9";
|
9
9
|
const score = "_score_1akd9_16";
|
@@ -13,7 +13,6 @@ const cls = {
|
|
13
13
|
score
|
14
14
|
};
|
15
15
|
const Vote = forwardRef((props, ref) => {
|
16
|
-
var _a;
|
17
16
|
const {
|
18
17
|
rootClassName,
|
19
18
|
titleClassName,
|
@@ -27,6 +26,7 @@ const Vote = forwardRef((props, ref) => {
|
|
27
26
|
size = EVoteSize.M,
|
28
27
|
onClick,
|
29
28
|
resizable,
|
29
|
+
customSize,
|
30
30
|
disabled = false,
|
31
31
|
zones = [{ color: "#ff0000", to: quantity }],
|
32
32
|
unselectedColor = "#ffffff",
|
@@ -34,18 +34,32 @@ const Vote = forwardRef((props, ref) => {
|
|
34
34
|
unselected: "#000000",
|
35
35
|
selected: "#ffffff"
|
36
36
|
},
|
37
|
-
classNameIconStep
|
37
|
+
classNameIconStep,
|
38
|
+
fillByActualZone
|
38
39
|
} = props;
|
39
40
|
const [score2, setScore] = useState(current);
|
41
|
+
const [hoveredScore, setHoveredScore] = useState(null);
|
42
|
+
const [currentColor, setCurrentColor] = useState(unselectedColor);
|
40
43
|
const isZeroStep = score2 === ZERO_STEP;
|
41
44
|
useEffect(() => {
|
42
45
|
setScore(current);
|
43
46
|
}, [current]);
|
47
|
+
useEffect(() => {
|
48
|
+
var _a;
|
49
|
+
const newColor = isZeroStep ? unselectedColor : ((_a = zones == null ? void 0 : zones.find((zone) => score2 <= zone.to)) == null ? void 0 : _a.color) ?? unselectedColor;
|
50
|
+
setCurrentColor(newColor);
|
51
|
+
}, [score2, zones, unselectedColor, isZeroStep]);
|
44
52
|
const handleStepsClick = (step) => {
|
45
53
|
setScore(step);
|
46
54
|
onClick && onClick(step);
|
47
55
|
};
|
48
|
-
const
|
56
|
+
const handleHoverStepEnter = (step) => {
|
57
|
+
setHoveredScore(step + 1);
|
58
|
+
};
|
59
|
+
const handleHoverStepLeave = () => {
|
60
|
+
setHoveredScore(null);
|
61
|
+
};
|
62
|
+
const maxContainerWidth = resizable ? quantity * ((customSize == null ? void 0 : customSize.width) ?? StepSize[size].width) : void 0;
|
49
63
|
return /* @__PURE__ */ jsxs("div", { className: classNames(cls.container, rootClassName), ref, children: [
|
50
64
|
!withoutTitle && /* @__PURE__ */ jsx("p", { className: classNames(cls.title, titleClassName), children: title2 }),
|
51
65
|
/* @__PURE__ */ jsx(
|
@@ -53,26 +67,34 @@ const Vote = forwardRef((props, ref) => {
|
|
53
67
|
{
|
54
68
|
className: classNames(cls.score, scoreClassName),
|
55
69
|
style: {
|
56
|
-
backgroundColor,
|
70
|
+
backgroundColor: isZeroStep ? unselectedColor : currentColor,
|
57
71
|
color: isZeroStep ? scoreTextColor.unselected : scoreTextColor.selected
|
58
72
|
},
|
59
|
-
children: isZeroStep ? ZERO_VALUE : score2
|
73
|
+
children: isZeroStep ? ZERO_VALUE : hoveredScore || score2
|
60
74
|
}
|
61
75
|
),
|
62
76
|
/* @__PURE__ */ jsx(
|
63
77
|
Steps,
|
64
78
|
{
|
79
|
+
style: {
|
80
|
+
maxWidth: maxContainerWidth
|
81
|
+
},
|
82
|
+
customSize,
|
65
83
|
rootClassName: stepsRootClassName,
|
66
84
|
stepClassName: stepsStepClassName,
|
67
85
|
quantity,
|
68
|
-
size,
|
86
|
+
size: EVoteSize.L,
|
69
87
|
current: score2,
|
70
88
|
editable: true,
|
71
89
|
resizable,
|
72
90
|
disabled,
|
73
91
|
onClick: handleStepsClick,
|
92
|
+
onStepMouseEnter: handleHoverStepEnter,
|
93
|
+
onStepMouseLeave: handleHoverStepLeave,
|
94
|
+
setParentColor: setCurrentColor,
|
74
95
|
zones,
|
75
96
|
unselectedColor,
|
97
|
+
fillByActualZone,
|
76
98
|
classNameIconStep
|
77
99
|
}
|
78
100
|
)
|