mimir-ui-kit 1.27.2 → 1.27.3

Sign up to get free protection for your applications and to get access to all the features.
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 + 1 || 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,18 +34,31 @@ 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;
51
63
  return /* @__PURE__ */ jsxs("div", { className: classNames(cls.container, rootClassName), ref, children: [
52
64
  !withoutTitle && /* @__PURE__ */ jsx("p", { className: classNames(cls.title, titleClassName), children: title2 }),
@@ -55,10 +67,10 @@ const Vote = forwardRef((props, ref) => {
55
67
  {
56
68
  className: classNames(cls.score, scoreClassName),
57
69
  style: {
58
- backgroundColor,
70
+ backgroundColor: isZeroStep ? unselectedColor : currentColor,
59
71
  color: isZeroStep ? scoreTextColor.unselected : scoreTextColor.selected
60
72
  },
61
- children: isZeroStep ? ZERO_VALUE : score2
73
+ children: isZeroStep ? ZERO_VALUE : hoveredScore || score2
62
74
  }
63
75
  ),
64
76
  /* @__PURE__ */ jsx(
@@ -77,8 +89,12 @@ const Vote = forwardRef((props, ref) => {
77
89
  resizable,
78
90
  disabled,
79
91
  onClick: handleStepsClick,
92
+ onStepMouseEnter: handleHoverStepEnter,
93
+ onStepMouseLeave: handleHoverStepLeave,
94
+ setParentColor: setCurrentColor,
80
95
  zones,
81
96
  unselectedColor,
97
+ fillByActualZone,
82
98
  classNameIconStep
83
99
  }
84
100
  )
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.3",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {