mimir-ui-kit 1.27.2 → 1.27.4

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. Готово.
@@ -54,5 +54,21 @@ export type TProps = TCommonStepsProps & Omit<ComponentProps<'div'>, 'onClick'>
54
54
  width?: number;
55
55
  height?: number;
56
56
  };
57
+ /**
58
+ * Заливать ли элементы цветом той зоны на которую сейчас наведен курсор
59
+ */
60
+ fillByActualZone?: boolean;
61
+ /**
62
+ * Коллбек для события наведения на шаг курсором
63
+ */
64
+ onStepMouseEnter?: (idx: number) => void;
65
+ /**
66
+ * Коллбэк для события покидания шага курсором
67
+ */
68
+ onStepMouseLeave?: () => void;
69
+ /**
70
+ * Передача текущего цвета в родительский компонент
71
+ */
72
+ setParentColor?: (color: string) => void;
57
73
  };
58
74
  export declare const Steps: import('react').ForwardRefExoticComponent<Omit<TProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
@@ -40,6 +40,10 @@ const Steps = forwardRef(
40
40
  disabled = false,
41
41
  zones = [{ color: "#ff0000", to: quantity }],
42
42
  unselectedColor = "#ffffff",
43
+ fillByActualZone,
44
+ onStepMouseEnter,
45
+ onStepMouseLeave,
46
+ setParentColor,
43
47
  classNameIconStep,
44
48
  ...otherProps
45
49
  } = props;
