mimir-ui-kit 1.13.7 → 1.14.1

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. Готово.
@@ -0,0 +1 @@
1
+ ._container_1s8aj_2{--pagination-active: #e5e5e5;display:flex;justify-content:center;gap:var(--space-2xl);margin:0 auto var(--space-xl);font-size:var(--size-text-l);font-family:Inter,sans-serif}._container_1s8aj_2 ._link_1s8aj_11{-webkit-text-decoration:none;text-decoration:none;height:40px;width:40px;color:var(--black-100);display:flex;justify-content:center;align-items:center;border-radius:var(--control-radius);font-family:monospace;font-feature-settings:"zero";font-variant-numeric:slashed-zero}._container_1s8aj_2 ._link_1s8aj_11:active{background-color:var(--pagination-active)}._container_1s8aj_2 ._link_1s8aj_11:focus,._container_1s8aj_2 ._link_1s8aj_11:hover{color:var(--sapphire-normal);-webkit-text-decoration:none;text-decoration:none}._container_1s8aj_2 ._link_1s8aj_11[rel=prev],._container_1s8aj_2 ._link_1s8aj_11[rel=next]{background-color:var(--white);-webkit-text-decoration:none;text-decoration:none;color:var(--black-100)}._container_1s8aj_2 ._link_1s8aj_11[rel=prev]:hover,._container_1s8aj_2 ._link_1s8aj_11[rel=next]:hover{color:var(--sapphire-normal)}._container_1s8aj_2 ._link_1s8aj_11[rel=prev]:active,._container_1s8aj_2 ._link_1s8aj_11[rel=next]:active{background-color:var(--black-80);color:var(--white)}._container_1s8aj_2 ._link_1s8aj_11[rel=prev] svg,._container_1s8aj_2 ._link_1s8aj_11[rel=next] svg{width:16px;height:16px}._container_1s8aj_2 ._item_1s8aj_46{display:inline-block;border-radius:var(--control-radius);text-align:center;vertical-align:top}._container_1s8aj_2 ._item_1s8aj_46._isActive_1s8aj_52 ._link_1s8aj_11{background-color:var(--pagination-active)}._container_1s8aj_2 ._item_1s8aj_46._isActive_1s8aj_52 ._link_1s8aj_11:hover{color:var(--black-100)}._container_1s8aj_2 ._item_1s8aj_46._disabled_1s8aj_58 ._link_1s8aj_11{pointer-events:none;color:var(--disabled-color);background-color:var(--white);cursor:default}._container_1s8aj_2 ._item_1s8aj_46._disabled_1s8aj_58 ._link_1s8aj_11:hover{color:var(--white)}
@@ -0,0 +1,42 @@
1
+ import { default as React } from 'react';
2
+
3
+ export type TBackProps = {
4
+ currentPageNumber: number;
5
+ onClick: (nextPage: number) => void;
6
+ setCurrentPage: (nextPage: number) => void;
7
+ };
8
+ export type TNextProps = {
9
+ currentPageNumber: number;
10
+ lastPageNumber: number;
11
+ onClick: (nextPage: number) => void;
12
+ setCurrentPage: (nextPage: number) => void;
13
+ };
14
+ export type TItemProps = {
15
+ currentPageNumber: number;
16
+ newPageNumber: number;
17
+ onClick: (pageNumber: number) => void;
18
+ setCurrentPage: (pageNumber: number) => void;
19
+ };
20
+ export type TProps = {
21
+ /**
22
+ * Класс, применяемый к корневому элемент
23
+ */
24
+ rootClassName?: string;
25
+ /**
26
+ * Выполнится при изменении страницы
27
+ */
28
+ onChange: (page: number) => void;
29
+ /**
30
+ * Всего элементов
31
+ */
32
+ total: number;
33
+ /**
34
+ * Элементов на странице
35
+ */
36
+ perPage?: number;
37
+ /**
38
+ * Текущая страница
39
+ */
40
+ currentPageNumber?: number;
41
+ };
42
+ export declare const Pagination: React.ForwardRefExoticComponent<TProps & React.RefAttributes<HTMLElement>>;
@@ -0,0 +1,220 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { c as classNames } from "../../index-CweZ_OcN.js";
3
+ import { forwardRef, useState, useEffect } from "react";
4
+ import { FIRST_PAGE_NUMBER, DEFAULT_PER_PAGE } from "./constants.js";
5
+ import { useWindowSize } from "../../hooks/useWindowSize/index.js";
6
+ import { Icon } from "../../icons/Icon.js";
7
+ import '../../assets/Pagination.css';const container = "_container_1s8aj_2";
8
+ const link = "_link_1s8aj_11";
9
+ const item = "_item_1s8aj_46";
10
+ const isActive = "_isActive_1s8aj_52";
11
+ const disabled = "_disabled_1s8aj_58";
12
+ const cls = {
13
+ container,
14
+ link,
15
+ item,
16
+ isActive,
17
+ disabled
18
+ };
19
+ const Back = ({
20
+ currentPageNumber,
21
+ onClick,
22
+ setCurrentPage
23
+ }) => {
24
+ const handleClick = (event) => {
25
+ event.preventDefault();
26
+ if (currentPageNumber === FIRST_PAGE_NUMBER) return;
27
+ setCurrentPage(currentPageNumber - 1);
28
+ onClick(currentPageNumber - 1);
29
+ };
30
+ return /* @__PURE__ */ jsx(
31
+ "span",
32
+ {
33
+ className: classNames(cls.item, cls.prev, {
34
+ [cls.disabled]: currentPageNumber === FIRST_PAGE_NUMBER
35
+ }),
36
+ children: /* @__PURE__ */ jsx(
37
+ "a",
38
+ {
39
+ className: cls.link,
40
+ onClick: handleClick,
41
+ href: "#",
42
+ "aria-label": "Назад",
43
+ rel: "prev",
44
+ children: /* @__PURE__ */ jsx(Icon, { iconName: "ArrowLeft16px" })
45
+ }
46
+ )
47
+ }
48
+ );
49
+ };
50
+ const Next = ({
51
+ currentPageNumber,
52
+ lastPageNumber,
53
+ onClick,
54
+ setCurrentPage
55
+ }) => {
56
+ const isOnLastPage = currentPageNumber >= lastPageNumber;
57
+ const handleClick = (event) => {
58
+ event.preventDefault();
59
+ if (isOnLastPage) return;
60
+ setCurrentPage(currentPageNumber + 1);
61
+ onClick == null ? void 0 : onClick(currentPageNumber + 1);
62
+ };
63
+ return /* @__PURE__ */ jsx(
64
+ "span",
65
+ {
66
+ className: classNames(cls.item, cls.next, {
67
+ [cls.disabled]: isOnLastPage
68
+ }),
69
+ children: /* @__PURE__ */ jsx(
70
+ "a",
71
+ {
72
+ className: cls.link,
73
+ onClick: handleClick,
74
+ href: "#",
75
+ "aria-label": "Вперед",
76
+ rel: "next",
77
+ children: /* @__PURE__ */ jsx(Icon, { iconName: "ArrowRight16px" })
78
+ }
79
+ )
80
+ }
81
+ );
82
+ };
83
+ const Ellipsis = () => {
84
+ const handleClick = (event) => {
85
+ event.preventDefault();
86
+ };
87
+ return /* @__PURE__ */ jsx("span", { className: cls.item, children: /* @__PURE__ */ jsx("a", { className: cls.link, href: "#", onClick: handleClick, children: /* @__PURE__ */ jsx("span", { children: "..." }) }) });
88
+ };
89
+ const Item = ({
90
+ currentPageNumber,
91
+ newPageNumber,
92
+ onClick,
93
+ setCurrentPage
94
+ }) => {
95
+ const isActive2 = currentPageNumber === newPageNumber;
96
+ const handleClick = (event) => {
97
+ event.preventDefault();
98
+ setCurrentPage(newPageNumber);
99
+ onClick == null ? void 0 : onClick(newPageNumber);
100
+ };
101
+ const formattedPageNumber = newPageNumber < 10 ? `0${newPageNumber}` : newPageNumber;
102
+ return /* @__PURE__ */ jsx("span", { className: classNames(cls.item, { [cls.isActive]: isActive2 }), children: !isActive2 ? /* @__PURE__ */ jsx("a", { href: "#", className: cls.link, onClick: handleClick, children: formattedPageNumber }) : /* @__PURE__ */ jsx("span", { className: cls.link, children: formattedPageNumber }) });
103
+ };
104
+ const renderItems = ({
105
+ start,
106
+ end,
107
+ currentPageNumber,
108
+ onClick,
109
+ setCurrentPage
110
+ }) => {
111
+ const items = [];
112
+ for (let i = start; i <= end; i++) {
113
+ items.push(
114
+ /* @__PURE__ */ jsx(
115
+ Item,
116
+ {
117
+ currentPageNumber,
118
+ setCurrentPage,
119
+ newPageNumber: i,
120
+ onClick
121
+ },
122
+ i
123
+ )
124
+ );
125
+ }
126
+ return items;
127
+ };
128
+ const Pagination = forwardRef(
129
+ (props, ref) => {
130
+ const {
131
+ rootClassName,
132
+ total,
133
+ perPage = DEFAULT_PER_PAGE,
134
+ currentPageNumber = FIRST_PAGE_NUMBER,
135
+ onChange
136
+ } = props;
137
+ const [currentPage, setCurrentPage] = useState(currentPageNumber);
138
+ const lastPageNumber = Math.ceil(total / perPage);
139
+ const { width } = useWindowSize();
140
+ const adjacentCount = width <= 650 ? 2 : 4;
141
+ let firstAdjacentPage = 0;
142
+ let lastAdjacentPage = 0;
143
+ useEffect(() => {
144
+ setCurrentPage(currentPageNumber);
145
+ }, [currentPageNumber]);
146
+ if (currentPage <= adjacentCount) {
147
+ firstAdjacentPage = FIRST_PAGE_NUMBER;
148
+ lastAdjacentPage = Math.min(
149
+ FIRST_PAGE_NUMBER + adjacentCount,
150
+ lastPageNumber
151
+ );
152
+ } else if (currentPage > lastPageNumber - adjacentCount) {
153
+ firstAdjacentPage = lastPageNumber - adjacentCount;
154
+ lastAdjacentPage = lastPageNumber;
155
+ } else {
156
+ firstAdjacentPage = currentPage - adjacentCount / 2;
157
+ lastAdjacentPage = currentPage + adjacentCount / 2;
158
+ }
159
+ if (total <= perPage) {
160
+ return null;
161
+ }
162
+ return /* @__PURE__ */ jsxs(
163
+ "nav",
164
+ {
165
+ "aria-label": "Постраничная навигация",
166
+ className: classNames(cls.container, rootClassName),
167
+ ref,
168
+ children: [
169
+ /* @__PURE__ */ jsx(
170
+ Back,
171
+ {
172
+ currentPageNumber: currentPage,
173
+ onClick: onChange,
174
+ setCurrentPage
175
+ }
176
+ ),
177
+ firstAdjacentPage > FIRST_PAGE_NUMBER && /* @__PURE__ */ jsx(
178
+ Item,
179
+ {
180
+ newPageNumber: FIRST_PAGE_NUMBER,
181
+ currentPageNumber: currentPage,
182
+ onClick: onChange,
183
+ setCurrentPage
184
+ }
185
+ ),
186
+ firstAdjacentPage > FIRST_PAGE_NUMBER + 1 && /* @__PURE__ */ jsx(Ellipsis, {}),
187
+ renderItems({
188
+ start: firstAdjacentPage,
189
+ end: lastAdjacentPage,
190
+ currentPageNumber: currentPage,
191
+ setCurrentPage,
192
+ onClick: onChange
193
+ }),
194
+ lastAdjacentPage < lastPageNumber - 1 && /* @__PURE__ */ jsx(Ellipsis, {}),
195
+ lastAdjacentPage < lastPageNumber && /* @__PURE__ */ jsx(
196
+ Item,
197
+ {
198
+ newPageNumber: lastPageNumber,
199
+ currentPageNumber: currentPage,
200
+ setCurrentPage,
201
+ onClick: onChange
202
+ }
203
+ ),
204
+ /* @__PURE__ */ jsx(
205
+ Next,
206
+ {
207
+ currentPageNumber: currentPage,
208
+ setCurrentPage,
209
+ lastPageNumber,
210
+ onClick: onChange
211
+ }
212
+ )
213
+ ]
214
+ }
215
+ );
216
+ }
217
+ );
218
+ export {
219
+ Pagination
220
+ };
@@ -0,0 +1,2 @@
1
+ export declare const FIRST_PAGE_NUMBER = 1;
2
+ export declare const DEFAULT_PER_PAGE = 5;
@@ -0,0 +1,6 @@
1
+ const FIRST_PAGE_NUMBER = 1;
2
+ const DEFAULT_PER_PAGE = 5;
3
+ export {
4
+ DEFAULT_PER_PAGE,
5
+ FIRST_PAGE_NUMBER
6
+ };
@@ -0,0 +1 @@
1
+ export { Pagination } from './Pagination';
@@ -0,0 +1,4 @@
1
+ import { Pagination } from "./Pagination.js";
2
+ export {
3
+ Pagination
4
+ };
File without changes
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ import { ETagSize, ETagType } from './constants';
2
3
 
3
4
  export type TProps = {
4
5
  /**
@@ -12,7 +13,7 @@ export type TProps = {
12
13
  /**
13
14
  * Класс, применяемый к контентному элементу
14
15
  */
15
- size?: string;
16
+ size?: ETagSize;
16
17
  /**
17
18
  * Класс, применяемый к корневому элемент
18
19
  */
@@ -24,7 +25,7 @@ export type TProps = {
24
25
  /**
25
26
  * Определяет какой тип элемента будет создан, по умолчанию - button
26
27
  */
27
- elementType?: 'button' | 'div';
28
+ elementType?: ETagType;
28
29
  /**
29
30
  * Цвет фона, при outline и текста
30
31
  */
@@ -29,3 +29,4 @@ export { Accordion, AccordionItem, EAccordionSize } from './Accordion';
29
29
  export type { TAccordionProps, TAccordionItemProps } from './Accordion';
30
30
  export { TabTrail, ETabTrailSize } from './TabTrail';
31
31
  export type { TTabTrailProps, TCategoryTab } from './TabTrail';
32
+ export { Pagination } from './Pagination';
@@ -30,6 +30,7 @@ import { EAccordionSize } from "./Accordion/constants.js";
30
30
  import { AccordionItem } from "./Accordion/AccordionItem/AccordionItem.js";
31
31
  import { TabTrail } from "./TabTrail/TabTrail.js";
32
32
  import { ETabTrailSize } from "./TabTrail/constants.js";
33
+ import { Pagination } from "./Pagination/Pagination.js";
33
34
  export {
34
35
  Accordion,
35
36
  AccordionItem,
@@ -60,6 +61,7 @@ export {
60
61
  Loader,
61
62
  MergedButton,
62
63
  OtpInput,
64
+ Pagination,
63
65
  RadioGroup,
64
66
  SelectSearch,
65
67
  Slider,
@@ -0,0 +1,4 @@
1
+ export declare function useWindowSize(): {
2
+ width: number;
3
+ height: number;
4
+ };
@@ -0,0 +1,26 @@
1
+ import { useState, useRef, useEffect } from "react";
2
+ function getWindowSize() {
3
+ const { innerWidth: width, innerHeight: height } = window;
4
+ return {
5
+ width,
6
+ height
7
+ };
8
+ }
9
+ function useWindowSize() {
10
+ const [windowSize, setWindowSize] = useState(getWindowSize());
11
+ const timeoutRef = useRef(null);
12
+ function handleResize() {
13
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
14
+ timeoutRef.current = setTimeout(() => setWindowSize(getWindowSize()), 500);
15
+ }
16
+ useEffect(() => {
17
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
18
+ window.addEventListener("resize", handleResize);
19
+ return () => window.removeEventListener("resize", handleResize);
20
+ }, []);
21
+ const { width, height } = windowSize;
22
+ return { width, height };
23
+ }
24
+ export {
25
+ useWindowSize
26
+ };
package/dist/index.js CHANGED
@@ -30,6 +30,7 @@ import { EAccordionSize } from "./components/Accordion/constants.js";
30
30
  import { AccordionItem } from "./components/Accordion/AccordionItem/AccordionItem.js";
31
31
  import { TabTrail } from "./components/TabTrail/TabTrail.js";
32
32
  import { ETabTrailSize } from "./components/TabTrail/constants.js";
33
+ import { Pagination } from "./components/Pagination/Pagination.js";
33
34
  import { useMediaQuery } from "./hooks/useMediaQuery/useMediaQuery.js";
34
35
  import { EMediaQuery } from "./hooks/useMediaQuery/constants.js";
35
36
  import { useLockBodyScroll } from "./hooks/useLockBodyScroll/useLockBodyScroll.js";
@@ -69,6 +70,7 @@ import './assets/index.css';export {
69
70
  Loader,
70
71
  MergedButton,
71
72
  OtpInput,
73
+ Pagination,
72
74
  RadioGroup,
73
75
  SelectSearch,
74
76
  Slider,
package/package.json CHANGED
@@ -1,128 +1,128 @@
1
- {
2
- "name": "mimir-ui-kit",
3
- "private": false,
4
- "version": "1.13.7",
5
- "type": "module",
6
- "exports": {
7
- ".": {
8
- "types": "./dist/index.d.ts",
9
- "default": "./dist/index.js"
10
- },
11
- "./components": {
12
- "types": "./dist/components/index.d.ts",
13
- "default": "./dist/components/index.js"
14
- },
15
- "./hooks": {
16
- "types": "./dist/hooks/index.d.ts",
17
- "default": "./dist/hooks/index.js"
18
- },
19
- "./icons": {
20
- "types": "./dist/icons/index.d.ts",
21
- "default": "./dist/icons/index.js"
22
- },
23
- "./styles": {
24
- "default": "./dist/assets/index.css"
25
- }
26
- },
27
- "module": "./dist/index.js",
28
- "types": "./dist/index.d.ts",
29
- "files": [
30
- "dist"
31
- ],
32
- "sideEffects": [
33
- "**/*.{css,scss}"
34
- ],
35
- "scripts": {
36
- "build": "tsc --p ./tsconfig-build.json && vite build",
37
- "storybook": "storybook dev -p 6006",
38
- "build-storybook": "storybook build",
39
- "ts:check": "tsc -b",
40
- "lint:fix": "eslint . --ext ts,tsx --fix",
41
- "lint:prettier": "npx prettier . --write",
42
- "lint:stylelint": "stylelint '**/*.module{.css,.scss}'",
43
- "lint:stylelint:fix": "stylelint '**/*.module{.css,.scss}' --fix",
44
- "icons": "svgr --expand-props start ./src/icons/svgs",
45
- "prepare": "husky",
46
- "create-component": "node createComponent.js"
47
- },
48
- "devDependencies": {
49
- "@chromatic-com/storybook": "^1.6.1",
50
- "@headlessui/react": "^2.1.2",
51
- "@laynezh/vite-plugin-lib-assets": "^0.5.23",
52
- "@loadable/component": "^5.15.2",
53
- "@storybook/addon-essentials": "^8.2.2",
54
- "@storybook/addon-interactions": "^8.2.2",
55
- "@storybook/addon-links": "^8.2.2",
56
- "@storybook/addon-onboarding": "^8.2.2",
57
- "@storybook/blocks": "^8.2.2",
58
- "@storybook/builder-vite": "^8.2.2",
59
- "@storybook/react": "^8.2.2",
60
- "@storybook/react-vite": "^8.2.2",
61
- "@storybook/test": "^8.2.2",
62
- "@svgr/cli": "^8.1.0",
63
- "@svgr/core": "^8.1.0",
64
- "@svgr/plugin-svgo": "^8.1.0",
65
- "@types/node": "^20.14.10",
66
- "@types/react": "^18.3.3",
67
- "@types/react-dom": "^18.3.0",
68
- "@typescript-eslint/eslint-plugin": "^7.13.1",
69
- "@typescript-eslint/parser": "^7.13.1",
70
- "@vitejs/plugin-react": "^4.3.1",
71
- "autoprefixer": "^10.4.19",
72
- "chalk": "4.1.2",
73
- "classnames": "^2.5.1",
74
- "dotenv": "^16.4.5",
75
- "eslint": "^8.57.0",
76
- "eslint-config-prettier": "^9.1.0",
77
- "eslint-plugin-import": "^2.29.1",
78
- "eslint-plugin-react-hooks": "^4.6.2",
79
- "eslint-plugin-react-refresh": "^0.4.7",
80
- "eslint-plugin-storybook": "^0.8.0",
81
- "glob": "10.3.10",
82
- "husky": "^9.0.11",
83
- "lint-staged": "^15.2.7",
84
- "p-limit": "^6.1.0",
85
- "postcss-preset-env": "^9.6.0",
86
- "prettier": "^3.3.3",
87
- "react": "^18.3.1",
88
- "react-dom": "^18.3.1",
89
- "sass": "^1.77.7",
90
- "storybook": "^8.2.2",
91
- "stylelint": "^16.7.0",
92
- "stylelint-config-idiomatic-order": "^10.0.0",
93
- "stylelint-config-rational-order": "^0.1.2",
94
- "stylelint-config-standard": "^36.0.1",
95
- "stylelint-order": "^6.0.4",
96
- "stylelint-prettier": "^5.0.0",
97
- "stylelint-scss": "^6.4.0",
98
- "superagent": "^9.0.2",
99
- "typescript": "^5.2.2",
100
- "vite": "^5.3.1",
101
- "vite-plugin-dts": "^3.9.1",
102
- "vite-plugin-lib-inject-css": "^2.1.1",
103
- "vite-plugin-svgr": "^4.2.0"
104
- },
105
- "peerDependencies": {
106
- "@headlessui/react": "^2.1.2",
107
- "react": "^18.3.1",
108
- "react-dom": "^18.3.1"
109
- },
110
- "husky": {
111
- "hooks": {
112
- "pre-commit": "lint-staged"
113
- }
114
- },
115
- "lint-staged": {
116
- "**/*.{ts,tsx}": [
117
- "eslint --ignore-path .eslintignore",
118
- "prettier --write"
119
- ],
120
- "**/*.{css,scss}": [
121
- "stylelint --fix"
122
- ]
123
- },
124
- "dependencies": {
125
- "swiper": "^11.1.5",
126
- "use-clipboard-copy": "^0.2.0"
127
- }
128
- }
1
+ {
2
+ "name": "mimir-ui-kit",
3
+ "private": false,
4
+ "version": "1.14.1",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
+ },
11
+ "./components": {
12
+ "types": "./dist/components/index.d.ts",
13
+ "default": "./dist/components/index.js"
14
+ },
15
+ "./hooks": {
16
+ "types": "./dist/hooks/index.d.ts",
17
+ "default": "./dist/hooks/index.js"
18
+ },
19
+ "./icons": {
20
+ "types": "./dist/icons/index.d.ts",
21
+ "default": "./dist/icons/index.js"
22
+ },
23
+ "./styles": {
24
+ "default": "./dist/assets/index.css"
25
+ }
26
+ },
27
+ "module": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "files": [
30
+ "dist"
31
+ ],
32
+ "sideEffects": [
33
+ "**/*.{css,scss}"
34
+ ],
35
+ "scripts": {
36
+ "build": "tsc --p ./tsconfig-build.json && vite build",
37
+ "storybook": "storybook dev -p 6006",
38
+ "build-storybook": "storybook build",
39
+ "ts:check": "tsc -b",
40
+ "lint:fix": "eslint . --ext ts,tsx --fix",
41
+ "lint:prettier": "npx prettier . --write",
42
+ "lint:stylelint": "stylelint '**/*.module{.css,.scss}'",
43
+ "lint:stylelint:fix": "stylelint '**/*.module{.css,.scss}' --fix",
44
+ "icons": "svgr --expand-props start ./src/icons/svgs",
45
+ "prepare": "husky",
46
+ "create-component": "node createComponent.js"
47
+ },
48
+ "devDependencies": {
49
+ "@chromatic-com/storybook": "^1.6.1",
50
+ "@headlessui/react": "^2.1.2",
51
+ "@laynezh/vite-plugin-lib-assets": "^0.5.23",
52
+ "@loadable/component": "^5.15.2",
53
+ "@storybook/addon-essentials": "^8.2.2",
54
+ "@storybook/addon-interactions": "^8.2.2",
55
+ "@storybook/addon-links": "^8.2.2",
56
+ "@storybook/addon-onboarding": "^8.2.2",
57
+ "@storybook/blocks": "^8.2.2",
58
+ "@storybook/builder-vite": "^8.2.2",
59
+ "@storybook/react": "^8.2.2",
60
+ "@storybook/react-vite": "^8.2.2",
61
+ "@storybook/test": "^8.2.2",
62
+ "@svgr/cli": "^8.1.0",
63
+ "@svgr/core": "^8.1.0",
64
+ "@svgr/plugin-svgo": "^8.1.0",
65
+ "@types/node": "^20.14.10",
66
+ "@types/react": "^18.3.3",
67
+ "@types/react-dom": "^18.3.0",
68
+ "@typescript-eslint/eslint-plugin": "^7.13.1",
69
+ "@typescript-eslint/parser": "^7.13.1",
70
+ "@vitejs/plugin-react": "^4.3.1",
71
+ "autoprefixer": "^10.4.19",
72
+ "chalk": "4.1.2",
73
+ "classnames": "^2.5.1",
74
+ "dotenv": "^16.4.5",
75
+ "eslint": "^8.57.0",
76
+ "eslint-config-prettier": "^9.1.0",
77
+ "eslint-plugin-import": "^2.29.1",
78
+ "eslint-plugin-react-hooks": "^4.6.2",
79
+ "eslint-plugin-react-refresh": "^0.4.7",
80
+ "eslint-plugin-storybook": "^0.8.0",
81
+ "glob": "10.3.10",
82
+ "husky": "^9.0.11",
83
+ "lint-staged": "^15.2.7",
84
+ "p-limit": "^6.1.0",
85
+ "postcss-preset-env": "^9.6.0",
86
+ "prettier": "^3.3.3",
87
+ "react": "^18.3.1",
88
+ "react-dom": "^18.3.1",
89
+ "sass": "^1.77.7",
90
+ "storybook": "^8.2.2",
91
+ "stylelint": "^16.7.0",
92
+ "stylelint-config-idiomatic-order": "^10.0.0",
93
+ "stylelint-config-rational-order": "^0.1.2",
94
+ "stylelint-config-standard": "^36.0.1",
95
+ "stylelint-order": "^6.0.4",
96
+ "stylelint-prettier": "^5.0.0",
97
+ "stylelint-scss": "^6.4.0",
98
+ "superagent": "^9.0.2",
99
+ "typescript": "^5.2.2",
100
+ "vite": "^5.3.1",
101
+ "vite-plugin-dts": "^3.9.1",
102
+ "vite-plugin-lib-inject-css": "^2.1.1",
103
+ "vite-plugin-svgr": "^4.2.0"
104
+ },
105
+ "peerDependencies": {
106
+ "@headlessui/react": "^2.1.2",
107
+ "react": "^18.3.1",
108
+ "react-dom": "^18.3.1"
109
+ },
110
+ "husky": {
111
+ "hooks": {
112
+ "pre-commit": "lint-staged"
113
+ }
114
+ },
115
+ "lint-staged": {
116
+ "**/*.{ts,tsx}": [
117
+ "eslint --ignore-path .eslintignore",
118
+ "prettier --write"
119
+ ],
120
+ "**/*.{css,scss}": [
121
+ "stylelint --fix"
122
+ ]
123
+ },
124
+ "dependencies": {
125
+ "swiper": "^11.1.5",
126
+ "use-clipboard-copy": "^0.2.0"
127
+ }
128
+ }