cozy-search 0.17.3 → 0.18.1
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/actions/delete.js +1 -1
- package/dist/actions/rename.js +1 -1
- package/dist/actions/share.js +1 -1
- package/dist/components/Assistant/AssistantAvatar.d.ts +1 -1
- package/dist/components/Assistant/AssistantAvatar.js +6 -2
- package/dist/components/Assistant/AssistantContainer.js +12 -8
- package/dist/components/Assistant/AssistantSelection.d.ts +2 -1
- package/dist/components/Assistant/AssistantSelection.js +34 -5
- package/dist/components/Assistant/AssistantSelectionItem.js +44 -5
- package/dist/components/Assistant/styles.styl +17 -1
- package/dist/components/AssistantMobile.js +4 -3
- package/dist/components/AssistantProvider.d.ts +43 -7
- package/dist/components/AssistantProvider.js +4 -0
- package/dist/components/Conversations/ChatAssistantItem.js +2 -2
- package/dist/components/Conversations/ChatUserItem.js +2 -2
- package/dist/components/Conversations/ConversationActions.js +2 -2
- package/dist/components/Conversations/ConversationBar.d.ts +2 -1
- package/dist/components/Conversations/ConversationBar.js +21 -7
- package/dist/components/Conversations/ConversationComposer.js +13 -2
- package/dist/components/Conversations/ConversationListItem.js +17 -11
- package/dist/components/Conversations/ConversationListItemWider.js +19 -10
- package/dist/components/Conversations/Sources/Sources.js +3 -3
- package/dist/components/Conversations/styles.styl +11 -1
- package/dist/components/CozyAssistantRuntimeProvider.d.ts +2 -6
- package/dist/components/CozyAssistantRuntimeProvider.js +162 -40
- package/dist/components/CreateAssistantSteps/ApiKeyStep.js +4 -3
- package/dist/components/CreateAssistantSteps/BasicInfoStep.js +3 -2
- package/dist/components/CreateAssistantSteps/Provider.js +3 -2
- package/dist/components/CreateAssistantSteps/ProviderSelectionStep.js +14 -4
- package/dist/components/CreateAssistantSteps/styles.styl +3 -0
- package/dist/components/CreateAssistantSteps/useAssistantDialog.js +2 -2
- package/dist/components/Messages/AssistantMessage.js +5 -5
- package/dist/components/Messages/UserMessage.js +9 -2
- package/dist/components/Messages/styles.styl +6 -0
- package/dist/components/ResultMenu/NoResultItem.js +2 -2
- package/dist/components/ResultMenu/NotEnoughItem.js +2 -2
- package/dist/components/ResultMenu/ResultMenu.js +1 -0
- package/dist/components/Search/NotFoundConversation.d.ts +2 -0
- package/dist/components/Search/NotFoundConversation.js +43 -0
- package/dist/components/Search/SearchBarDesktop.js +2 -1
- package/dist/components/Search/SearchBarMobile.js +3 -1
- package/dist/components/Search/SearchConversation.js +163 -46
- package/dist/components/Search/SuggestionsPlaceholder.js +4 -3
- package/dist/components/Search/helpers.spec.d.ts +1 -0
- package/dist/components/Search/helpers.spec.js +71 -0
- package/dist/components/Search/styles.styl +5 -0
- package/dist/components/Search/useFetchResult.js +1 -0
- package/dist/components/Sidebar/index.js +81 -27
- package/dist/components/Sidebar/styles.styl +12 -0
- package/dist/components/TwakeKnowledges/ChatKnowledge.js +2 -2
- package/dist/components/TwakeKnowledges/DriveKnowledge.js +2 -2
- package/dist/components/TwakeKnowledges/MailKnowledge.js +2 -2
- package/dist/components/TwakeKnowledges/TwakeKnowledgePanel.js +68 -87
- package/dist/components/TwakeKnowledges/TwakeKnowledgeSelector.js +17 -5
- package/dist/components/TwakeKnowledges/styles.styl +0 -3
- package/dist/components/Views/AssistantView.js +8 -1
- package/dist/components/Views/CreateAssistantDialog.js +9 -2
- package/dist/components/Views/DeleteAssistantDialog.js +3 -2
- package/dist/components/Views/EditAssistantDialog.js +9 -2
- package/dist/components/Views/SearchDialog.js +2 -2
- package/dist/components/adapters/CozyRealtimeChatAdapter.d.ts +2 -1
- package/dist/components/adapters/CozyRealtimeChatAdapter.js +57 -43
- package/dist/components/adapters/StreamBridge.spec.ts +82 -0
- package/dist/components/constants.d.ts +1 -0
- package/dist/components/constants.js +4 -2
- package/dist/components/helpers.spec.js +139 -39
- package/dist/components/queries.d.ts +7 -2
- package/dist/components/queries.js +15 -6
- package/dist/components/styles.styl +1 -1
- package/dist/hooks/useConversation.js +4 -14
- package/dist/hooks/useConversation.spec.d.ts +1 -0
- package/dist/hooks/useConversation.spec.js +100 -0
- package/dist/hooks/useConversation.spec.jsx +121 -0
- package/dist/hooks/useFetchConversations.d.ts +70 -0
- package/dist/hooks/useFetchConversations.js +215 -0
- package/dist/hooks/useFetchConversations.spec.d.ts +1 -0
- package/dist/hooks/useFetchConversations.spec.js +258 -0
- package/dist/locales/en.json +11 -3
- package/dist/locales/fr.json +11 -3
- package/dist/locales/index.js +44 -12
- package/dist/locales/ru.json +11 -3
- package/dist/locales/vi.json +11 -3
- package/dist/stylesheet.css +55 -6
- package/package.json +9 -12
package/dist/actions/delete.js
CHANGED
|
@@ -54,7 +54,7 @@ var remove = function remove(_ref) {
|
|
|
54
54
|
displayCondition: function displayCondition() {
|
|
55
55
|
return true;
|
|
56
56
|
},
|
|
57
|
-
action: function action() {// TO DO: Add action to remove
|
|
57
|
+
action: function action() {// TO DO: Add action to remove due to this action does not exist yet in backend, we will implement it later
|
|
58
58
|
}
|
|
59
59
|
};
|
|
60
60
|
};
|
package/dist/actions/rename.js
CHANGED
|
@@ -51,7 +51,7 @@ var rename = function rename(_ref) {
|
|
|
51
51
|
displayCondition: function displayCondition() {
|
|
52
52
|
return true;
|
|
53
53
|
},
|
|
54
|
-
action: function action() {// TO DO: Add action to
|
|
54
|
+
action: function action() {// TO DO: Add action to rename due to this action does not exist yet in backend, we will implement it later
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
57
|
};
|
package/dist/actions/share.js
CHANGED
|
@@ -51,7 +51,7 @@ var share = function share(_ref) {
|
|
|
51
51
|
displayCondition: function displayCondition() {
|
|
52
52
|
return true;
|
|
53
53
|
},
|
|
54
|
-
action: function action() {// TO DO: Add action to
|
|
54
|
+
action: function action() {// TO DO: Add action to share due to this action does not exist yet in backend, we will implement it later
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
57
|
};
|
|
@@ -23,20 +23,24 @@ var _constants = require("../constants");
|
|
|
23
23
|
|
|
24
24
|
var styles = {
|
|
25
25
|
"assistant-container": "styles__assistant-container___2WDzp",
|
|
26
|
+
"knowledge-panel--light": "styles__knowledge-panel--light___1dZvc",
|
|
27
|
+
"knowledge-panel--dark": "styles__knowledge-panel--dark___3IGQc",
|
|
26
28
|
"trigger-button": "styles__trigger-button___yyIz8",
|
|
27
29
|
"assistant-icon": "styles__assistant-icon___1VM6i",
|
|
28
30
|
"assistant-icon--small": "styles__assistant-icon--small___3D9po",
|
|
29
31
|
"menu-item": "styles__menu-item___1jvWN",
|
|
30
32
|
"create-item": "styles__create-item___3ZARq",
|
|
31
33
|
"menu-item-icon-button": "styles__menu-item-icon-button___2q_ct",
|
|
32
|
-
"create-icon": "styles__create-icon___1jhHS"
|
|
34
|
+
"create-icon": "styles__create-icon___1jhHS",
|
|
35
|
+
"dropdown-icon": "styles__dropdown-icon___HKkCm",
|
|
36
|
+
"selected-item--mobile": "styles__selected-item--mobile___gxVpw"
|
|
33
37
|
};
|
|
34
38
|
|
|
35
39
|
var AssistantAvatar = function AssistantAvatar(_ref) {
|
|
36
40
|
var assistant = _ref.assistant,
|
|
37
41
|
isSmall = _ref.isSmall,
|
|
38
42
|
className = _ref.className;
|
|
39
|
-
if (!assistant) return;
|
|
43
|
+
if (!assistant) return null;
|
|
40
44
|
|
|
41
45
|
if (assistant.id !== _constants.DEFAULT_ASSISTANT.id && !assistant.icon) {
|
|
42
46
|
return /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
@@ -13,7 +13,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
13
13
|
|
|
14
14
|
var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _CozyTheme = require("cozy-ui-plus/dist/providers/CozyTheme");
|
|
17
17
|
|
|
18
18
|
var _AssistantProvider = require("../AssistantProvider");
|
|
19
19
|
|
|
@@ -31,13 +31,17 @@ var _TwakeKnowledgePanel = _interopRequireDefault(require("../TwakeKnowledges/Tw
|
|
|
31
31
|
|
|
32
32
|
var styles = {
|
|
33
33
|
"assistant-container": "styles__assistant-container___2WDzp",
|
|
34
|
+
"knowledge-panel--light": "styles__knowledge-panel--light___1dZvc",
|
|
35
|
+
"knowledge-panel--dark": "styles__knowledge-panel--dark___3IGQc",
|
|
34
36
|
"trigger-button": "styles__trigger-button___yyIz8",
|
|
35
37
|
"assistant-icon": "styles__assistant-icon___1VM6i",
|
|
36
38
|
"assistant-icon--small": "styles__assistant-icon--small___3D9po",
|
|
37
39
|
"menu-item": "styles__menu-item___1jvWN",
|
|
38
40
|
"create-item": "styles__create-item___3ZARq",
|
|
39
41
|
"menu-item-icon-button": "styles__menu-item-icon-button___2q_ct",
|
|
40
|
-
"create-icon": "styles__create-icon___1jhHS"
|
|
42
|
+
"create-icon": "styles__create-icon___1jhHS",
|
|
43
|
+
"dropdown-icon": "styles__dropdown-icon___HKkCm",
|
|
44
|
+
"selected-item--mobile": "styles__selected-item--mobile___gxVpw"
|
|
41
45
|
};
|
|
42
46
|
|
|
43
47
|
var AssistantContainer = function AssistantContainer() {
|
|
@@ -46,17 +50,17 @@ var AssistantContainer = function AssistantContainer() {
|
|
|
46
50
|
openedKnowledgePanel = _useAssistant.openedKnowledgePanel,
|
|
47
51
|
setOpenedKnowledgePanel = _useAssistant.setOpenedKnowledgePanel;
|
|
48
52
|
|
|
53
|
+
var _useCozyTheme = (0, _CozyTheme.useCozyTheme)(),
|
|
54
|
+
theme = _useCozyTheme.type;
|
|
55
|
+
|
|
49
56
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
50
57
|
className: (0, _classnames.default)('u-flex u-ov-hidden u-h-100', styles['assistant-container'])
|
|
51
58
|
}, /*#__PURE__*/_react.default.createElement(_Sidebar.default, {
|
|
52
|
-
className: "u-w-5 u-pb-
|
|
53
|
-
}), /*#__PURE__*/_react.default.createElement(_Divider.default, {
|
|
54
|
-
orientation: "vertical",
|
|
55
|
-
flexItem: true
|
|
59
|
+
className: "u-w-5 u-pb-0-t u-pb-1"
|
|
56
60
|
}), /*#__PURE__*/_react.default.createElement(_PrettyScrollbar.default, {
|
|
57
|
-
className: "u-flex-auto u-flex u-flex-column u-pb-
|
|
61
|
+
className: "u-flex-auto u-flex u-flex-column u-pb-0-t u-pb-1 u-ov-hidden"
|
|
58
62
|
}, isOpenSearchConversation && (0, _cozyFlags.default)('cozy.search-conversation.enabled') ? /*#__PURE__*/_react.default.createElement(_SearchConversation.default, null) : /*#__PURE__*/_react.default.createElement(_CozyAssistantRuntimeProvider.default, null, /*#__PURE__*/_react.default.createElement(_Conversation.default, null))), openedKnowledgePanel && (0, _cozyFlags.default)('cozy.source-knowledge.enabled') && /*#__PURE__*/_react.default.createElement("div", {
|
|
59
|
-
className:
|
|
63
|
+
className: (0, _classnames.default)('u-h-100 u-maw-7 u-pl-half', styles["knowledge-panel--".concat(theme)])
|
|
60
64
|
}, /*#__PURE__*/_react.default.createElement(_TwakeKnowledgePanel.default, {
|
|
61
65
|
onClose: function onClose() {
|
|
62
66
|
return setOpenedKnowledgePanel(undefined);
|
|
@@ -23,10 +23,16 @@ var _Chips = _interopRequireDefault(require("cozy-ui/transpiled/react/Chips"));
|
|
|
23
23
|
|
|
24
24
|
var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
|
|
25
25
|
|
|
26
|
+
var _Dropdown = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Dropdown"));
|
|
27
|
+
|
|
26
28
|
var _Plus = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Plus"));
|
|
27
29
|
|
|
28
30
|
var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography"));
|
|
29
31
|
|
|
32
|
+
var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
|
|
33
|
+
|
|
34
|
+
var _twakeI18n = require("twake-i18n");
|
|
35
|
+
|
|
30
36
|
var _AssistantProvider = require("../AssistantProvider");
|
|
31
37
|
|
|
32
38
|
var _constants = require("../constants");
|
|
@@ -43,19 +49,31 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
43
49
|
|
|
44
50
|
var styles = {
|
|
45
51
|
"assistant-container": "styles__assistant-container___2WDzp",
|
|
52
|
+
"knowledge-panel--light": "styles__knowledge-panel--light___1dZvc",
|
|
53
|
+
"knowledge-panel--dark": "styles__knowledge-panel--dark___3IGQc",
|
|
46
54
|
"trigger-button": "styles__trigger-button___yyIz8",
|
|
47
55
|
"assistant-icon": "styles__assistant-icon___1VM6i",
|
|
48
56
|
"assistant-icon--small": "styles__assistant-icon--small___3D9po",
|
|
49
57
|
"menu-item": "styles__menu-item___1jvWN",
|
|
50
58
|
"create-item": "styles__create-item___3ZARq",
|
|
51
59
|
"menu-item-icon-button": "styles__menu-item-icon-button___2q_ct",
|
|
52
|
-
"create-icon": "styles__create-icon___1jhHS"
|
|
60
|
+
"create-icon": "styles__create-icon___1jhHS",
|
|
61
|
+
"dropdown-icon": "styles__dropdown-icon___HKkCm",
|
|
62
|
+
"selected-item--mobile": "styles__selected-item--mobile___gxVpw"
|
|
53
63
|
};
|
|
54
64
|
|
|
55
65
|
var AssistantSelection = function AssistantSelection(_ref) {
|
|
56
66
|
var _useQuery;
|
|
57
67
|
|
|
58
|
-
var className = _ref.className
|
|
68
|
+
var className = _ref.className,
|
|
69
|
+
disabled = _ref.disabled;
|
|
70
|
+
|
|
71
|
+
var _useI18n = (0, _twakeI18n.useI18n)(),
|
|
72
|
+
t = _useI18n.t;
|
|
73
|
+
|
|
74
|
+
var _useBreakpoints = (0, _Breakpoints.useBreakpoints)(),
|
|
75
|
+
isMobile = _useBreakpoints.isMobile;
|
|
76
|
+
|
|
59
77
|
var buttonRef = (0, _react.useRef)(null);
|
|
60
78
|
|
|
61
79
|
var _useState = (0, _react.useState)(false),
|
|
@@ -71,10 +89,17 @@ var AssistantSelection = function AssistantSelection(_ref) {
|
|
|
71
89
|
selectedAssistantId = _useAssistant.selectedAssistantId,
|
|
72
90
|
setSelectedAssistantId = _useAssistant.setSelectedAssistantId;
|
|
73
91
|
|
|
92
|
+
(0, _react.useEffect)(function () {
|
|
93
|
+
if (disabled) {
|
|
94
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
95
|
+
setOpen(false);
|
|
96
|
+
}
|
|
97
|
+
}, [disabled]);
|
|
74
98
|
var assistantsQuery = (0, _queries.buildAssistantsQuery)();
|
|
75
99
|
var assistants = ((_useQuery = (0, _cozyClient.useQuery)(assistantsQuery.definition, assistantsQuery.options)) === null || _useQuery === void 0 ? void 0 : _useQuery.data) || [];
|
|
76
100
|
|
|
77
101
|
var handleClick = function handleClick() {
|
|
102
|
+
if (disabled) return;
|
|
78
103
|
setOpen(true);
|
|
79
104
|
};
|
|
80
105
|
|
|
@@ -100,9 +125,13 @@ var AssistantSelection = function AssistantSelection(_ref) {
|
|
|
100
125
|
isSmall: true,
|
|
101
126
|
assistant: selectedAssistant
|
|
102
127
|
}),
|
|
103
|
-
label:
|
|
128
|
+
label: isMobile ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
129
|
+
className: styles['dropdown-icon'],
|
|
130
|
+
icon: _Dropdown.default
|
|
131
|
+
}) : selectedAssistant.name,
|
|
104
132
|
clickable: true,
|
|
105
|
-
onClick: handleClick
|
|
133
|
+
onClick: handleClick,
|
|
134
|
+
disabled: disabled
|
|
106
135
|
})), open && /*#__PURE__*/_react.default.createElement(_ActionsMenu.default, {
|
|
107
136
|
open: true,
|
|
108
137
|
ref: buttonRef,
|
|
@@ -143,7 +172,7 @@ var AssistantSelection = function AssistantSelection(_ref) {
|
|
|
143
172
|
className: styles['create-icon']
|
|
144
173
|
}), /*#__PURE__*/_react.default.createElement(_Typography.default, {
|
|
145
174
|
variant: "body1"
|
|
146
|
-
},
|
|
175
|
+
}, t('assistant_create.title'))))));
|
|
147
176
|
};
|
|
148
177
|
|
|
149
178
|
var _default = AssistantSelection;
|
|
@@ -7,10 +7,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
15
|
|
|
12
16
|
var _ActionsMenuItem = _interopRequireDefault(require("cozy-ui/transpiled/react/ActionsMenu/ActionsMenuItem"));
|
|
13
17
|
|
|
18
|
+
var _Badge = _interopRequireDefault(require("cozy-ui/transpiled/react/Badge"));
|
|
19
|
+
|
|
14
20
|
var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
|
|
15
21
|
|
|
16
22
|
var _IconButton = _interopRequireDefault(require("cozy-ui/transpiled/react/IconButton"));
|
|
@@ -23,20 +29,32 @@ var _Trash = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Tras
|
|
|
23
29
|
|
|
24
30
|
var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography"));
|
|
25
31
|
|
|
32
|
+
var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
|
|
33
|
+
|
|
26
34
|
var _AssistantAvatar = _interopRequireDefault(require("../Assistant/AssistantAvatar"));
|
|
27
35
|
|
|
36
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
37
|
+
|
|
38
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
39
|
+
|
|
28
40
|
var styles = {
|
|
29
41
|
"assistant-container": "styles__assistant-container___2WDzp",
|
|
42
|
+
"knowledge-panel--light": "styles__knowledge-panel--light___1dZvc",
|
|
43
|
+
"knowledge-panel--dark": "styles__knowledge-panel--dark___3IGQc",
|
|
30
44
|
"trigger-button": "styles__trigger-button___yyIz8",
|
|
31
45
|
"assistant-icon": "styles__assistant-icon___1VM6i",
|
|
32
46
|
"assistant-icon--small": "styles__assistant-icon--small___3D9po",
|
|
33
47
|
"menu-item": "styles__menu-item___1jvWN",
|
|
34
48
|
"create-item": "styles__create-item___3ZARq",
|
|
35
49
|
"menu-item-icon-button": "styles__menu-item-icon-button___2q_ct",
|
|
36
|
-
"create-icon": "styles__create-icon___1jhHS"
|
|
50
|
+
"create-icon": "styles__create-icon___1jhHS",
|
|
51
|
+
"dropdown-icon": "styles__dropdown-icon___HKkCm",
|
|
52
|
+
"selected-item--mobile": "styles__selected-item--mobile___gxVpw"
|
|
37
53
|
};
|
|
38
54
|
|
|
39
55
|
var AssistantSelectionItem = function AssistantSelectionItem(_ref) {
|
|
56
|
+
var _cx, _cx2;
|
|
57
|
+
|
|
40
58
|
var assistant = _ref.assistant,
|
|
41
59
|
onClose = _ref.onClose,
|
|
42
60
|
onSelect = _ref.onSelect,
|
|
@@ -47,6 +65,9 @@ var AssistantSelectionItem = function AssistantSelectionItem(_ref) {
|
|
|
47
65
|
_ref$disableActions = _ref.disableActions,
|
|
48
66
|
disableActions = _ref$disableActions === void 0 ? false : _ref$disableActions;
|
|
49
67
|
|
|
68
|
+
var _useBreakpoints = (0, _Breakpoints.useBreakpoints)(),
|
|
69
|
+
isMobile = _useBreakpoints.isMobile;
|
|
70
|
+
|
|
50
71
|
var handleSelect = function handleSelect(assistant) {
|
|
51
72
|
onSelect(assistant);
|
|
52
73
|
onClose();
|
|
@@ -66,6 +87,9 @@ var AssistantSelectionItem = function AssistantSelectionItem(_ref) {
|
|
|
66
87
|
e.stopPropagation();
|
|
67
88
|
};
|
|
68
89
|
|
|
90
|
+
var isSelected = (0, _react.useMemo)(function () {
|
|
91
|
+
return (selectedAssistant === null || selectedAssistant === void 0 ? void 0 : selectedAssistant.id) === assistant.id;
|
|
92
|
+
}, [selectedAssistant === null || selectedAssistant === void 0 ? void 0 : selectedAssistant.id, assistant.id]);
|
|
69
93
|
return /*#__PURE__*/_react.default.createElement(_ActionsMenuItem.default, {
|
|
70
94
|
onClick: function onClick() {
|
|
71
95
|
return handleSelect(assistant);
|
|
@@ -73,19 +97,34 @@ var AssistantSelectionItem = function AssistantSelectionItem(_ref) {
|
|
|
73
97
|
className: styles['menu-item']
|
|
74
98
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
75
99
|
className: "u-flex u-flex-items-center"
|
|
100
|
+
}, isMobile && isSelected ? /*#__PURE__*/_react.default.createElement(_Badge.default, {
|
|
101
|
+
badgeContent: /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
102
|
+
icon: _Check.default,
|
|
103
|
+
size: 10,
|
|
104
|
+
className: styles['selected-item--mobile']
|
|
105
|
+
}),
|
|
106
|
+
variant: "standard",
|
|
107
|
+
size: "small",
|
|
108
|
+
anchorOrigin: {
|
|
109
|
+
vertical: 'bottom',
|
|
110
|
+
horizontal: 'right'
|
|
111
|
+
},
|
|
112
|
+
overlap: "circular"
|
|
76
113
|
}, /*#__PURE__*/_react.default.createElement(_AssistantAvatar.default, {
|
|
77
114
|
assistant: assistant
|
|
115
|
+
})) : /*#__PURE__*/_react.default.createElement(_AssistantAvatar.default, {
|
|
116
|
+
assistant: assistant
|
|
78
117
|
}), /*#__PURE__*/_react.default.createElement(_Typography.default, {
|
|
79
118
|
variant: "body1"
|
|
80
119
|
}, assistant.name)), /*#__PURE__*/_react.default.createElement("div", {
|
|
81
120
|
className: "u-flex u-flex-items-center u-flex-justify-between"
|
|
82
|
-
},
|
|
121
|
+
}, isSelected && !isMobile && /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
83
122
|
icon: _Check.default,
|
|
84
123
|
className: "u-success"
|
|
85
124
|
}), !disableActions && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
|
|
86
125
|
"aria-label": "Edit assistant",
|
|
87
126
|
size: "small",
|
|
88
|
-
className: styles['menu-item-icon-button'],
|
|
127
|
+
className: (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, styles['menu-item-icon-button'], !isMobile || !isSelected && isMobile), (0, _defineProperty2.default)(_cx, 'u-db', isSelected && isMobile), _cx)),
|
|
89
128
|
onClick: handleEdit
|
|
90
129
|
}, /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
91
130
|
icon: _Pen.default,
|
|
@@ -93,7 +132,7 @@ var AssistantSelectionItem = function AssistantSelectionItem(_ref) {
|
|
|
93
132
|
})), /*#__PURE__*/_react.default.createElement(_IconButton.default, {
|
|
94
133
|
"aria-label": "Delete assistant",
|
|
95
134
|
size: "small",
|
|
96
|
-
className: styles['menu-item-icon-button'],
|
|
135
|
+
className: (0, _classnames.default)((_cx2 = {}, (0, _defineProperty2.default)(_cx2, styles['menu-item-icon-button'], !isMobile || !isSelected && isMobile), (0, _defineProperty2.default)(_cx2, 'u-db', isSelected && isMobile), _cx2)),
|
|
97
136
|
onClick: handleDelete
|
|
98
137
|
}, /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
99
138
|
icon: _Trash.default,
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
.assistant-container
|
|
2
2
|
z-index 1
|
|
3
3
|
|
|
4
|
+
.knowledge-panel
|
|
5
|
+
&--light
|
|
6
|
+
background-color var(--primaryBackgroundLight)
|
|
7
|
+
|
|
8
|
+
&--dark
|
|
9
|
+
background-color var(--greyA400)
|
|
10
|
+
|
|
4
11
|
.trigger-button
|
|
5
12
|
border-radius 20px
|
|
6
13
|
padding 4px 12px
|
|
@@ -36,4 +43,13 @@
|
|
|
36
43
|
display none !important
|
|
37
44
|
|
|
38
45
|
.create-icon
|
|
39
|
-
margin-right
|
|
46
|
+
margin-right 0.5rem
|
|
47
|
+
|
|
48
|
+
.dropdown-icon
|
|
49
|
+
margin-top 0.25rem
|
|
50
|
+
|
|
51
|
+
.selected-item--mobile
|
|
52
|
+
padding 1px
|
|
53
|
+
border-radius 100%
|
|
54
|
+
color var(--white)
|
|
55
|
+
background-color var(--malachite)
|
|
@@ -17,20 +17,21 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
17
17
|
|
|
18
18
|
var _reactRouterDom = require("react-router-dom");
|
|
19
19
|
|
|
20
|
-
var _twakeI18n = require("twake-i18n");
|
|
21
|
-
|
|
22
20
|
var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
|
|
23
21
|
|
|
24
22
|
var _Magnifier = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Magnifier"));
|
|
25
23
|
|
|
26
24
|
var _SearchBar = _interopRequireDefault(require("cozy-ui/transpiled/react/SearchBar"));
|
|
27
25
|
|
|
26
|
+
var _twakeI18n = require("twake-i18n");
|
|
27
|
+
|
|
28
28
|
var _locales = require("../locales");
|
|
29
29
|
|
|
30
30
|
var styles = {
|
|
31
31
|
"searchBarDesktop--result": "styles__searchBarDesktop--result___2bQQy",
|
|
32
32
|
"suggestionsPlaceholder": "styles__suggestionsPlaceholder___y-vsv",
|
|
33
|
-
"search-bar-icon": "styles__search-bar-icon___1affF"
|
|
33
|
+
"search-bar-icon": "styles__search-bar-icon___1affF",
|
|
34
|
+
"search-bar--mobile": "styles__search-bar--mobile___1CSb2"
|
|
34
35
|
};
|
|
35
36
|
|
|
36
37
|
var AssistantMobile = function AssistantMobile(_ref) {
|
|
@@ -1,7 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
export interface AssistantState {
|
|
4
|
+
message: Record<string, string>
|
|
5
|
+
status: 'idle' | 'writing' | 'pending'
|
|
6
|
+
messagesId: string[]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface TwakeKnowledgeState {
|
|
10
|
+
drive: { id: string; name: string }[]
|
|
11
|
+
mail: { id: string; name: string }[]
|
|
12
|
+
chat: { id: string; name: string }[]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface AssistantContextValue {
|
|
16
|
+
assistantState: AssistantState
|
|
17
|
+
isOpenCreateAssistant: boolean
|
|
18
|
+
isOpenDeleteAssistant: boolean
|
|
19
|
+
isOpenEditAssistant: boolean
|
|
20
|
+
assistantIdInAction: string | null
|
|
21
|
+
selectedAssistantId: string
|
|
22
|
+
isOpenSearchConversation: boolean
|
|
23
|
+
openedKnowledgePanel: string | null
|
|
24
|
+
selectedTwakeKnowledge: TwakeKnowledgeState
|
|
25
|
+
setAssistantIdInAction: (id: string | null) => void
|
|
26
|
+
setIsOpenDeleteAssistant: (isOpen: boolean) => void
|
|
27
|
+
setAssistantState: React.Dispatch<React.SetStateAction<AssistantState>>
|
|
28
|
+
clearAssistant: () => void
|
|
29
|
+
onAssistantExecute: (
|
|
30
|
+
params: { value: string; conversationId: string },
|
|
31
|
+
callback?: () => void
|
|
32
|
+
) => Promise<void>
|
|
33
|
+
setIsOpenCreateAssistant: (isOpen: boolean) => void
|
|
34
|
+
setIsOpenEditAssistant: (isOpen: boolean) => void
|
|
35
|
+
setSelectedAssistantId: (id: string) => void
|
|
36
|
+
setIsOpenSearchConversation: (isOpen: boolean) => void
|
|
37
|
+
setOpenedKnowledgePanel: (panel: string | null) => void
|
|
38
|
+
setSelectedTwakeKnowledge: React.Dispatch<
|
|
39
|
+
React.SetStateAction<TwakeKnowledgeState>
|
|
40
|
+
>
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function useAssistant(): AssistantContextValue
|
|
@@ -40,6 +40,10 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
40
40
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
41
41
|
|
|
42
42
|
var AssistantContext = /*#__PURE__*/_react.default.createContext();
|
|
43
|
+
/**
|
|
44
|
+
* @returns {import('./AssistantProvider').AssistantContextValue}
|
|
45
|
+
*/
|
|
46
|
+
|
|
43
47
|
|
|
44
48
|
exports.AssistantContext = AssistantContext;
|
|
45
49
|
|
|
@@ -13,10 +13,10 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
13
13
|
|
|
14
14
|
var _react = _interopRequireDefault(require("react"));
|
|
15
15
|
|
|
16
|
-
var _twakeI18n = require("twake-i18n");
|
|
17
|
-
|
|
18
16
|
var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
|
|
19
17
|
|
|
18
|
+
var _twakeI18n = require("twake-i18n");
|
|
19
|
+
|
|
20
20
|
var _ChatItem = _interopRequireDefault(require("./ChatItem"));
|
|
21
21
|
|
|
22
22
|
var _Sources = _interopRequireDefault(require("./Sources/Sources"));
|
|
@@ -13,12 +13,12 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
13
13
|
|
|
14
14
|
var _react = _interopRequireDefault(require("react"));
|
|
15
15
|
|
|
16
|
-
var _twakeI18n = require("twake-i18n");
|
|
17
|
-
|
|
18
16
|
var _contact = require("cozy-client/dist/models/contact");
|
|
19
17
|
|
|
20
18
|
var _Avatar = _interopRequireDefault(require("cozy-ui/transpiled/react/Avatar"));
|
|
21
19
|
|
|
20
|
+
var _twakeI18n = require("twake-i18n");
|
|
21
|
+
|
|
22
22
|
var _ChatItem = _interopRequireDefault(require("./ChatItem"));
|
|
23
23
|
|
|
24
24
|
var _excluded = ["className", "label", "myself"];
|
|
@@ -11,8 +11,6 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
11
11
|
|
|
12
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
13
|
|
|
14
|
-
var _twakeI18n = require("twake-i18n");
|
|
15
|
-
|
|
16
14
|
var _ActionsMenu = _interopRequireDefault(require("cozy-ui/transpiled/react/ActionsMenu"));
|
|
17
15
|
|
|
18
16
|
var _Actions = require("cozy-ui/transpiled/react/ActionsMenu/Actions");
|
|
@@ -23,6 +21,8 @@ var _IconButton = _interopRequireDefault(require("cozy-ui/transpiled/react/IconB
|
|
|
23
21
|
|
|
24
22
|
var _Dots = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/Dots"));
|
|
25
23
|
|
|
24
|
+
var _twakeI18n = require("twake-i18n");
|
|
25
|
+
|
|
26
26
|
var _delete = require("../../actions/delete");
|
|
27
27
|
|
|
28
28
|
var _rename = require("../../actions/rename");
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export default ConversationBar;
|
|
2
|
-
declare function ConversationBar({ value, isEmpty, isRunning, onKeyDown, onSend, onCancel }: {
|
|
2
|
+
declare function ConversationBar({ value, isEmpty, isRunning, onKeyDown, onSend, onCancel, ...props }: {
|
|
3
|
+
[x: string]: any;
|
|
3
4
|
value: any;
|
|
4
5
|
isEmpty: any;
|
|
5
6
|
isRunning: any;
|
|
@@ -7,11 +7,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
14
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
15
|
+
|
|
10
16
|
var _react = require("@assistant-ui/react");
|
|
11
17
|
|
|
12
|
-
var
|
|
18
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
19
|
|
|
14
|
-
var
|
|
20
|
+
var _react2 = _interopRequireWildcard(require("react"));
|
|
15
21
|
|
|
16
22
|
var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons"));
|
|
17
23
|
|
|
@@ -29,12 +35,17 @@ var _useEventListener = _interopRequireDefault(require("cozy-ui/transpiled/react
|
|
|
29
35
|
|
|
30
36
|
var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
|
|
31
37
|
|
|
38
|
+
var _twakeI18n = require("twake-i18n");
|
|
39
|
+
|
|
40
|
+
var _excluded = ["value", "isEmpty", "isRunning", "onKeyDown", "onSend", "onCancel"];
|
|
41
|
+
|
|
32
42
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
43
|
|
|
34
44
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
35
45
|
|
|
36
46
|
var styles = {
|
|
37
47
|
"conversationBar": "styles__conversationBar___2J-Us",
|
|
48
|
+
"conversationBar--mobile": "styles__conversationBar--mobile___1jdg8",
|
|
38
49
|
"conversationBar-input": "styles__conversationBar-input___2DfdZ",
|
|
39
50
|
"chatConversation": "styles__chatConversation___2EmkA",
|
|
40
51
|
"conversationHeaderBar": "styles__conversationHeaderBar___C8tlD",
|
|
@@ -53,7 +64,8 @@ var styles = {
|
|
|
53
64
|
"cozyThread-messageContent": "styles__cozyThread-messageContent___2HjdB",
|
|
54
65
|
"conversation-list-item": "styles__conversation-list-item___rQapI",
|
|
55
66
|
"conversation-list-item-action": "styles__conversation-list-item-action___qiuKm",
|
|
56
|
-
"conversation-list-item--selected": "styles__conversation-list-item--
|
|
67
|
+
"conversation-list-item--selected--light": "styles__conversation-list-item--selected--light___3WvIn",
|
|
68
|
+
"conversation-list-item--selected--dark": "styles__conversation-list-item--selected--dark___JDQlY"
|
|
57
69
|
};
|
|
58
70
|
|
|
59
71
|
var ConversationBar = function ConversationBar(_ref) {
|
|
@@ -62,7 +74,8 @@ var ConversationBar = function ConversationBar(_ref) {
|
|
|
62
74
|
isRunning = _ref.isRunning,
|
|
63
75
|
onKeyDown = _ref.onKeyDown,
|
|
64
76
|
onSend = _ref.onSend,
|
|
65
|
-
onCancel = _ref.onCancel
|
|
77
|
+
onCancel = _ref.onCancel,
|
|
78
|
+
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
66
79
|
|
|
67
80
|
var _useI18n = (0, _twakeI18n.useI18n)(),
|
|
68
81
|
t = _useI18n.t;
|
|
@@ -71,6 +84,7 @@ var ConversationBar = function ConversationBar(_ref) {
|
|
|
71
84
|
isMobile = _useBreakpoints.isMobile;
|
|
72
85
|
|
|
73
86
|
var inputRef = (0, _react2.useRef)(); // to adjust input height for multiline when typing in it
|
|
87
|
+
// eslint-disable-next-line react-hooks/refs
|
|
74
88
|
|
|
75
89
|
(0, _useEventListener.default)(inputRef.current, 'input', function () {
|
|
76
90
|
if (inputRef.current) {
|
|
@@ -95,8 +109,8 @@ var ConversationBar = function ConversationBar(_ref) {
|
|
|
95
109
|
|
|
96
110
|
return /*#__PURE__*/_react2.default.createElement("div", {
|
|
97
111
|
className: "u-w-100 u-maw-7 u-mh-auto"
|
|
98
|
-
}, /*#__PURE__*/_react2.default.createElement(_SearchBar.default, {
|
|
99
|
-
className: styles['conversationBar'],
|
|
112
|
+
}, /*#__PURE__*/_react2.default.createElement(_SearchBar.default, (0, _extends2.default)({}, props, {
|
|
113
|
+
className: (0, _classnames.default)(styles['conversationBar'], (0, _defineProperty2.default)({}, styles['conversationBar--mobile'], isMobile)),
|
|
100
114
|
icon: null,
|
|
101
115
|
size: "auto",
|
|
102
116
|
placeholder: t('assistant.search.placeholder'),
|
|
@@ -147,7 +161,7 @@ var ConversationBar = function ConversationBar(_ref) {
|
|
|
147
161
|
onKeyDown: handleKeyDown
|
|
148
162
|
}
|
|
149
163
|
}
|
|
150
|
-
}));
|
|
164
|
+
})));
|
|
151
165
|
};
|
|
152
166
|
|
|
153
167
|
var _default = ConversationBar;
|
|
@@ -9,6 +9,8 @@ exports.default = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _react = require("@assistant-ui/react");
|
|
11
11
|
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
|
|
12
14
|
var _react2 = _interopRequireWildcard(require("react"));
|
|
13
15
|
|
|
14
16
|
var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
|
|
@@ -35,6 +37,9 @@ var ConversationComposer = function ConversationComposer() {
|
|
|
35
37
|
var isRunning = (0, _react.useThread)(function (state) {
|
|
36
38
|
return state.isRunning;
|
|
37
39
|
});
|
|
40
|
+
var isThreadEmpty = (0, _react.useThread)(function (state) {
|
|
41
|
+
return state.messages.length === 0;
|
|
42
|
+
});
|
|
38
43
|
|
|
39
44
|
var _useAssistant = (0, _AssistantProvider.useAssistant)(),
|
|
40
45
|
setOpenedKnowledgePanel = _useAssistant.setOpenedKnowledgePanel;
|
|
@@ -64,8 +69,12 @@ var ConversationComposer = function ConversationComposer() {
|
|
|
64
69
|
}
|
|
65
70
|
}, [isMobile, handleSend]);
|
|
66
71
|
return /*#__PURE__*/_react2.default.createElement(_react.ComposerPrimitive.Root, {
|
|
67
|
-
className:
|
|
72
|
+
className: (0, _classnames.default)('u-w-100 u-maw-7 u-mh-auto', {
|
|
73
|
+
'u-card u-bxz u-elevation-1': isMobile
|
|
74
|
+
})
|
|
68
75
|
}, /*#__PURE__*/_react2.default.createElement(_ConversationBar.default, {
|
|
76
|
+
elevation: isMobile ? 0 : 1,
|
|
77
|
+
disabledHover: !!isMobile,
|
|
69
78
|
value: value,
|
|
70
79
|
isEmpty: isEmpty,
|
|
71
80
|
isRunning: isRunning,
|
|
@@ -74,7 +83,9 @@ var ConversationComposer = function ConversationComposer() {
|
|
|
74
83
|
onSend: handleSend
|
|
75
84
|
}), /*#__PURE__*/_react2.default.createElement("div", {
|
|
76
85
|
className: "u-flex u-flex-items-center u-flex-justify-between u-mt-1"
|
|
77
|
-
}, (0, _cozyFlags.default)('cozy.create-assistant.enabled') && /*#__PURE__*/_react2.default.createElement(_AssistantSelection.default,
|
|
86
|
+
}, (0, _cozyFlags.default)('cozy.create-assistant.enabled') && /*#__PURE__*/_react2.default.createElement(_AssistantSelection.default, {
|
|
87
|
+
disabled: !isThreadEmpty
|
|
88
|
+
}), (0, _cozyFlags.default)('cozy.source-knowledge.enabled') && /*#__PURE__*/_react2.default.createElement(_TwakeKnowledgeSelector.default, {
|
|
78
89
|
onSelectTwakeKnowledge: setOpenedKnowledgePanel
|
|
79
90
|
})));
|
|
80
91
|
};
|