instantsearch-ui-components 0.16.0 → 0.17.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/cjs/components/FilterSuggestions.js +108 -0
- package/dist/cjs/components/autocomplete/AutocompleteIndex.js +3 -0
- package/dist/cjs/components/autocomplete/createAutocompletePropGetters.js +10 -4
- package/dist/cjs/components/autocomplete/createAutocompleteStorage.js +15 -2
- package/dist/cjs/components/chat/Chat.js +12 -2
- package/dist/cjs/components/chat/ChatMessage.js +3 -2
- package/dist/cjs/components/chat/ChatMessages.js +9 -5
- package/dist/cjs/components/chat/ChatPromptSuggestions.js +37 -0
- package/dist/cjs/components/index.js +22 -0
- package/dist/cjs/version.js +1 -1
- package/dist/es/components/FilterSuggestions.d.ts +108 -0
- package/dist/es/components/FilterSuggestions.js +101 -0
- package/dist/es/components/autocomplete/AutocompleteIndex.d.ts +1 -1
- package/dist/es/components/autocomplete/AutocompleteIndex.js +3 -0
- package/dist/es/components/autocomplete/createAutocompletePropGetters.js +10 -4
- package/dist/es/components/autocomplete/createAutocompleteStorage.d.ts +2 -1
- package/dist/es/components/autocomplete/createAutocompleteStorage.js +15 -2
- package/dist/es/components/chat/Chat.d.ts +7 -0
- package/dist/es/components/chat/Chat.js +12 -2
- package/dist/es/components/chat/ChatMessage.d.ts +5 -1
- package/dist/es/components/chat/ChatMessage.js +3 -2
- package/dist/es/components/chat/ChatMessages.d.ts +5 -1
- package/dist/es/components/chat/ChatMessages.js +9 -5
- package/dist/es/components/chat/ChatPromptSuggestions.d.ts +14 -0
- package/dist/es/components/chat/ChatPromptSuggestions.js +31 -0
- package/dist/es/components/chat/types.d.ts +343 -2
- package/dist/es/components/index.d.ts +2 -0
- package/dist/es/components/index.js +3 -1
- package/dist/es/version.d.ts +1 -1
- package/dist/es/version.js +1 -1
- package/package.json +2 -3
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createFilterSuggestionsComponent = createFilterSuggestionsComponent;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
|
+
var _lib = require("../lib");
|
|
12
|
+
var _Button = require("./Button");
|
|
13
|
+
var _icons = require("./chat/icons");
|
|
14
|
+
var _excluded = ["classNames", "suggestions", "isLoading", "refine", "skeletonCount", "itemComponent", "headerComponent", "emptyComponent"];
|
|
15
|
+
function createFilterSuggestionsComponent(_ref) {
|
|
16
|
+
var createElement = _ref.createElement;
|
|
17
|
+
var Button = (0, _Button.createButtonComponent)({
|
|
18
|
+
createElement: createElement
|
|
19
|
+
});
|
|
20
|
+
function DefaultHeader(_ref2) {
|
|
21
|
+
var classNames = _ref2.classNames;
|
|
22
|
+
return createElement("div", {
|
|
23
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-header', classNames.header)
|
|
24
|
+
}, createElement("span", {
|
|
25
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-headerIcon', classNames.headerIcon)
|
|
26
|
+
}, createElement(_icons.SparklesIcon, {
|
|
27
|
+
createElement: createElement
|
|
28
|
+
})), createElement("span", {
|
|
29
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-headerTitle', classNames.headerTitle)
|
|
30
|
+
}, "Filter suggestions"));
|
|
31
|
+
}
|
|
32
|
+
function DefaultItem(_ref3) {
|
|
33
|
+
var suggestion = _ref3.suggestion,
|
|
34
|
+
classNames = _ref3.classNames,
|
|
35
|
+
refine = _ref3.refine;
|
|
36
|
+
return createElement(Button, {
|
|
37
|
+
variant: "outline",
|
|
38
|
+
size: "sm",
|
|
39
|
+
className: (0, _lib.cx)(classNames.button),
|
|
40
|
+
onClick: refine
|
|
41
|
+
}, createElement("span", {
|
|
42
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-label', classNames.label)
|
|
43
|
+
}, suggestion.label, ": ", suggestion.value), createElement("span", {
|
|
44
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-count', classNames.count)
|
|
45
|
+
}, suggestion.count));
|
|
46
|
+
}
|
|
47
|
+
return function FilterSuggestions(userProps) {
|
|
48
|
+
var _userProps$classNames = userProps.classNames,
|
|
49
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
50
|
+
suggestions = userProps.suggestions,
|
|
51
|
+
isLoading = userProps.isLoading,
|
|
52
|
+
_refine = userProps.refine,
|
|
53
|
+
_userProps$skeletonCo = userProps.skeletonCount,
|
|
54
|
+
skeletonCount = _userProps$skeletonCo === void 0 ? 3 : _userProps$skeletonCo,
|
|
55
|
+
_userProps$itemCompon = userProps.itemComponent,
|
|
56
|
+
ItemComponent = _userProps$itemCompon === void 0 ? DefaultItem : _userProps$itemCompon,
|
|
57
|
+
headerComponent = userProps.headerComponent,
|
|
58
|
+
EmptyComponent = userProps.emptyComponent,
|
|
59
|
+
props = (0, _objectWithoutProperties2.default)(userProps, _excluded);
|
|
60
|
+
var HeaderComponent = headerComponent === false ? null : headerComponent !== null && headerComponent !== void 0 ? headerComponent : DefaultHeader;
|
|
61
|
+
var isEmpty = suggestions.length === 0;
|
|
62
|
+
if (isEmpty && !isLoading) {
|
|
63
|
+
return createElement("div", (0, _extends2.default)({}, props, {
|
|
64
|
+
className: (0, _lib.cx)('ais-FilterSuggestions', classNames.root, 'ais-FilterSuggestions--empty', classNames.emptyRoot, props.className)
|
|
65
|
+
}), EmptyComponent && createElement(EmptyComponent, {
|
|
66
|
+
classNames: {
|
|
67
|
+
emptyRoot: classNames.emptyRoot
|
|
68
|
+
}
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
var headerClassNames = {
|
|
72
|
+
header: classNames.header,
|
|
73
|
+
headerIcon: classNames.headerIcon,
|
|
74
|
+
headerTitle: classNames.headerTitle
|
|
75
|
+
};
|
|
76
|
+
var itemClassNames = {
|
|
77
|
+
item: classNames.item,
|
|
78
|
+
button: classNames.button,
|
|
79
|
+
label: classNames.label,
|
|
80
|
+
count: classNames.count
|
|
81
|
+
};
|
|
82
|
+
return createElement("div", (0, _extends2.default)({}, props, {
|
|
83
|
+
className: (0, _lib.cx)('ais-FilterSuggestions', classNames.root, isLoading && (0, _lib.cx)('ais-FilterSuggestions--loading', classNames.loadingRoot), props.className)
|
|
84
|
+
}), HeaderComponent && createElement(HeaderComponent, {
|
|
85
|
+
classNames: headerClassNames
|
|
86
|
+
}), isLoading ? createElement("div", {
|
|
87
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-skeleton', classNames.skeleton)
|
|
88
|
+
}, (0, _toConsumableArray2.default)(new Array(skeletonCount)).map(function (_, i) {
|
|
89
|
+
return createElement("div", {
|
|
90
|
+
key: i,
|
|
91
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-skeletonItem', classNames.skeletonItem)
|
|
92
|
+
});
|
|
93
|
+
})) : createElement("ul", {
|
|
94
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-list', classNames.list)
|
|
95
|
+
}, suggestions.map(function (suggestion) {
|
|
96
|
+
return createElement("li", {
|
|
97
|
+
key: "".concat(suggestion.attribute, "-").concat(suggestion.value),
|
|
98
|
+
className: (0, _lib.cx)('ais-FilterSuggestions-item', classNames.item)
|
|
99
|
+
}, createElement(ItemComponent, {
|
|
100
|
+
suggestion: suggestion,
|
|
101
|
+
classNames: itemClassNames,
|
|
102
|
+
refine: function refine() {
|
|
103
|
+
return _refine(suggestion.attribute, suggestion.value);
|
|
104
|
+
}
|
|
105
|
+
}));
|
|
106
|
+
})));
|
|
107
|
+
};
|
|
108
|
+
}
|
|
@@ -18,6 +18,9 @@ function createAutocompleteIndexComponent(_ref) {
|
|
|
18
18
|
getItemProps = userProps.getItemProps,
|
|
19
19
|
_userProps$classNames = userProps.classNames,
|
|
20
20
|
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames;
|
|
21
|
+
if (items.length === 0) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
21
24
|
return createElement("div", {
|
|
22
25
|
className: (0, _cx.cx)('ais-AutocompleteIndex', classNames.root)
|
|
23
26
|
}, HeaderComponent && createElement("div", {
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.createAutocompletePropGetters = createAutocompletePropGetters;
|
|
8
8
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _lib = require("../../lib");
|
|
10
11
|
function createAutocompletePropGetters(_ref) {
|
|
11
12
|
var useEffect = _ref.useEffect,
|
|
12
13
|
useId = _ref.useId,
|
|
@@ -218,18 +219,23 @@ function buildItems(_ref5) {
|
|
|
218
219
|
getElementId = _ref5.getElementId;
|
|
219
220
|
var itemsIds = [];
|
|
220
221
|
var items = new Map();
|
|
221
|
-
|
|
222
|
+
var _loop = function _loop(i) {
|
|
222
223
|
var _indices$i;
|
|
223
|
-
var
|
|
224
|
+
var currentIndexConfig = (0, _lib.find)(indicesConfig, function (config) {
|
|
225
|
+
return config.indexName === indices[i].indexName;
|
|
226
|
+
});
|
|
224
227
|
var hits = ((_indices$i = indices[i]) === null || _indices$i === void 0 ? void 0 : _indices$i.hits) || [];
|
|
225
228
|
for (var position = 0; position < hits.length; position++) {
|
|
226
|
-
var itemId = getElementId('item',
|
|
229
|
+
var itemId = getElementId('item', (currentIndexConfig === null || currentIndexConfig === void 0 ? void 0 : currentIndexConfig.indexName) || indices[i].indexName, position);
|
|
227
230
|
items.set(itemId, {
|
|
228
231
|
item: hits[position],
|
|
229
|
-
config:
|
|
232
|
+
config: currentIndexConfig
|
|
230
233
|
});
|
|
231
234
|
itemsIds.push(itemId);
|
|
232
235
|
}
|
|
236
|
+
};
|
|
237
|
+
for (var i = 0; i < indices.length; i++) {
|
|
238
|
+
_loop(i);
|
|
233
239
|
}
|
|
234
240
|
return {
|
|
235
241
|
items: items,
|
|
@@ -6,9 +6,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.createAutocompleteStorage = createAutocompleteStorage;
|
|
8
8
|
exports.createStorage = createStorage;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
12
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
13
|
+
var _lib = require("../../lib");
|
|
14
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
15
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
16
|
function createAutocompleteStorage(_ref) {
|
|
13
17
|
var useEffect = _ref.useEffect,
|
|
14
18
|
useMemo = _ref.useMemo,
|
|
@@ -17,7 +21,8 @@ function createAutocompleteStorage(_ref) {
|
|
|
17
21
|
var showRecent = _ref2.showRecent,
|
|
18
22
|
query = _ref2.query,
|
|
19
23
|
indices = _ref2.indices,
|
|
20
|
-
indicesConfig = _ref2.indicesConfig
|
|
24
|
+
indicesConfig = _ref2.indicesConfig,
|
|
25
|
+
suggestionsIndexName = _ref2.suggestionsIndexName;
|
|
21
26
|
var storageKey = showRecent && (0, _typeof2.default)(showRecent) === 'object' ? showRecent.storageKey : undefined;
|
|
22
27
|
var storage = useMemo(function () {
|
|
23
28
|
return createStorage({
|
|
@@ -61,7 +66,15 @@ function createAutocompleteStorage(_ref) {
|
|
|
61
66
|
})
|
|
62
67
|
};
|
|
63
68
|
});
|
|
64
|
-
var indicesForPropGetters = (0, _toConsumableArray2.default)(indices)
|
|
69
|
+
var indicesForPropGetters = (0, _toConsumableArray2.default)(indices.map(function (index) {
|
|
70
|
+
return index.indexName === suggestionsIndexName ? _objectSpread(_objectSpread({}, index), {}, {
|
|
71
|
+
hits: index.hits.filter(function (hit) {
|
|
72
|
+
return !(0, _lib.find)(storageHits, function (storageHit) {
|
|
73
|
+
return storageHit.query === hit.query;
|
|
74
|
+
});
|
|
75
|
+
})
|
|
76
|
+
}) : index;
|
|
77
|
+
}));
|
|
65
78
|
var indicesConfigForPropGetters = (0, _toConsumableArray2.default)(indicesConfig);
|
|
66
79
|
indicesForPropGetters.unshift({
|
|
67
80
|
indexName: 'recent-searches',
|
|
@@ -12,8 +12,9 @@ var _lib = require("../../lib");
|
|
|
12
12
|
var _ChatHeader = require("./ChatHeader");
|
|
13
13
|
var _ChatMessages = require("./ChatMessages");
|
|
14
14
|
var _ChatPrompt = require("./ChatPrompt");
|
|
15
|
+
var _ChatPromptSuggestions = require("./ChatPromptSuggestions");
|
|
15
16
|
var _ChatToggleButton = require("./ChatToggleButton");
|
|
16
|
-
var _excluded = ["open", "maximized", "headerProps", "toggleButtonProps", "messagesProps", "promptProps", "headerComponent", "promptComponent", "toggleButtonComponent", "classNames", "className"];
|
|
17
|
+
var _excluded = ["open", "maximized", "headerProps", "toggleButtonProps", "messagesProps", "suggestionsProps", "promptProps", "headerComponent", "promptComponent", "toggleButtonComponent", "suggestionsComponent", "classNames", "className"];
|
|
17
18
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
19
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
20
|
function createChatComponent(_ref) {
|
|
@@ -35,6 +36,10 @@ function createChatComponent(_ref) {
|
|
|
35
36
|
createElement: createElement,
|
|
36
37
|
Fragment: Fragment
|
|
37
38
|
});
|
|
39
|
+
var ChatPromptSuggestions = (0, _ChatPromptSuggestions.createChatPromptSuggestionsComponent)({
|
|
40
|
+
createElement: createElement,
|
|
41
|
+
Fragment: Fragment
|
|
42
|
+
});
|
|
38
43
|
return function Chat(userProps) {
|
|
39
44
|
var open = userProps.open,
|
|
40
45
|
_userProps$maximized = userProps.maximized,
|
|
@@ -42,11 +47,13 @@ function createChatComponent(_ref) {
|
|
|
42
47
|
headerProps = userProps.headerProps,
|
|
43
48
|
toggleButtonProps = userProps.toggleButtonProps,
|
|
44
49
|
messagesProps = userProps.messagesProps,
|
|
50
|
+
suggestionsProps = userProps.suggestionsProps,
|
|
45
51
|
_userProps$promptProp = userProps.promptProps,
|
|
46
52
|
promptProps = _userProps$promptProp === void 0 ? {} : _userProps$promptProp,
|
|
47
53
|
HeaderComponent = userProps.headerComponent,
|
|
48
54
|
PromptComponent = userProps.promptComponent,
|
|
49
55
|
ToggleButtonComponent = userProps.toggleButtonComponent,
|
|
56
|
+
SuggestionsComponent = userProps.suggestionsComponent,
|
|
50
57
|
_userProps$classNames = userProps.classNames,
|
|
51
58
|
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
52
59
|
className = userProps.className,
|
|
@@ -60,7 +67,10 @@ function createChatComponent(_ref) {
|
|
|
60
67
|
maximized: maximized
|
|
61
68
|
})), createElement(ChatMessages, (0, _extends2.default)({}, messagesProps, {
|
|
62
69
|
classNames: classNames.messages,
|
|
63
|
-
messageClassNames: classNames.message
|
|
70
|
+
messageClassNames: classNames.message,
|
|
71
|
+
suggestionsElement: createElement(SuggestionsComponent || ChatPromptSuggestions, _objectSpread(_objectSpread({}, suggestionsProps), {}, {
|
|
72
|
+
classNames: classNames.suggestions
|
|
73
|
+
}))
|
|
64
74
|
})), createElement(PromptComponent || ChatPrompt, _objectSpread(_objectSpread({}, promptProps), {}, {
|
|
65
75
|
classNames: classNames.prompt
|
|
66
76
|
}))), createElement("div", {
|
|
@@ -12,7 +12,7 @@ var _markdownToJsx = require("markdown-to-jsx");
|
|
|
12
12
|
var _lib = require("../../lib");
|
|
13
13
|
var _Button = require("../Button");
|
|
14
14
|
var _icons = require("./icons");
|
|
15
|
-
var _excluded = ["classNames", "message", "side", "variant", "actions", "autoHideActions", "leadingComponent", "actionsComponent", "footerComponent", "tools", "indexUiState", "setIndexUiState", "onClose", "translations"];
|
|
15
|
+
var _excluded = ["classNames", "message", "side", "variant", "actions", "autoHideActions", "leadingComponent", "actionsComponent", "footerComponent", "tools", "indexUiState", "setIndexUiState", "onClose", "translations", "suggestionsElement"];
|
|
16
16
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
17
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
18
|
function createChatMessageComponent(_ref) {
|
|
@@ -41,6 +41,7 @@ function createChatMessageComponent(_ref) {
|
|
|
41
41
|
setIndexUiState = userProps.setIndexUiState,
|
|
42
42
|
onClose = userProps.onClose,
|
|
43
43
|
userTranslations = userProps.translations,
|
|
44
|
+
suggestionsElement = userProps.suggestionsElement,
|
|
44
45
|
props = (0, _objectWithoutProperties2.default)(userProps, _excluded);
|
|
45
46
|
var translations = _objectSpread({
|
|
46
47
|
messageLabel: 'Message',
|
|
@@ -112,7 +113,7 @@ function createChatMessageComponent(_ref) {
|
|
|
112
113
|
className: (0, _lib.cx)(cssClasses.content)
|
|
113
114
|
}, createElement("div", {
|
|
114
115
|
className: (0, _lib.cx)(cssClasses.message)
|
|
115
|
-
}, message.parts.map(renderMessagePart)), hasActions && createElement("div", {
|
|
116
|
+
}, message.parts.map(renderMessagePart)), suggestionsElement, hasActions && createElement("div", {
|
|
116
117
|
className: (0, _lib.cx)(cssClasses.actions),
|
|
117
118
|
"aria-label": translations.actionsLabel
|
|
118
119
|
}, ActionsComponent ? createElement(ActionsComponent, {
|
|
@@ -15,7 +15,7 @@ var _ChatMessage = require("./ChatMessage");
|
|
|
15
15
|
var _ChatMessageError = require("./ChatMessageError");
|
|
16
16
|
var _ChatMessageLoader = require("./ChatMessageLoader");
|
|
17
17
|
var _icons = require("./icons");
|
|
18
|
-
var _excluded = ["classNames", "messageClassNames", "messageTranslations", "messages", "messageComponent", "loaderComponent", "errorComponent", "actionsComponent", "tools", "indexUiState", "setIndexUiState", "status", "hideScrollToBottom", "onReload", "onClose", "translations", "userMessageProps", "assistantMessageProps", "isClearing", "onClearTransitionEnd", "isScrollAtBottom", "scrollRef", "contentRef", "onScrollToBottom"];
|
|
18
|
+
var _excluded = ["classNames", "messageClassNames", "messageTranslations", "messages", "messageComponent", "loaderComponent", "errorComponent", "actionsComponent", "tools", "indexUiState", "setIndexUiState", "status", "hideScrollToBottom", "onReload", "onClose", "translations", "userMessageProps", "assistantMessageProps", "isClearing", "onClearTransitionEnd", "isScrollAtBottom", "scrollRef", "contentRef", "onScrollToBottom", "suggestionsElement"];
|
|
19
19
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
20
20
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
21
21
|
var getTextContent = function getTextContent(message) {
|
|
@@ -48,7 +48,8 @@ function createDefaultMessageComponent(_ref) {
|
|
|
48
48
|
actionsComponent = _ref2.actionsComponent,
|
|
49
49
|
classNames = _ref2.classNames,
|
|
50
50
|
messageTranslations = _ref2.messageTranslations,
|
|
51
|
-
translations = _ref2.translations
|
|
51
|
+
translations = _ref2.translations,
|
|
52
|
+
suggestionsElement = _ref2.suggestionsElement;
|
|
52
53
|
var defaultAssistantActions = [].concat((0, _toConsumableArray2.default)(hasTextContent(message) ? [{
|
|
53
54
|
title: translations.copyToClipboardLabel,
|
|
54
55
|
icon: function icon() {
|
|
@@ -82,7 +83,8 @@ function createDefaultMessageComponent(_ref) {
|
|
|
82
83
|
actionsComponent: actionsComponent,
|
|
83
84
|
"data-role": message.role,
|
|
84
85
|
classNames: classNames,
|
|
85
|
-
translations: messageTranslations
|
|
86
|
+
translations: messageTranslations,
|
|
87
|
+
suggestionsElement: suggestionsElement
|
|
86
88
|
}, messageProps));
|
|
87
89
|
};
|
|
88
90
|
}
|
|
@@ -133,6 +135,7 @@ function createChatMessagesComponent(_ref3) {
|
|
|
133
135
|
scrollRef = userProps.scrollRef,
|
|
134
136
|
contentRef = userProps.contentRef,
|
|
135
137
|
onScrollToBottom = userProps.onScrollToBottom,
|
|
138
|
+
suggestionsElement = userProps.suggestionsElement,
|
|
136
139
|
props = (0, _objectWithoutProperties2.default)(userProps, _excluded);
|
|
137
140
|
var translations = _objectSpread({
|
|
138
141
|
scrollToBottomLabel: 'Scroll to bottom',
|
|
@@ -164,7 +167,7 @@ function createChatMessagesComponent(_ref3) {
|
|
|
164
167
|
onClearTransitionEnd === null || onClearTransitionEnd === void 0 ? void 0 : onClearTransitionEnd();
|
|
165
168
|
}
|
|
166
169
|
}
|
|
167
|
-
}, messages.map(function (message) {
|
|
170
|
+
}, messages.map(function (message, index) {
|
|
168
171
|
return createElement(DefaultMessage, {
|
|
169
172
|
key: message.id,
|
|
170
173
|
message: message,
|
|
@@ -178,7 +181,8 @@ function createChatMessagesComponent(_ref3) {
|
|
|
178
181
|
onClose: onClose,
|
|
179
182
|
translations: translations,
|
|
180
183
|
classNames: messageClassNames,
|
|
181
|
-
messageTranslations: messageTranslations
|
|
184
|
+
messageTranslations: messageTranslations,
|
|
185
|
+
suggestionsElement: status === 'ready' && message.role === 'assistant' && index === messages.length - 1 ? suggestionsElement : undefined
|
|
182
186
|
});
|
|
183
187
|
}), status === 'submitted' && createElement(DefaultLoader, {
|
|
184
188
|
translations: {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createChatPromptSuggestionsComponent = createChatPromptSuggestionsComponent;
|
|
7
|
+
var _lib = require("../../lib");
|
|
8
|
+
var _Button = require("../Button");
|
|
9
|
+
function createChatPromptSuggestionsComponent(_ref) {
|
|
10
|
+
var createElement = _ref.createElement;
|
|
11
|
+
var Button = (0, _Button.createButtonComponent)({
|
|
12
|
+
createElement: createElement
|
|
13
|
+
});
|
|
14
|
+
return function ChatPromptSuggestions(userProps) {
|
|
15
|
+
var _userProps$suggestion = userProps.suggestions,
|
|
16
|
+
suggestions = _userProps$suggestion === void 0 ? [] : _userProps$suggestion,
|
|
17
|
+
onSuggestionClick = userProps.onSuggestionClick,
|
|
18
|
+
_userProps$classNames = userProps.classNames,
|
|
19
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames;
|
|
20
|
+
if (suggestions.length === 0) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return createElement("div", {
|
|
24
|
+
className: (0, _lib.cx)('ais-ChatPromptSuggestions', classNames.root)
|
|
25
|
+
}, suggestions.map(function (suggestion, index) {
|
|
26
|
+
return createElement(Button, {
|
|
27
|
+
key: index,
|
|
28
|
+
size: "sm",
|
|
29
|
+
variant: "primary",
|
|
30
|
+
className: (0, _lib.cx)('ais-ChatPromptSuggestions-suggestion', classNames.suggestion),
|
|
31
|
+
onClick: function onClick() {
|
|
32
|
+
return onSuggestionClick(suggestion);
|
|
33
|
+
}
|
|
34
|
+
}, suggestion);
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -113,6 +113,17 @@ Object.keys(_ChatPrompt).forEach(function (key) {
|
|
|
113
113
|
}
|
|
114
114
|
});
|
|
115
115
|
});
|
|
116
|
+
var _ChatPromptSuggestions = require("./chat/ChatPromptSuggestions");
|
|
117
|
+
Object.keys(_ChatPromptSuggestions).forEach(function (key) {
|
|
118
|
+
if (key === "default" || key === "__esModule") return;
|
|
119
|
+
if (key in exports && exports[key] === _ChatPromptSuggestions[key]) return;
|
|
120
|
+
Object.defineProperty(exports, key, {
|
|
121
|
+
enumerable: true,
|
|
122
|
+
get: function get() {
|
|
123
|
+
return _ChatPromptSuggestions[key];
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
});
|
|
116
127
|
var _ChatToggleButton = require("./chat/ChatToggleButton");
|
|
117
128
|
Object.keys(_ChatToggleButton).forEach(function (key) {
|
|
118
129
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -211,4 +222,15 @@ Object.keys(_TrendingItems).forEach(function (key) {
|
|
|
211
222
|
return _TrendingItems[key];
|
|
212
223
|
}
|
|
213
224
|
});
|
|
225
|
+
});
|
|
226
|
+
var _FilterSuggestions = require("./FilterSuggestions");
|
|
227
|
+
Object.keys(_FilterSuggestions).forEach(function (key) {
|
|
228
|
+
if (key === "default" || key === "__esModule") return;
|
|
229
|
+
if (key in exports && exports[key] === _FilterSuggestions[key]) return;
|
|
230
|
+
Object.defineProperty(exports, key, {
|
|
231
|
+
enumerable: true,
|
|
232
|
+
get: function get() {
|
|
233
|
+
return _FilterSuggestions[key];
|
|
234
|
+
}
|
|
235
|
+
});
|
|
214
236
|
});
|
package/dist/cjs/version.js
CHANGED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { ComponentProps, Renderer } from '../types';
|
|
2
|
+
export type Suggestion = {
|
|
3
|
+
/**
|
|
4
|
+
* The facet attribute name.
|
|
5
|
+
*/
|
|
6
|
+
attribute: string;
|
|
7
|
+
/**
|
|
8
|
+
* The facet value to filter by.
|
|
9
|
+
*/
|
|
10
|
+
value: string;
|
|
11
|
+
/**
|
|
12
|
+
* Human-readable display label.
|
|
13
|
+
*/
|
|
14
|
+
label: string;
|
|
15
|
+
/**
|
|
16
|
+
* Number of records matching this filter.
|
|
17
|
+
*/
|
|
18
|
+
count: number;
|
|
19
|
+
};
|
|
20
|
+
export type FilterSuggestionsItemComponentProps = {
|
|
21
|
+
suggestion: Suggestion;
|
|
22
|
+
classNames: Partial<Pick<FilterSuggestionsClassNames, 'item' | 'button' | 'label' | 'count'>>;
|
|
23
|
+
refine: () => void;
|
|
24
|
+
};
|
|
25
|
+
export type FilterSuggestionsHeaderComponentProps = {
|
|
26
|
+
classNames: Partial<Pick<FilterSuggestionsClassNames, 'header' | 'headerIcon' | 'headerTitle'>>;
|
|
27
|
+
};
|
|
28
|
+
export type FilterSuggestionsEmptyComponentProps = {
|
|
29
|
+
classNames: Partial<Pick<FilterSuggestionsClassNames, 'emptyRoot'>>;
|
|
30
|
+
};
|
|
31
|
+
export type FilterSuggestionsProps = ComponentProps<'div'> & {
|
|
32
|
+
suggestions: Suggestion[];
|
|
33
|
+
isLoading: boolean;
|
|
34
|
+
refine: (attribute: string, value: string) => void;
|
|
35
|
+
classNames?: Partial<FilterSuggestionsClassNames>;
|
|
36
|
+
/**
|
|
37
|
+
* Number of skeleton items to show when loading.
|
|
38
|
+
* @default 3
|
|
39
|
+
*/
|
|
40
|
+
skeletonCount?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Component to render each suggestion item.
|
|
43
|
+
*/
|
|
44
|
+
itemComponent?: (props: FilterSuggestionsItemComponentProps) => JSX.Element;
|
|
45
|
+
/**
|
|
46
|
+
* Component to render the header. Set to `false` to disable the header.
|
|
47
|
+
*/
|
|
48
|
+
headerComponent?: ((props: FilterSuggestionsHeaderComponentProps) => JSX.Element) | false;
|
|
49
|
+
/**
|
|
50
|
+
* Component to render when there are no suggestions.
|
|
51
|
+
*/
|
|
52
|
+
emptyComponent?: (props: FilterSuggestionsEmptyComponentProps) => JSX.Element | null;
|
|
53
|
+
};
|
|
54
|
+
export type FilterSuggestionsClassNames = {
|
|
55
|
+
/**
|
|
56
|
+
* Class names to apply to the root element
|
|
57
|
+
*/
|
|
58
|
+
root: string | string[];
|
|
59
|
+
/**
|
|
60
|
+
* Class names to apply to the root element when loading
|
|
61
|
+
*/
|
|
62
|
+
loadingRoot: string | string[];
|
|
63
|
+
/**
|
|
64
|
+
* Class names to apply to the root element when empty
|
|
65
|
+
*/
|
|
66
|
+
emptyRoot: string | string[];
|
|
67
|
+
/**
|
|
68
|
+
* Class names to apply to the header element
|
|
69
|
+
*/
|
|
70
|
+
header: string | string[];
|
|
71
|
+
/**
|
|
72
|
+
* Class names to apply to the header icon element
|
|
73
|
+
*/
|
|
74
|
+
headerIcon: string | string[];
|
|
75
|
+
/**
|
|
76
|
+
* Class names to apply to the header title element
|
|
77
|
+
*/
|
|
78
|
+
headerTitle: string | string[];
|
|
79
|
+
/**
|
|
80
|
+
* Class names to apply to the skeleton container element
|
|
81
|
+
*/
|
|
82
|
+
skeleton: string | string[];
|
|
83
|
+
/**
|
|
84
|
+
* Class names to apply to each skeleton item element
|
|
85
|
+
*/
|
|
86
|
+
skeletonItem: string | string[];
|
|
87
|
+
/**
|
|
88
|
+
* Class names to apply to the list element
|
|
89
|
+
*/
|
|
90
|
+
list: string | string[];
|
|
91
|
+
/**
|
|
92
|
+
* Class names to apply to each item element
|
|
93
|
+
*/
|
|
94
|
+
item: string | string[];
|
|
95
|
+
/**
|
|
96
|
+
* Class names to apply to the button element
|
|
97
|
+
*/
|
|
98
|
+
button: string | string[];
|
|
99
|
+
/**
|
|
100
|
+
* Class names to apply to the label element
|
|
101
|
+
*/
|
|
102
|
+
label: string | string[];
|
|
103
|
+
/**
|
|
104
|
+
* Class names to apply to the count element
|
|
105
|
+
*/
|
|
106
|
+
count: string | string[];
|
|
107
|
+
};
|
|
108
|
+
export declare function createFilterSuggestionsComponent({ createElement }: Renderer): (userProps: FilterSuggestionsProps) => JSX.Element | null;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["classNames", "suggestions", "isLoading", "refine", "skeletonCount", "itemComponent", "headerComponent", "emptyComponent"];
|
|
5
|
+
import { cx } from "../lib/index.js";
|
|
6
|
+
import { createButtonComponent } from "./Button.js";
|
|
7
|
+
import { SparklesIcon } from "./chat/icons.js";
|
|
8
|
+
export function createFilterSuggestionsComponent(_ref) {
|
|
9
|
+
var createElement = _ref.createElement;
|
|
10
|
+
var Button = createButtonComponent({
|
|
11
|
+
createElement: createElement
|
|
12
|
+
});
|
|
13
|
+
function DefaultHeader(_ref2) {
|
|
14
|
+
var classNames = _ref2.classNames;
|
|
15
|
+
return createElement("div", {
|
|
16
|
+
className: cx('ais-FilterSuggestions-header', classNames.header)
|
|
17
|
+
}, createElement("span", {
|
|
18
|
+
className: cx('ais-FilterSuggestions-headerIcon', classNames.headerIcon)
|
|
19
|
+
}, createElement(SparklesIcon, {
|
|
20
|
+
createElement: createElement
|
|
21
|
+
})), createElement("span", {
|
|
22
|
+
className: cx('ais-FilterSuggestions-headerTitle', classNames.headerTitle)
|
|
23
|
+
}, "Filter suggestions"));
|
|
24
|
+
}
|
|
25
|
+
function DefaultItem(_ref3) {
|
|
26
|
+
var suggestion = _ref3.suggestion,
|
|
27
|
+
classNames = _ref3.classNames,
|
|
28
|
+
refine = _ref3.refine;
|
|
29
|
+
return createElement(Button, {
|
|
30
|
+
variant: "outline",
|
|
31
|
+
size: "sm",
|
|
32
|
+
className: cx(classNames.button),
|
|
33
|
+
onClick: refine
|
|
34
|
+
}, createElement("span", {
|
|
35
|
+
className: cx('ais-FilterSuggestions-label', classNames.label)
|
|
36
|
+
}, suggestion.label, ": ", suggestion.value), createElement("span", {
|
|
37
|
+
className: cx('ais-FilterSuggestions-count', classNames.count)
|
|
38
|
+
}, suggestion.count));
|
|
39
|
+
}
|
|
40
|
+
return function FilterSuggestions(userProps) {
|
|
41
|
+
var _userProps$classNames = userProps.classNames,
|
|
42
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
43
|
+
suggestions = userProps.suggestions,
|
|
44
|
+
isLoading = userProps.isLoading,
|
|
45
|
+
_refine = userProps.refine,
|
|
46
|
+
_userProps$skeletonCo = userProps.skeletonCount,
|
|
47
|
+
skeletonCount = _userProps$skeletonCo === void 0 ? 3 : _userProps$skeletonCo,
|
|
48
|
+
_userProps$itemCompon = userProps.itemComponent,
|
|
49
|
+
ItemComponent = _userProps$itemCompon === void 0 ? DefaultItem : _userProps$itemCompon,
|
|
50
|
+
headerComponent = userProps.headerComponent,
|
|
51
|
+
EmptyComponent = userProps.emptyComponent,
|
|
52
|
+
props = _objectWithoutProperties(userProps, _excluded);
|
|
53
|
+
var HeaderComponent = headerComponent === false ? null : headerComponent !== null && headerComponent !== void 0 ? headerComponent : DefaultHeader;
|
|
54
|
+
var isEmpty = suggestions.length === 0;
|
|
55
|
+
if (isEmpty && !isLoading) {
|
|
56
|
+
return createElement("div", _extends({}, props, {
|
|
57
|
+
className: cx('ais-FilterSuggestions', classNames.root, 'ais-FilterSuggestions--empty', classNames.emptyRoot, props.className)
|
|
58
|
+
}), EmptyComponent && createElement(EmptyComponent, {
|
|
59
|
+
classNames: {
|
|
60
|
+
emptyRoot: classNames.emptyRoot
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
var headerClassNames = {
|
|
65
|
+
header: classNames.header,
|
|
66
|
+
headerIcon: classNames.headerIcon,
|
|
67
|
+
headerTitle: classNames.headerTitle
|
|
68
|
+
};
|
|
69
|
+
var itemClassNames = {
|
|
70
|
+
item: classNames.item,
|
|
71
|
+
button: classNames.button,
|
|
72
|
+
label: classNames.label,
|
|
73
|
+
count: classNames.count
|
|
74
|
+
};
|
|
75
|
+
return createElement("div", _extends({}, props, {
|
|
76
|
+
className: cx('ais-FilterSuggestions', classNames.root, isLoading && cx('ais-FilterSuggestions--loading', classNames.loadingRoot), props.className)
|
|
77
|
+
}), HeaderComponent && createElement(HeaderComponent, {
|
|
78
|
+
classNames: headerClassNames
|
|
79
|
+
}), isLoading ? createElement("div", {
|
|
80
|
+
className: cx('ais-FilterSuggestions-skeleton', classNames.skeleton)
|
|
81
|
+
}, _toConsumableArray(new Array(skeletonCount)).map(function (_, i) {
|
|
82
|
+
return createElement("div", {
|
|
83
|
+
key: i,
|
|
84
|
+
className: cx('ais-FilterSuggestions-skeletonItem', classNames.skeletonItem)
|
|
85
|
+
});
|
|
86
|
+
})) : createElement("ul", {
|
|
87
|
+
className: cx('ais-FilterSuggestions-list', classNames.list)
|
|
88
|
+
}, suggestions.map(function (suggestion) {
|
|
89
|
+
return createElement("li", {
|
|
90
|
+
key: "".concat(suggestion.attribute, "-").concat(suggestion.value),
|
|
91
|
+
className: cx('ais-FilterSuggestions-item', classNames.item)
|
|
92
|
+
}, createElement(ItemComponent, {
|
|
93
|
+
suggestion: suggestion,
|
|
94
|
+
classNames: itemClassNames,
|
|
95
|
+
refine: function refine() {
|
|
96
|
+
return _refine(suggestion.attribute, suggestion.value);
|
|
97
|
+
}
|
|
98
|
+
}));
|
|
99
|
+
})));
|
|
100
|
+
};
|
|
101
|
+
}
|
|
@@ -37,4 +37,4 @@ export type AutocompleteIndexClassNames = {
|
|
|
37
37
|
*/
|
|
38
38
|
item: string | string[];
|
|
39
39
|
};
|
|
40
|
-
export declare function createAutocompleteIndexComponent({ createElement }: Renderer): (userProps: AutocompleteIndexProps) => JSX.Element;
|
|
40
|
+
export declare function createAutocompleteIndexComponent({ createElement }: Renderer): (userProps: AutocompleteIndexProps) => JSX.Element | null;
|
|
@@ -11,6 +11,9 @@ export function createAutocompleteIndexComponent(_ref) {
|
|
|
11
11
|
getItemProps = userProps.getItemProps,
|
|
12
12
|
_userProps$classNames = userProps.classNames,
|
|
13
13
|
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames;
|
|
14
|
+
if (items.length === 0) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
14
17
|
return createElement("div", {
|
|
15
18
|
className: cx('ais-AutocompleteIndex', classNames.root)
|
|
16
19
|
}, HeaderComponent && createElement("div", {
|