@myun/gimi-chat 0.0.5 → 0.0.6
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/dist/components/ai-chat-dialogue/index.js +181 -135
- package/dist/components/ai-correction/index.js +38 -25
- package/dist/components/ai-loading/index.js +12 -8
- package/dist/components/answer-item/index.js +135 -113
- package/dist/components/ask-card/index.js +42 -33
- package/dist/components/chat-input/index.js +135 -114
- package/dist/components/chat-voice/VoiceCommunication.js +23 -21
- package/dist/components/chat-voice/VoiceRecord.js +24 -21
- package/dist/components/conversation-delete/index.js +10 -8
- package/dist/components/dots-loading/index.js +10 -7
- package/dist/components/empty/index.js +12 -7
- package/dist/components/excel-components/ExcelCard.js +7 -3
- package/dist/components/excel-components/ExcelExcuting.js +60 -43
- package/dist/components/excel-components/ExcelFailCard.js +15 -10
- package/dist/components/excel-components/ExcelSuccessCard.js +3 -2
- package/dist/components/file-card/fileCardSidebar.js +23 -16
- package/dist/components/file-card/index.js +68 -49
- package/dist/components/file-preview/index.js +36 -29
- package/dist/components/file-upload/index.js +10 -7
- package/dist/components/file-upload/uploadV1.js +33 -27
- package/dist/components/gimi-sidebar/index.js +20 -13
- package/dist/components/header/index.js +18 -11
- package/dist/components/iconfont-com/index.js +2 -1
- package/dist/components/knowledge-trace/KnowledgeIconComponent.js +28 -22
- package/dist/components/knowledge-trace/classList.js +37 -28
- package/dist/components/knowledge-trace/documentList.js +36 -27
- package/dist/components/knowledge-trace/index.js +28 -21
- package/dist/components/knowledge-trace/videoList.js +46 -36
- package/dist/components/lottie-img/index.js +10 -8
- package/dist/components/message-actions/CopyButton.js +25 -22
- package/dist/components/message-actions/LikeButton.js +25 -22
- package/dist/components/message-actions/RegenerateButton.js +21 -18
- package/dist/components/message-actions/UnLikeButton.js +25 -22
- package/dist/components/message-actions/VoicePlay.js +25 -22
- package/dist/components/message-list/index.js +85 -72
- package/dist/components/no-microphone-root/index.js +39 -29
- package/dist/components/preset-agent-content/index.js +20 -15
- package/dist/components/reasoning-content/index.js +55 -42
- package/dist/components/reference-content/index.js +72 -63
- package/dist/components/templates/CommonChat.js +78 -64
- package/dist/components/templates/GimiChatComponent.js +13 -6
- package/dist/components/templates/demo/demo.js +104 -102
- package/dist/components/upload-list/index.js +56 -41
- package/dist/components/voice-bars/index.js +22 -19
- package/dist/components/voice-check-dialog/index.js +24 -17
- package/dist/components/voice-recording/index.js +57 -42
- package/dist/components/work-flow-content/demo.js +2 -1
- package/dist/components/work-flow-content/index.js +12 -9
- package/package.json +6 -5
|
@@ -3,6 +3,8 @@ import styles from "./index.module.css";
|
|
|
3
3
|
import reTry from "../../assets/image/retry.png";
|
|
4
4
|
import { FileStatus } from "../../interfaces/fileInterface";
|
|
5
5
|
import { formatSizeToKB } from "../../utils/tools";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
8
|
var UploadFile = function UploadFile(_ref) {
|
|
7
9
|
var file = _ref.file,
|
|
8
10
|
handleDelFile = _ref.handleDelFile,
|
|
@@ -45,46 +47,59 @@ var UploadFile = function UploadFile(_ref) {
|
|
|
45
47
|
|
|
46
48
|
var isError = file.status === FileStatus.UPLOAD_FAILED || file.status === FileStatus.ANALYSE_FAILED || file.status === FileStatus.NETWORK_ERROR;
|
|
47
49
|
var isLoading = [FileStatus.PADDING, FileStatus.RETRING, FileStatus.UPLOADING].includes(file.status);
|
|
48
|
-
return /*#__PURE__*/
|
|
49
|
-
className: styles.uploadBox
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
50
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
51
|
+
className: styles.uploadBox,
|
|
52
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
53
|
+
className: styles.uploadIcon,
|
|
54
|
+
children: /*#__PURE__*/_jsx("img", {
|
|
55
|
+
src: fileIcon,
|
|
56
|
+
alt: "file-icon"
|
|
57
|
+
})
|
|
58
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
59
|
+
className: styles.uploadName,
|
|
60
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
61
|
+
className: styles.uploadfileName,
|
|
62
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
63
|
+
className: styles.fileName,
|
|
64
|
+
children: fileName
|
|
65
|
+
})
|
|
66
|
+
}), (fileSize || isError) && /*#__PURE__*/_jsxs("div", {
|
|
67
|
+
className: styles.sizeText,
|
|
68
|
+
children: [fileSize && !isError && /*#__PURE__*/_jsx("span", {
|
|
69
|
+
className: styles.size,
|
|
70
|
+
children: fileSize
|
|
71
|
+
}), isError && /*#__PURE__*/_jsx("span", {
|
|
72
|
+
className: styles.errorText,
|
|
73
|
+
children: file.status === FileStatus.UPLOAD_FAILED ? '上传失败' : file.status === FileStatus.NETWORK_ERROR ? '网络错误' : '解析失败'
|
|
74
|
+
})]
|
|
75
|
+
})]
|
|
76
|
+
}), isLoading && /*#__PURE__*/_jsxs("div", {
|
|
77
|
+
className: styles.uploadLoading,
|
|
78
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
79
|
+
children: file.status === FileStatus.PADDING ? '解析中...' : file.status === FileStatus.UPLOADING ? '上传中...' : '重试中...'
|
|
80
|
+
}), /*#__PURE__*/_jsx("img", {
|
|
81
|
+
src: "https://simg01.gaodunwangxiao.com/uploadfiles/tmp/upload/202509/07/0a0fa_20250907093927.gif",
|
|
82
|
+
alt: "loading"
|
|
83
|
+
})]
|
|
84
|
+
}), isError && /*#__PURE__*/_jsxs("div", {
|
|
85
|
+
className: styles.uploadError,
|
|
86
|
+
onClick: handleRetryClick,
|
|
87
|
+
children: ["\u91CD\u8BD5", /*#__PURE__*/_jsx("img", {
|
|
88
|
+
src: reTry,
|
|
89
|
+
alt: "",
|
|
90
|
+
style: {
|
|
91
|
+
width: 16,
|
|
92
|
+
height: 16
|
|
93
|
+
}
|
|
94
|
+
})]
|
|
95
|
+
}), showDel && /*#__PURE__*/_jsx("div", {
|
|
96
|
+
className: styles.delIcon,
|
|
97
|
+
onClick: handleDeleteClick,
|
|
98
|
+
children: /*#__PURE__*/_jsx("img", {
|
|
99
|
+
src: "https://simg01.gaodunwangxiao.com/uploadimgs/tmp/upload/202509/12/6fa3e_20250912145501.png",
|
|
100
|
+
alt: "delete"
|
|
101
|
+
})
|
|
102
|
+
})]
|
|
103
|
+
});
|
|
89
104
|
};
|
|
90
105
|
export default UploadFile;
|
|
@@ -9,6 +9,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
9
9
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
10
10
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
11
|
import React from 'react';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
13
|
export default function VoiceBars(_ref) {
|
|
13
14
|
var _ref$parentWidth = _ref.parentWidth,
|
|
14
15
|
parentWidth = _ref$parentWidth === void 0 ? undefined : _ref$parentWidth;
|
|
@@ -151,24 +152,26 @@ export default function VoiceBars(_ref) {
|
|
|
151
152
|
}
|
|
152
153
|
};
|
|
153
154
|
}, []);
|
|
154
|
-
return /*#__PURE__*/
|
|
155
|
-
|
|
156
|
-
display: 'flex',
|
|
157
|
-
alignItems: 'center',
|
|
158
|
-
justifyContent: 'center',
|
|
159
|
-
height: 40,
|
|
160
|
-
gap: 6
|
|
161
|
-
}
|
|
162
|
-
}, volumes.map(function (h, i) {
|
|
163
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
164
|
-
key: i,
|
|
155
|
+
return /*#__PURE__*/_jsx("div", {
|
|
156
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
165
157
|
style: {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
158
|
+
display: 'flex',
|
|
159
|
+
alignItems: 'center',
|
|
160
|
+
justifyContent: 'center',
|
|
161
|
+
height: 40,
|
|
162
|
+
gap: 6
|
|
163
|
+
},
|
|
164
|
+
children: volumes.map(function (h, i) {
|
|
165
|
+
return /*#__PURE__*/_jsx("div", {
|
|
166
|
+
style: {
|
|
167
|
+
width: 6,
|
|
168
|
+
height: h,
|
|
169
|
+
background: '#4f8cff',
|
|
170
|
+
borderRadius: 4,
|
|
171
|
+
transition: 'height 0.1s ease-out'
|
|
172
|
+
}
|
|
173
|
+
}, i);
|
|
174
|
+
})
|
|
175
|
+
})
|
|
176
|
+
});
|
|
174
177
|
}
|
|
@@ -16,6 +16,9 @@ import styles from "./index.module.css";
|
|
|
16
16
|
import NoMicrophoneModalContent from "../no-microphone-root";
|
|
17
17
|
import { useAppDispatch, useAppSelector } from "../../store/hooks";
|
|
18
18
|
import { setShowMicWarning } from "../../store/slices/gimiMenuSlice";
|
|
19
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
21
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
22
|
var VoiceCheckDialog = function VoiceCheckDialog(_ref) {
|
|
20
23
|
var _layout$x, _layout$y;
|
|
21
24
|
var className = _ref.className,
|
|
@@ -142,22 +145,26 @@ var VoiceCheckDialog = function VoiceCheckDialog(_ref) {
|
|
|
142
145
|
showMicWarning: false
|
|
143
146
|
}));
|
|
144
147
|
};
|
|
145
|
-
return /*#__PURE__*/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
148
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
149
|
+
children: [trigger && /*#__PURE__*/_jsx("div", {
|
|
150
|
+
ref: triggerRef,
|
|
151
|
+
style: {
|
|
152
|
+
display: 'flex'
|
|
153
|
+
},
|
|
154
|
+
children: trigger
|
|
155
|
+
}), showMicWarning && /*#__PURE__*/_jsx("div", {
|
|
156
|
+
ref: dialogRef,
|
|
157
|
+
className: classNames(styles['voice-check-dialog'], className),
|
|
158
|
+
style: _objectSpread({
|
|
159
|
+
left: "".concat((_layout$x = layout === null || layout === void 0 ? void 0 : layout.x) !== null && _layout$x !== void 0 ? _layout$x : 0, "px"),
|
|
160
|
+
top: "".concat((_layout$y = layout === null || layout === void 0 ? void 0 : layout.y) !== null && _layout$y !== void 0 ? _layout$y : 0, "px"),
|
|
161
|
+
opacity: layout ? 1 : 0,
|
|
162
|
+
visibility: layout ? 'visible' : 'hidden'
|
|
163
|
+
}, style),
|
|
164
|
+
children: /*#__PURE__*/_jsx(NoMicrophoneModalContent, {
|
|
165
|
+
onOk: onCancel
|
|
166
|
+
})
|
|
167
|
+
})]
|
|
168
|
+
});
|
|
162
169
|
};
|
|
163
170
|
export default VoiceCheckDialog;
|
|
@@ -2,53 +2,68 @@ import { Tooltip } from '@douyinfe/semi-ui';
|
|
|
2
2
|
import VoiceBars from "../voice-bars";
|
|
3
3
|
import styles from "./index.module.css";
|
|
4
4
|
import React from 'react';
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
7
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
8
|
var CHECK_ICON_ADDRESS = 'https://simg01.gaodunwangxiao.com/uploadimgs/tmp/upload/202601/04/8b0e2_20260104154821.png';
|
|
6
9
|
var CANCEL_ICON_ADDRESS = 'https://simg01.gaodunwangxiao.com/uploadimgs/tmp/upload/202601/04/94bfe_20260104154857.png';
|
|
7
10
|
var VoiceRecording = function VoiceRecording(_ref) {
|
|
8
11
|
var recordingCount = _ref.recordingCount,
|
|
9
12
|
stopRecording = _ref.stopRecording,
|
|
10
13
|
containerWidth = _ref.containerWidth;
|
|
11
|
-
return /*#__PURE__*/
|
|
12
|
-
className: styles.main
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
14
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
15
|
+
className: styles.main,
|
|
16
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
17
|
+
className: styles.text,
|
|
18
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
19
|
+
className: styles.font_weight_600,
|
|
20
|
+
children: "\u8BED\u97F3\u8F93\u5165\u4E2D"
|
|
21
|
+
}), recordingCount > 0 && recordingCount <= 10 && /*#__PURE__*/_jsxs(_Fragment, {
|
|
22
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
23
|
+
className: styles.font_weight_400,
|
|
24
|
+
children: "(\u5012\u8BA1\u65F6"
|
|
25
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
26
|
+
className: styles.count,
|
|
27
|
+
children: recordingCount
|
|
28
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
29
|
+
className: styles.font_weight_400,
|
|
30
|
+
children: "\u79D2)"
|
|
31
|
+
})]
|
|
32
|
+
})]
|
|
33
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
34
|
+
className: styles.voice_bar,
|
|
35
|
+
children: [/*#__PURE__*/_jsx(VoiceBars, {
|
|
36
|
+
parentWidth: containerWidth - 48 * 2 - 20 * 2 - 10
|
|
37
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
38
|
+
style: {
|
|
39
|
+
display: 'flex',
|
|
40
|
+
gap: '10px'
|
|
41
|
+
},
|
|
42
|
+
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
43
|
+
content: "\u653E\u5F03\u8F6C\u5199",
|
|
44
|
+
arrowPointAtCenter: true,
|
|
45
|
+
children: /*#__PURE__*/_jsx("img", {
|
|
46
|
+
className: styles.icon,
|
|
47
|
+
src: CANCEL_ICON_ADDRESS,
|
|
48
|
+
alt: "\u653E\u5F03\u8F6C\u5199",
|
|
49
|
+
onClick: function onClick() {
|
|
50
|
+
stopRecording(false);
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
}), /*#__PURE__*/_jsx(Tooltip, {
|
|
54
|
+
content: "\u5F00\u59CB\u8F6C\u5199",
|
|
55
|
+
arrowPointAtCenter: true,
|
|
56
|
+
children: /*#__PURE__*/_jsx("img", {
|
|
57
|
+
className: styles.icon,
|
|
58
|
+
src: CHECK_ICON_ADDRESS,
|
|
59
|
+
alt: "\u5F00\u59CB\u8F6C\u5199",
|
|
60
|
+
onClick: function onClick() {
|
|
61
|
+
stopRecording(true);
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
})]
|
|
65
|
+
})]
|
|
66
|
+
})]
|
|
67
|
+
});
|
|
53
68
|
};
|
|
54
69
|
export default VoiceRecording;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import WorkFlowContent from "./index";
|
|
3
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
4
|
var Demo = function Demo() {
|
|
4
|
-
return /*#__PURE__*/
|
|
5
|
+
return /*#__PURE__*/_jsx(WorkFlowContent, {
|
|
5
6
|
chatItem: {
|
|
6
7
|
mcp: '这是一条工作流内容',
|
|
7
8
|
status: 'executeWorkflowByDescription'
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import styles from "./index.module.css";
|
|
3
3
|
import { Spin } from '@douyinfe/semi-ui';
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { IconSpin, IconInfoCircle } from '@douyinfe/semi-icons';
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
var antIcon = /*#__PURE__*/_jsx(IconSpin, {
|
|
6
8
|
style: {
|
|
7
9
|
fontSize: 16
|
|
8
10
|
},
|
|
9
11
|
spin: true
|
|
10
12
|
});
|
|
11
|
-
var warnIcon = /*#__PURE__*/
|
|
13
|
+
var warnIcon = /*#__PURE__*/_jsx(IconInfoCircle, {
|
|
12
14
|
style: {
|
|
13
15
|
fontSize: 16
|
|
14
16
|
}
|
|
@@ -17,12 +19,13 @@ var WorkFlowContent = function WorkFlowContent(_ref) {
|
|
|
17
19
|
var chatItem = _ref.chatItem;
|
|
18
20
|
// const isExecuting = chatItem.mcps.some((item: MCPItem) => !item.isFinished);
|
|
19
21
|
var mcp = chatItem.mcp;
|
|
20
|
-
return /*#__PURE__*/
|
|
21
|
-
className: styles.layout
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
23
|
+
className: styles.layout,
|
|
24
|
+
children: [mcp.status === 'executeWorkflowByDescription' ? '正在查询可用工作流...' : mcp.status === 'interrupt' ? '运行终止' : "\u6B63\u5728\u8C03\u7528 ".concat(mcp.name || '工作流', "..."), mcp.status === 'interrupt' ? warnIcon : /*#__PURE__*/_jsx(Spin, {
|
|
25
|
+
className: styles.spin,
|
|
26
|
+
indicator: antIcon
|
|
27
|
+
})]
|
|
28
|
+
});
|
|
26
29
|
|
|
27
30
|
// return (
|
|
28
31
|
// <Collapse
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@myun/gimi-chat",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "> TODO: description",
|
|
5
5
|
"homepage": "",
|
|
6
6
|
"license": "ISC",
|
|
@@ -28,13 +28,14 @@
|
|
|
28
28
|
"@reduxjs/toolkit": "^2.11.2",
|
|
29
29
|
"@volcengine/rtc": "^4.68.0",
|
|
30
30
|
"classnames": "^2.2.6",
|
|
31
|
-
"react": "^
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"redux": "^5.0.1"
|
|
31
|
+
"react-redux": "^8.1.3",
|
|
32
|
+
"redux": "^5.0.1",
|
|
33
|
+
"lodash": "^4.17.21"
|
|
35
34
|
},
|
|
36
35
|
"devDependencies": {
|
|
37
36
|
"father": "4.1.1",
|
|
37
|
+
"react": "^17.0.0",
|
|
38
|
+
"react-dom": "^17.0.0",
|
|
38
39
|
"sass": "^1.69.5"
|
|
39
40
|
},
|
|
40
41
|
"peerDependencies": {
|