@@ -47,9 +51,18 @@ const Steps = forwardRef(
47
51
  const [step2, setStep] = useState(current);
48
52
  const [hoveredStep, setHoveredStep] = useState(null);
49
53
  const stepWasChangedRef = useRef(null);
54
+ const [currentColor, setCurrentColor] = useState(null);
50
55
  useEffect(() => {
51
56
  setStep(current);
52
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
+ }, []);
53
66
  const handleClick = (idx) => {
54
67
  const clickedStep = idx + DIFF_BETWEEN_STEP_AND_INDEX;
55
68
  stepWasChangedRef.current = true;
@@ -64,9 +77,25 @@ const Steps = forwardRef(
64
77
  const handleMouseEnter = (evt) => {
65
78
  const hoveredIdx = Number(evt.currentTarget.id.split(ID_SEPARATOR)[1]);
66
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
+ }
67
88
  };
68
89
  const handleMouseLeave = () => {
69
90
  setHoveredStep(null);
91
+ onStepMouseLeave && onStepMouseLeave();
92
+ const zone = zones.find((zone2) => zone2.to >= (step2 || 0));
93
+ if (zone) {
94
+ setParentColor && setParentColor(zone.color);
95
+ if (fillByActualZone) {
96
+ setCurrentColor(zone.color);
97
+ }
98
+ }
70
99
  };
71
100
  const buttons = Array.from({ length: quantity }, (_, idx) => {
72
101
  var _a, _b;
@@ -74,14 +103,22 @@ const Steps = forwardRef(
74
103
  while (currentZone < zones.length && zones[currentZone].to <= idx) {
75
104
  currentZone++;
76
105
  }
77
- const 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;
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
+ }
78
116
  return /* @__PURE__ */ jsx(
79
117
  "button",
80
118
  {
81
- type: "button",
82
119
  style: {
83
- backgroundColor: resizable2 ? color : void 0,
84
- color,
120
+ backgroundColor: resizable2 ? color !== null ? color : void 0 : void 0,
121
+ color: color !== null ? color : void 0,
85
122
  height: customSize == null ? void 0 : customSize.height
86
123
  },
87
124
  id: `${idPrefix}${ID_SEPARATOR}${idx}`,
@@ -1,3 +1,3 @@
1
1
  import { TextareaHTMLAttributes } from 'react';
2
2
 
3
- export type TTextAreaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'readOnly' | 'size' | 'placeholder'>;
3
+ export type TTextAreaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'readOnly' | 'size'>;
@@ -1,5 +1,5 @@
1
1
  import { TCommonVoteProps } from './types';
2
- import { TStepsZone } from '../Steps/types.ts';
2
+ import { TStepsZone } from '../Steps';
3
3
 
4
4
  export type TProps = TCommonVoteProps & {
5
5
  /**
@@ -76,6 +76,10 @@ export type TProps = TCommonVoteProps & {
76
76
  width?: number;
77
77
  height?: number;
78
78
  };
79
+ /**
80
+ * Заливать ли элементы цветом той зоны на которую сейчас наведен курсор
81
+ */
82
+ fillByActualZone?: boolean;
79
83
  };
80
84
  export declare const Vote: import('react').ForwardRefExoticComponent<TCommonVoteProps & {
81
85
  /**
@@ -152,4 +156,8 @@ export declare const Vote: import('react').ForwardRefExoticComponent<TCommonVote
152
156
  width?: number;
153
157
  height?: number;
154
158
  };
159
+ /**
160
+ * Заливать ли элементы цветом той зоны на которую сейчас наведен курсор
161
+ */
162
+ fillByActualZone?: boolean;
155
163
  } & import('react').RefAttributes<HTMLDivElement>>;
@@ -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,
@@ -35,19 +34,44 @@ const Vote = forwardRef((props, ref) => {
35
34
  unselected: "#000000",
36
35
  selected: "#ffffff"
37
36
  },
38
- classNameIconStep
37
+ classNameIconStep,
38
+ fillByActualZone
39
39
  } = props;
40
40
  const [score2, setScore] = useState(current);
41
+ const [hoveredScore, setHoveredScore] = useState(null);
42
+ const [currentColor, setCurrentColor] = useState(unselectedColor);
41
43
  const isZeroStep = score2 === ZERO_STEP;
42
44
  useEffect(() => {
43
45
  setScore(current);
44
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]);
45
52
  const handleStepsClick = (step) => {
46
53
  setScore(step);
47
54
  onClick && onClick(step);
48
55
  };
49
- const backgroundColor = isZeroStep ? unselectedColor : ((_a = zones == null ? void 0 : zones.find((zone) => score2 <= zone.to)) == null ? void 0 : _a.color) ?? unselectedColor;
56
+ const handleHoverStepEnter = (step) => {
57
+ setHoveredScore(step + 1);
58
+ };
59
+ const handleHoverStepLeave = () => {
60
+ setHoveredScore(null);
61
+ };
50
62
  const maxContainerWidth = resizable ? quantity * ((customSize == null ? void 0 : customSize.width) ?? StepSize[size].width) : void 0;
63
+ let showingScore;
64
+ let showingScoreBackground;
65
+ let showingScoreColor;
66
+ if (hoveredScore) {
67
+ showingScore = hoveredScore;
68
+ showingScoreBackground = currentColor;
69
+ showingScoreColor = scoreTextColor.selected;
70
+ } else {
71
+ showingScore = isZeroStep ? ZERO_VALUE : score2;
72
+ showingScoreBackground = isZeroStep ? unselectedColor : currentColor;
73
+ showingScoreColor = isZeroStep ? scoreTextColor.unselected : scoreTextColor.selected;
74
+ }
51
75
  return /* @__PURE__ */ jsxs("div", { className: classNames(cls.container, rootClassName), ref, children: [
52
76
  !withoutTitle && /* @__PURE__ */ jsx("p", { className: classNames(cls.title, titleClassName), children: title2 }),
53
77
  /* @__PURE__ */ jsx(
@@ -55,10 +79,10 @@ const Vote = forwardRef((props, ref) => {
55
79
  {
56
80
  className: classNames(cls.score, scoreClassName),
57
81
  style: {
58
- backgroundColor,
59
- color: isZeroStep ? scoreTextColor.unselected : scoreTextColor.selected
82
+ backgroundColor: showingScoreBackground,
83
+ color: showingScoreColor
60
84
  },
61
- children: isZeroStep ? ZERO_VALUE : score2
85
+ children: showingScore
62
86
  }
63
87
  ),
64
88
  /* @__PURE__ */ jsx(
@@ -77,8 +101,12 @@ const Vote = forwardRef((props, ref) => {
77
101
  resizable,
78
102
  disabled,
79
103
  onClick: handleStepsClick,
104
+ onStepMouseEnter: handleHoverStepEnter,
105
+ onStepMouseLeave: handleHoverStepLeave,
106
+ setParentColor: setCurrentColor,
80
107
  zones,
81
108
  unselectedColor,
109
+ fillByActualZone,
82
110
  classNameIconStep
83
111
  }
84
112
  )
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mimir-ui-kit",
3
3
  "private": false,
4
- "version": "1.27.2",
4
+ "version": "1.27.4",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {