mimir-ui-kit 1.33.0 → 1.33.2

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 (37) hide show
  1. package/dist/{Input-ChCIy5oY.js → Input-CCNRdc6Q.js} +2 -1
  2. package/dist/components/Accordion/Accordion.js +9 -1
  3. package/dist/components/Avatar/Avatar.js +10 -1
  4. package/dist/components/CheckboxMimir/CheckboxMimir.js +4 -2
  5. package/dist/components/DatePicker/DatePicker.js +7 -6
  6. package/dist/components/DatePicker/DatePickerModal.js +75 -59
  7. package/dist/components/DatePicker/MonthPickerModal.js +13 -5
  8. package/dist/components/DatePicker/YearPickerModal.js +1 -1
  9. package/dist/components/Drawer/Drawer.d.ts +1 -1
  10. package/dist/components/Input/Input.js +1 -1
  11. package/dist/components/Input/index.js +1 -1
  12. package/dist/components/InputPassword/InputPassword.js +1 -1
  13. package/dist/components/InputPhoneNumber/InputPhoneNumber.js +1 -1
  14. package/dist/components/OtpInput/OtpInput.js +1 -1
  15. package/dist/components/SelectSearch/SelectSearch.js +4 -1
  16. package/dist/components/TabTrail/TabTrail.js +1 -1
  17. package/dist/components/TextArea/TextArea.js +1 -1
  18. package/dist/components/index.js +1 -1
  19. package/dist/icons/Icon.js +1 -1
  20. package/dist/index.js +1 -1
  21. package/package.json +10 -2
  22. package/dist/components/Avatar/types.js +0 -1
  23. package/dist/components/Button/types.js +0 -1
  24. package/dist/components/GosZnak/types.js +0 -1
  25. package/dist/components/Input/types.js +0 -1
  26. package/dist/components/InputRangeSlider/types.js +0 -1
  27. package/dist/components/NotificationBadge/types.js +0 -1
  28. package/dist/components/Pagination/types.js +0 -1
  29. package/dist/components/SelectSearch/types.js +0 -1
  30. package/dist/components/Steps/types.js +0 -1
  31. package/dist/components/Switcher/types.js +0 -1
  32. package/dist/components/Tag/types.js +0 -1
  33. package/dist/components/TextArea/types.js +0 -1
  34. package/dist/components/Toasts/types.js +0 -1
  35. package/dist/components/UniversalUploader/types.js +0 -1
  36. package/dist/components/Vote/types.js +0 -1
  37. package/dist/icons/components/types.js +0 -1
@@ -229,7 +229,8 @@ const Input = memo(
229
229
  clear: true,
230
230
  disabled: disabled2 || readonly,
231
231
  variant: "secondary-gray",
232
- onClick: handleClear
232
+ onClick: handleClear,
233
+ "data-testid": "clear-button"
233
234
  }
234
235
  )
235
236
  ]
@@ -219,7 +219,15 @@ const Accordion = forwardRef(
219
219
  cls[buttonStyle],
220
220
  classNameIconButton
221
221
  ),
222
- children: /* @__PURE__ */ jsx(Icon, { iconName: getIconName(), className: cls.icon })
222
+ "data-testid": "accordion-icon-container",
223
+ children: /* @__PURE__ */ jsx(
224
+ Icon,
225
+ {
226
+ iconName: getIconName(),
227
+ className: cls.icon,
228
+ "data-testid": "accordion-icon"
229
+ }
230
+ )
223
231
  }
224
232
  )
225
233
  ] });
@@ -31,8 +31,17 @@ const Avatar = memo(
31
31
  className: classNames(cls.avatar, cls[size], className, {
32
32
  [cls.default]: !src
33
33
  }),
34
+ "data-testid": "avatar-container",
34
35
  children: [
35
- src ? /* @__PURE__ */ jsx(AppImage, { src, alt, className: cls.image }) : /* @__PURE__ */ jsx(Icon, { iconName: "User16px" }),
36
+ src ? /* @__PURE__ */ jsx(
37
+ AppImage,
38
+ {
39
+ src,
40
+ alt,
41
+ className: cls.image,
42
+ "data-testid": "avatar-image"
43
+ }
44
+ ) : /* @__PURE__ */ jsx(Icon, { iconName: "User16px" }),
36
45
  !!notificationsCount && /* @__PURE__ */ jsx(
37
46
  NotificationBadge,
38
47
  {
@@ -37,13 +37,15 @@ const cls = {
37
37
  const CheckboxMimir = forwardRef(
38
38
  (props, ref) => {
39
39
  const { checked, onChange, children, id, ...restProps } = props;
40
- const [enabled2, setEnabled] = useState(checked);
40
+ const [enabled2, setEnabled] = useState(checked ?? false);
41
41
  const handleChange = (value) => {
42
42
  setEnabled(value);
43
43
  onChange == null ? void 0 : onChange(value);
44
44
  };
45
45
  useEffect(() => {
46
- setEnabled(!!checked);
46
+ if (checked !== void 0) {
47
+ setEnabled(checked);
48
+ }
47
49
  }, [checked]);
48
50
  return /* @__PURE__ */ jsxs(H$1, { className: cls.container, children: [
49
51
  /* @__PURE__ */ jsx(
@@ -4,15 +4,15 @@ import { memo, forwardRef, useState, useEffect } from "react";
4
4
  import { DatePickerModal } from "./DatePickerModal.js";
5
5
  import { MonthPickerModal } from "./MonthPickerModal.js";
6
6
  import { c as cls } from "../../styles.module-7wzJYhR3.js";
7
- import { formatDatePart, getFullYear } from "./utils.js";
7
+ import { formatDatePart } from "./utils.js";
8
8
  import { YearPickerModal } from "./YearPickerModal.js";
9
9
  import { useClickOutside } from "../../hooks/useClickOutside/useClickOutside.js";
10
10
  import { formating } from "../../utils/index.js";
11
- import { I as Input } from "../../Input-ChCIy5oY.js";
11
+ import { I as Input } from "../../Input-CCNRdc6Q.js";
12
12
  import { EInputVariant } from "../Input/constants.js";
13
13
  const MAX_DAY = 31;
14
14
  const MAX_MONTH = 12;
15
- const DATE_LENGTH = 8;
15
+ const DATE_LENGTH = 10;
16
16
  const DatePicker = memo(
17
17
  forwardRef(
18
18
  ({
@@ -48,7 +48,7 @@ const DatePicker = memo(
48
48
  }, [value]);
49
49
  useEffect(() => {
50
50
  if (date && !(typeof date === "string") && !isNaN(date == null ? void 0 : date.getTime())) {
51
- setInputValue(formating.Date(date, "dd/mm/yy"));
51
+ setInputValue(formating.Date(date, "dd/mm/yyyy"));
52
52
  } else {
53
53
  setInputValue("");
54
54
  }
@@ -107,12 +107,12 @@ const DatePicker = memo(
107
107
  const [day, month, year] = [
108
108
  formatDatePart(newValue.substring(0, 2), MAX_DAY),
109
109
  formatDatePart(newValue.substring(2, 4), MAX_MONTH),
110
- newValue.substring(4, 6)
110
+ newValue.substring(4, 8)
111
111
  ];
112
112
  const formattedValue = [day, month, year].filter(Boolean).join("/");
113
113
  setInputValue(formattedValue);
114
114
  if (formattedValue.length === DATE_LENGTH) {
115
- const fullYear = getFullYear(year);
115
+ const fullYear = parseInt(year);
116
116
  const newDate = /* @__PURE__ */ new Date(
117
117
  `${fullYear}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`
118
118
  );
@@ -149,6 +149,7 @@ const DatePicker = memo(
149
149
  addonType: "icon",
150
150
  addonContent: isActive ? "DropdownArrowUp24px" : "DropdownArrowDown24px"
151
151
  },
152
+ "data-error": isError,
152
153
  ...props
153
154
  }
154
155
  )
@@ -120,67 +120,83 @@ function DatePickerModal({
120
120
  );
121
121
  onExit();
122
122
  };
123
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: [cls["calendar-block"]].join(" "), ref: field, children: [
124
- /* @__PURE__ */ jsxs("div", { className: cls["h"], children: [
125
- /* @__PURE__ */ jsx(
126
- Button,
127
- {
128
- isIconButton: true,
129
- iconName: "DropdownArrowLeft16px",
130
- onClick: prev,
131
- variant: "secondary-gray",
132
- size: "l"
133
- }
134
- ),
135
- /* @__PURE__ */ jsxs("div", { className: cls["d"], onClick: () => onType == null ? void 0 : onType("months"), children: [
136
- (_a = formating.Month(month.m)) == null ? void 0 : _a.name,
137
- "’",
138
- month.y.toString().slice(-2),
139
- /* @__PURE__ */ jsx(Icon, { iconName: "DropdownArrowBottom16px" })
140
- ] }),
141
- /* @__PURE__ */ jsx(
142
- Button,
143
- {
144
- isIconButton: true,
145
- iconName: "DropdownArrowRight16px",
146
- onClick: next,
147
- variant: "secondary-gray",
148
- size: "l"
149
- }
150
- )
151
- ] }),
152
- /* @__PURE__ */ jsxs("div", { className: cls["b"], children: [
153
- week.map((i, s) => /* @__PURE__ */ jsx(
154
- "div",
155
- {
156
- className: `${s > countWorkDays ? [cls["m"], cls["orange"]].join(" ") : cls["m"]}`,
157
- children: i
158
- },
159
- `v${s}`
160
- )),
161
- prevDaysArray.map((el, key) => /* @__PURE__ */ jsx("div", { className: cls["m"], children: el }, key)),
162
- days.map((i, s) => /* @__PURE__ */ jsx(
163
- "div",
164
- {
165
- className: isBefore(
166
- (/* @__PURE__ */ new Date(
167
- `${month.y}-${formating.Number(2, month.m)}-${formating.Number(2, i)}`
168
- )).getTime()
169
- ) ? cls["m"] : cls["a"],
170
- children: i !== 0 ? /* @__PURE__ */ jsx(
171
- "b",
123
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
124
+ "div",
125
+ {
126
+ className: [cls["calendar-block"]].join(" "),
127
+ ref: field,
128
+ "data-testid": "calendar-modal",
129
+ children: [
130
+ /* @__PURE__ */ jsxs("div", { className: cls["h"], children: [
131
+ /* @__PURE__ */ jsx(
132
+ Button,
172
133
  {
173
- className: current.y === month.y && current.m === month.m && current.d === i ? cls["current"] : "",
174
- onClick: () => send(i),
175
- children: i
134
+ isIconButton: true,
135
+ iconName: "DropdownArrowLeft16px",
136
+ onClick: prev,
137
+ variant: "secondary-gray",
138
+ size: "l"
139
+ }
140
+ ),
141
+ /* @__PURE__ */ jsxs(
142
+ "div",
143
+ {
144
+ className: cls["d"],
145
+ onClick: () => onType == null ? void 0 : onType("months"),
146
+ "data-testid": "month-year-button",
147
+ children: [
148
+ (_a = formating.Month(month.m)) == null ? void 0 : _a.name,
149
+ "’",
150
+ month.y.toString().slice(-2),
151
+ /* @__PURE__ */ jsx(Icon, { iconName: "DropdownArrowBottom16px" })
152
+ ]
153
+ }
154
+ ),
155
+ /* @__PURE__ */ jsx(
156
+ Button,
157
+ {
158
+ isIconButton: true,
159
+ iconName: "DropdownArrowRight16px",
160
+ onClick: next,
161
+ variant: "secondary-gray",
162
+ size: "l"
176
163
  }
177
- ) : /* @__PURE__ */ jsx("p", {})
178
- },
179
- s
180
- )),
181
- nextDaysArray.map((el, key) => /* @__PURE__ */ jsx("div", { className: cls["m"], children: el }, key))
182
- ] })
183
- ] }) });
164
+ )
165
+ ] }),
166
+ /* @__PURE__ */ jsxs("div", { className: cls["b"], children: [
167
+ week.map((i, s) => /* @__PURE__ */ jsx(
168
+ "div",
169
+ {
170
+ className: `${s > countWorkDays ? [cls["m"], cls["orange"]].join(" ") : cls["m"]}`,
171
+ children: i
172
+ },
173
+ `v${s}`
174
+ )),
175
+ prevDaysArray.map((el, key) => /* @__PURE__ */ jsx("div", { className: cls["m"], children: el }, key)),
176
+ days.map((i, s) => /* @__PURE__ */ jsx(
177
+ "div",
178
+ {
179
+ className: isBefore(
180
+ (/* @__PURE__ */ new Date(
181
+ `${month.y}-${formating.Number(2, month.m)}-${formating.Number(2, i)}`
182
+ )).getTime()
183
+ ) ? cls["m"] : cls["a"],
184
+ children: i !== 0 ? /* @__PURE__ */ jsx(
185
+ "b",
186
+ {
187
+ className: current.y === month.y && current.m === month.m && current.d === i ? cls["current"] : "",
188
+ onClick: () => send(i),
189
+ children: i
190
+ }
191
+ ) : /* @__PURE__ */ jsx("p", {})
192
+ },
193
+ s
194
+ )),
195
+ nextDaysArray.map((el, key) => /* @__PURE__ */ jsx("div", { className: cls["m"], children: el }, key))
196
+ ] })
197
+ ]
198
+ }
199
+ ) });
184
200
  }
185
201
  export {
186
202
  DatePickerModal
@@ -84,10 +84,18 @@ function MonthPickerModal({
84
84
  size: "l"
85
85
  }
86
86
  ),
87
- /* @__PURE__ */ jsxs("div", { onClick: () => onType == null ? void 0 : onType("years"), className: cls["d"], children: [
88
- year.toString(),
89
- /* @__PURE__ */ jsx(Icon, { iconName: "DropdownArrowBottom16px" })
90
- ] }),
87
+ /* @__PURE__ */ jsxs(
88
+ "div",
89
+ {
90
+ onClick: () => onType == null ? void 0 : onType("years"),
91
+ className: cls["d"],
92
+ "data-testid": "year-button",
93
+ children: [
94
+ year.toString(),
95
+ /* @__PURE__ */ jsx(Icon, { iconName: "DropdownArrowBottom16px" })
96
+ ]
97
+ }
98
+ ),
91
99
  /* @__PURE__ */ jsx(
92
100
  Button,
93
101
  {
@@ -99,7 +107,7 @@ function MonthPickerModal({
99
107
  }
100
108
  )
101
109
  ] }),
102
- /* @__PURE__ */ jsx("div", { className: cls["monthGrid"], children: months.map((i, s) => /* @__PURE__ */ jsx(
110
+ /* @__PURE__ */ jsx("div", { className: cls["monthGrid"], "data-testid": "month-picker", children: months.map((i, s) => /* @__PURE__ */ jsx(
103
111
  "div",
104
112
  {
105
113
  className: isBefore(
@@ -96,7 +96,7 @@ function YearPickerModal({
96
96
  }
97
97
  )
98
98
  ] }),
99
- /* @__PURE__ */ jsx("div", { className: cls["monthGrid"], children: years.map((i, s) => /* @__PURE__ */ jsx(
99
+ /* @__PURE__ */ jsx("div", { className: cls["monthGrid"], "data-testid": "year-picker", children: years.map((i, s) => /* @__PURE__ */ jsx(
100
100
  "div",
101
101
  {
102
102
  className: isBefore(
@@ -5,7 +5,7 @@ type TProps = {
5
5
  /**
6
6
  * Обязательный заголовок.
7
7
  */
8
- title: string;
8
+ title: string | ReactNode;
9
9
  /**
10
10
  * Флаг отвечачающий за показ/скрытие.
11
11
  */
@@ -2,7 +2,7 @@ import "react/jsx-runtime";
2
2
  import "../../index-CweZ_OcN.js";
3
3
  import "react";
4
4
  import "./constants.js";
5
- import { I } from "../../Input-ChCIy5oY.js";
5
+ import { I } from "../../Input-CCNRdc6Q.js";
6
6
  import "../../hooks/useMergeRefs/useMergeRefs.js";
7
7
  import "../../icons/Icon.js";
8
8
  import "../Button/Button.js";
@@ -1,4 +1,4 @@
1
- import { I } from "../../Input-ChCIy5oY.js";
1
+ import { I } from "../../Input-CCNRdc6Q.js";
2
2
  import { EInputSize, EInputVariant } from "./constants.js";
3
3
  export {
4
4
  EInputSize,
@@ -3,7 +3,7 @@ import { c as classNames } from "../../index-CweZ_OcN.js";
3
3
  import { memo, forwardRef, useState } from "react";
4
4
  import { Icon } from "../../icons/Icon.js";
5
5
  import { Button } from "../Button/Button.js";
6
- import { I as Input } from "../../Input-ChCIy5oY.js";
6
+ import { I as Input } from "../../Input-CCNRdc6Q.js";
7
7
  import '../../assets/InputPassword.css';const input = "_input_34v9n_2";
8
8
  const wrapper = "_wrapper_34v9n_6";
9
9
  const button = "_button_34v9n_17";
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { memo, forwardRef, useState, useCallback, useImperativeHandle } from "react";
3
3
  import { getMaskedInputPhoneValue, getUnmaskedInputValue } from "./utils.js";
4
- import { I as Input } from "../../Input-ChCIy5oY.js";
4
+ import { I as Input } from "../../Input-CCNRdc6Q.js";
5
5
  const InputPhoneNumber = memo(
6
6
  forwardRef(
7
7
  ({ value = "", onChange, ...props }, ref) => {
@@ -3,7 +3,7 @@ import { c as classNames } from "../../index-CweZ_OcN.js";
3
3
  import { forwardRef, useImperativeHandle, Fragment } from "react";
4
4
  import { ITEMS_PER_SEPARATOR, DEFAULT_VALUE_LENGTH } from "./constants.js";
5
5
  import { useOTPInput } from "./hooks.js";
6
- import { I as Input } from "../../Input-ChCIy5oY.js";
6
+ import { I as Input } from "../../Input-CCNRdc6Q.js";
7
7
  import '../../assets/OtpInput.css';const otp = "_otp_19unm_3";
8
8
  const input = "_input_19unm_14";
9
9
  const separator = "_separator_19unm_28";
@@ -4,7 +4,7 @@ import * as React from "react";
4
4
  import React__default, { useReducer, useMemo, useSyncExternalStore, useId as useId$1, useEffect, useCallback, useRef, useLayoutEffect, createContext, useContext, useState, Fragment, createRef, forwardRef } from "react";
5
5
  import { ESelectSearchSize } from "./constants.js";
6
6
  import { Icon } from "../../icons/Icon.js";
7
- import { I as Input } from "../../Input-ChCIy5oY.js";
7
+ import { I as Input } from "../../Input-CCNRdc6Q.js";
8
8
  import { EInputVariant, EInputSize } from "../Input/constants.js";
9
9
  import { n as n$2, u as u$3, d as o$1, s as s$3, o as o$2, p as p$1, t as t$3, e as s$4, W as W$1, y as y$3, T, H, M as M$1, a as u$5, $ as $f7dceffc5ad7768b$export$4e328f61c538687f, b as $6179b936705e76d3$export$ae780daf29e6d456, D as D$2, c as o$3 } from "../../keyboard-B256ZoM-.js";
10
10
  import * as ReactDOM from "react-dom";
@@ -3879,6 +3879,7 @@ const SelectSearch = forwardRef(
3879
3879
  disabled: disabled2,
3880
3880
  variant,
3881
3881
  withClearButton,
3882
+ "data-testid": "select-search-input",
3882
3883
  ...searchProps
3883
3884
  }
3884
3885
  ),
@@ -3926,6 +3927,7 @@ const SelectSearch = forwardRef(
3926
3927
  ) : /* @__PURE__ */ jsx(
3927
3928
  zo,
3928
3929
  {
3930
+ "data-testid": "select-search-options",
3929
3931
  className: classNames(
3930
3932
  cls.options,
3931
3933
  cls[size2],
@@ -3943,6 +3945,7 @@ const SelectSearch = forwardRef(
3943
3945
  [cls["option-active"]]: focus
3944
3946
  }
3945
3947
  ),
3948
+ "data-testid": `select-search-option-${item.id}`,
3946
3949
  children: ({ selected }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
3947
3950
  /* @__PURE__ */ jsxs("div", { className: cls["option-inner"], children: [
3948
3951
  item.name,
@@ -251,7 +251,7 @@ const TabTrail = forwardRef(
251
251
  const activeTab = (_a = tabListRef.current) == null ? void 0 : _a.querySelector(
252
252
  `.${cls.tab}[data-active="true"]`
253
253
  );
254
- if (activeTab) {
254
+ if (activeTab && typeof activeTab.scrollIntoView === "function") {
255
255
  activeTab.scrollIntoView({
256
256
  behavior: "smooth",
257
257
  block: "nearest",
@@ -5,7 +5,7 @@ import { useAutoResizeTextArea } from "./hooks.js";
5
5
  import { useMergeRefs } from "../../hooks/useMergeRefs/useMergeRefs.js";
6
6
  import { Icon } from "../../icons/Icon.js";
7
7
  import { Button } from "../Button/Button.js";
8
- import { c as cls } from "../../Input-ChCIy5oY.js";
8
+ import { c as cls } from "../../Input-CCNRdc6Q.js";
9
9
  import { EInputVariant } from "../Input/constants.js";
10
10
  import '../../assets/TextArea.css';const textarea = "_textarea_1axu4_2";
11
11
  const label = "_label_1axu4_22";
@@ -1,6 +1,6 @@
1
1
  import { Button } from "./Button/Button.js";
2
2
  import { EButtonForm, EButtonSize, EButtonVariantBorderless, EButtonVariantDefault, EButtonVariantOutline, EButtonVariantRound } from "./Button/constants.js";
3
- import { I } from "../Input-ChCIy5oY.js";
3
+ import { I } from "../Input-CCNRdc6Q.js";
4
4
  import { EInputSize, EInputVariant } from "./Input/constants.js";
5
5
  import { TextArea } from "./TextArea/TextArea.js";
6
6
  import { InputPassword } from "./InputPassword/InputPassword.js";
@@ -6,7 +6,7 @@ const Icon = ({ iconName, ...props }) => {
6
6
  if (!Component) {
7
7
  return null;
8
8
  }
9
- return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Component, { ...props }) });
9
+ return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Component, { ...props, "data-testid": iconName }) });
10
10
  };
11
11
  export {
12
12
  Icon
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Button } from "./components/Button/Button.js";
2
2
  import { EButtonForm, EButtonSize, EButtonVariantBorderless, EButtonVariantDefault, EButtonVariantOutline, EButtonVariantRound } from "./components/Button/constants.js";
3
- import { I } from "./Input-ChCIy5oY.js";
3
+ import { I } from "./Input-CCNRdc6Q.js";
4
4
  import { EInputSize, EInputVariant } from "./components/Input/constants.js";
5
5
  import { TextArea } from "./components/TextArea/TextArea.js";
6
6
  import { InputPassword } from "./components/InputPassword/InputPassword.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mimir-ui-kit",
3
3
  "private": false,
4
- "version": "1.33.0",
4
+ "version": "1.33.2",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {
@@ -37,6 +37,10 @@
37
37
  "storybook": "storybook dev -p 6006",
38
38
  "build-storybook": "storybook build",
39
39
  "ts:check": "tsc -b",
40
+ "test": "vitest",
41
+ "test:watch": "vitest --watch",
42
+ "test:ui": "vitest --ui",
43
+ "test:coverage": "vitest --coverage",
40
44
  "lint:fix": "eslint . --ext ts,tsx --fix",
41
45
  "lint:prettier": "npx prettier . --write",
42
46
  "lint:stylelint": "stylelint '**/*.module{.css,.scss}'",
@@ -62,6 +66,8 @@
62
66
  "@svgr/cli": "^8.1.0",
63
67
  "@svgr/core": "^8.1.0",
64
68
  "@svgr/plugin-svgo": "^8.1.0",
69
+ "@testing-library/jest-dom": "^6.5.0",
70
+ "@testing-library/react": "^16.0.1",
65
71
  "@types/node": "^20.14.10",
66
72
  "@types/react": "^18.3.3",
67
73
  "@types/react-dom": "^18.3.0",
@@ -81,6 +87,7 @@
81
87
  "eslint-plugin-storybook": "^0.8.0",
82
88
  "glob": "10.3.10",
83
89
  "husky": "^9.0.11",
90
+ "jsdom": "^25.0.0",
84
91
  "lint-staged": "^15.2.7",
85
92
  "p-limit": "^6.1.0",
86
93
  "postcss-preset-env": "^9.6.0",
@@ -101,7 +108,8 @@
101
108
  "vite": "^5.3.1",
102
109
  "vite-plugin-dts": "^3.9.1",
103
110
  "vite-plugin-lib-inject-css": "^2.1.1",
104
- "vite-plugin-svgr": "^4.2.0"
111
+ "vite-plugin-svgr": "^4.2.0",
112
+ "vitest": "^2.1.1"
105
113
  },
106
114
  "peerDependencies": {
107
115
  "@headlessui/react": "^2.1.2",
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
-