instantsearch-ui-components 0.11.2 → 0.13.0
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/Button.js +29 -0
- package/dist/cjs/components/Carousel.js +26 -6
- package/dist/cjs/components/autocomplete/Autocomplete.js +23 -0
- package/dist/cjs/components/autocomplete/AutocompleteIndex.js +44 -0
- package/dist/cjs/components/autocomplete/AutocompletePanel.js +25 -0
- package/dist/cjs/components/autocomplete/AutocompleteSearch.js +70 -0
- package/dist/cjs/components/autocomplete/AutocompleteSuggestion.js +20 -0
- package/dist/cjs/components/autocomplete/createAutocompletePropGetters.js +222 -0
- package/dist/cjs/components/autocomplete/icons.js +56 -0
- package/dist/cjs/components/autocomplete/index.js +71 -0
- package/dist/cjs/components/chat/Chat.js +79 -0
- package/dist/cjs/components/chat/ChatHeader.js +89 -0
- package/dist/cjs/components/chat/ChatMessage.js +138 -0
- package/dist/cjs/components/chat/ChatMessageError.js +57 -0
- package/dist/cjs/components/chat/ChatMessageLoader.js +47 -0
- package/dist/cjs/components/chat/ChatMessages.js +192 -0
- package/dist/cjs/components/chat/ChatPrompt.js +179 -0
- package/dist/cjs/components/chat/ChatToggleButton.js +46 -0
- package/dist/cjs/components/chat/icons.js +375 -0
- package/dist/cjs/components/chat/types.js +1 -0
- package/dist/cjs/components/index.js +132 -0
- package/dist/cjs/lib/index.js +22 -0
- package/dist/cjs/lib/stickToBottom.js +481 -0
- package/dist/cjs/lib/utils/find.js +15 -0
- package/dist/cjs/lib/utils/index.js +27 -0
- package/dist/cjs/lib/utils/startsWith.js +9 -0
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/warn.js +40 -0
- package/dist/es/components/Button.d.ts +38 -0
- package/dist/es/components/Button.js +22 -0
- package/dist/es/components/Carousel.d.ts +11 -0
- package/dist/es/components/Carousel.js +26 -6
- package/dist/es/components/autocomplete/Autocomplete.d.ts +13 -0
- package/dist/es/components/autocomplete/Autocomplete.js +16 -0
- package/dist/es/components/autocomplete/AutocompleteIndex.d.ts +38 -0
- package/dist/es/components/autocomplete/AutocompleteIndex.js +37 -0
- package/dist/es/components/autocomplete/AutocompletePanel.d.ts +17 -0
- package/dist/es/components/autocomplete/AutocompletePanel.js +18 -0
- package/dist/es/components/autocomplete/AutocompleteSearch.d.ts +8 -0
- package/dist/es/components/autocomplete/AutocompleteSearch.js +63 -0
- package/dist/es/components/autocomplete/AutocompleteSuggestion.d.ts +16 -0
- package/dist/es/components/autocomplete/AutocompleteSuggestion.js +14 -0
- package/dist/es/components/autocomplete/createAutocompletePropGetters.d.ts +49 -0
- package/dist/es/components/autocomplete/createAutocompletePropGetters.js +215 -0
- package/dist/es/components/autocomplete/icons.d.ts +7 -0
- package/dist/es/components/autocomplete/icons.js +48 -0
- package/dist/es/components/autocomplete/index.d.ts +6 -0
- package/dist/es/components/autocomplete/index.js +6 -0
- package/dist/es/components/chat/Chat.d.ts +42 -0
- package/dist/es/components/chat/Chat.js +72 -0
- package/dist/es/components/chat/ChatHeader.d.ts +99 -0
- package/dist/es/components/chat/ChatHeader.js +82 -0
- package/dist/es/components/chat/ChatMessage.d.ts +124 -0
- package/dist/es/components/chat/ChatMessage.js +131 -0
- package/dist/es/components/chat/ChatMessageError.d.ts +27 -0
- package/dist/es/components/chat/ChatMessageError.js +50 -0
- package/dist/es/components/chat/ChatMessageLoader.d.ts +15 -0
- package/dist/es/components/chat/ChatMessageLoader.js +40 -0
- package/dist/es/components/chat/ChatMessages.d.ts +139 -0
- package/dist/es/components/chat/ChatMessages.js +185 -0
- package/dist/es/components/chat/ChatPrompt.d.ts +119 -0
- package/dist/es/components/chat/ChatPrompt.js +172 -0
- package/dist/es/components/chat/ChatToggleButton.d.ts +29 -0
- package/dist/es/components/chat/ChatToggleButton.js +39 -0
- package/dist/es/components/chat/icons.d.ts +22 -0
- package/dist/es/components/chat/icons.js +355 -0
- package/dist/es/components/chat/types.d.ts +29 -0
- package/dist/es/components/chat/types.js +1 -0
- package/dist/es/components/index.d.ts +12 -0
- package/dist/es/components/index.js +12 -0
- package/dist/es/lib/index.d.ts +2 -0
- package/dist/es/lib/index.js +3 -1
- package/dist/es/lib/stickToBottom.d.ts +114 -0
- package/dist/es/lib/stickToBottom.js +474 -0
- package/dist/es/lib/utils/find.d.ts +1 -0
- package/dist/es/lib/utils/find.js +9 -0
- package/dist/es/lib/utils/index.d.ts +2 -0
- package/dist/es/lib/utils/index.js +2 -0
- package/dist/es/lib/utils/startsWith.d.ts +1 -0
- package/dist/es/lib/utils/startsWith.js +3 -0
- package/dist/es/types/Renderer.d.ts +1 -1
- package/dist/es/version.d.ts +1 -1
- package/dist/es/version.js +1 -1
- package/dist/es/warn.d.ts +10 -0
- package/dist/es/warn.js +33 -0
- package/package.json +7 -3
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
export function createAutocompletePropGetters(_ref) {
|
|
4
|
+
var useEffect = _ref.useEffect,
|
|
5
|
+
useId = _ref.useId,
|
|
6
|
+
useMemo = _ref.useMemo,
|
|
7
|
+
useRef = _ref.useRef,
|
|
8
|
+
useState = _ref.useState;
|
|
9
|
+
return function usePropGetters(_ref2) {
|
|
10
|
+
var indices = _ref2.indices,
|
|
11
|
+
indicesConfig = _ref2.indicesConfig,
|
|
12
|
+
onRefine = _ref2.onRefine,
|
|
13
|
+
globalOnSelect = _ref2.onSelect;
|
|
14
|
+
var getElementId = createGetElementId(useId());
|
|
15
|
+
var rootRef = useRef(null);
|
|
16
|
+
var _useState = useState(false),
|
|
17
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
18
|
+
isOpen = _useState2[0],
|
|
19
|
+
setIsOpen = _useState2[1];
|
|
20
|
+
var _useState3 = useState(undefined),
|
|
21
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
22
|
+
activeDescendant = _useState4[0],
|
|
23
|
+
setActiveDescendant = _useState4[1];
|
|
24
|
+
var _useMemo = useMemo(function () {
|
|
25
|
+
return buildItems({
|
|
26
|
+
indices: indices,
|
|
27
|
+
indicesConfig: indicesConfig,
|
|
28
|
+
getElementId: getElementId
|
|
29
|
+
});
|
|
30
|
+
}, [indices, indicesConfig, getElementId]),
|
|
31
|
+
items = _useMemo.items,
|
|
32
|
+
itemsIds = _useMemo.itemsIds;
|
|
33
|
+
useEffect(function () {
|
|
34
|
+
var onBodyClick = function onBodyClick(event) {
|
|
35
|
+
var _unwrapRef;
|
|
36
|
+
if ((_unwrapRef = unwrapRef(rootRef)) !== null && _unwrapRef !== void 0 && _unwrapRef.contains(event.target)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setIsOpen(false);
|
|
40
|
+
};
|
|
41
|
+
document.body.addEventListener('click', onBodyClick);
|
|
42
|
+
return function () {
|
|
43
|
+
document.body.removeEventListener('click', onBodyClick);
|
|
44
|
+
};
|
|
45
|
+
}, [rootRef]);
|
|
46
|
+
var getNextActiveDescendent = function getNextActiveDescendent(key) {
|
|
47
|
+
switch (key) {
|
|
48
|
+
case 'ArrowLeft':
|
|
49
|
+
case 'ArrowUp':
|
|
50
|
+
{
|
|
51
|
+
var prevIndex = itemsIds.indexOf(activeDescendant || '') - 1;
|
|
52
|
+
return itemsIds[prevIndex] || itemsIds[itemsIds.length - 1];
|
|
53
|
+
}
|
|
54
|
+
case 'ArrowRight':
|
|
55
|
+
case 'ArrowDown':
|
|
56
|
+
{
|
|
57
|
+
var nextIndex = itemsIds.indexOf(activeDescendant || '') + 1;
|
|
58
|
+
return itemsIds[nextIndex] || itemsIds[0];
|
|
59
|
+
}
|
|
60
|
+
default:
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var submit = function submit() {
|
|
65
|
+
var actualActiveDescendant = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeDescendant;
|
|
66
|
+
setIsOpen(false);
|
|
67
|
+
if (actualActiveDescendant && items.has(actualActiveDescendant)) {
|
|
68
|
+
var _getQuery;
|
|
69
|
+
var _ref3 = items.get(actualActiveDescendant),
|
|
70
|
+
_item = _ref3.item,
|
|
71
|
+
_ref3$config = _ref3.config,
|
|
72
|
+
indexOnSelect = _ref3$config.onSelect,
|
|
73
|
+
getQuery = _ref3$config.getQuery,
|
|
74
|
+
getURL = _ref3$config.getURL;
|
|
75
|
+
var actualOnSelect = indexOnSelect !== null && indexOnSelect !== void 0 ? indexOnSelect : globalOnSelect;
|
|
76
|
+
actualOnSelect({
|
|
77
|
+
item: _item,
|
|
78
|
+
query: (_getQuery = getQuery === null || getQuery === void 0 ? void 0 : getQuery(_item)) !== null && _getQuery !== void 0 ? _getQuery : '',
|
|
79
|
+
url: getURL === null || getURL === void 0 ? void 0 : getURL(_item),
|
|
80
|
+
setQuery: function setQuery(query) {
|
|
81
|
+
return onRefine(query);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
setActiveDescendant(undefined);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
return {
|
|
88
|
+
getInputProps: function getInputProps() {
|
|
89
|
+
return {
|
|
90
|
+
id: getElementId('input'),
|
|
91
|
+
role: 'combobox',
|
|
92
|
+
'aria-autocomplete': 'list',
|
|
93
|
+
'aria-expanded': isOpen,
|
|
94
|
+
'aria-haspopup': 'grid',
|
|
95
|
+
'aria-controls': getElementId('panel'),
|
|
96
|
+
'aria-activedescendant': activeDescendant,
|
|
97
|
+
onFocus: function onFocus() {
|
|
98
|
+
return setIsOpen(true);
|
|
99
|
+
},
|
|
100
|
+
onKeyDown: function onKeyDown(event) {
|
|
101
|
+
if (event.key === 'Escape') {
|
|
102
|
+
setActiveDescendant(undefined);
|
|
103
|
+
setIsOpen(false);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
switch (event.key) {
|
|
107
|
+
case 'ArrowLeft':
|
|
108
|
+
case 'ArrowUp':
|
|
109
|
+
case 'ArrowRight':
|
|
110
|
+
case 'ArrowDown':
|
|
111
|
+
{
|
|
112
|
+
var _document$getElementB;
|
|
113
|
+
var nextActiveDescendent = getNextActiveDescendent(event.key);
|
|
114
|
+
setActiveDescendant(nextActiveDescendent);
|
|
115
|
+
(_document$getElementB = document.getElementById(nextActiveDescendent)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.scrollIntoView(false);
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case 'Enter':
|
|
120
|
+
{
|
|
121
|
+
submit();
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case 'Tab':
|
|
125
|
+
setIsOpen(false);
|
|
126
|
+
break;
|
|
127
|
+
default:
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
onKeyUp: function onKeyUp(event) {
|
|
132
|
+
switch (event.key) {
|
|
133
|
+
case 'ArrowLeft':
|
|
134
|
+
case 'ArrowUp':
|
|
135
|
+
case 'ArrowRight':
|
|
136
|
+
case 'ArrowDown':
|
|
137
|
+
case 'Escape':
|
|
138
|
+
case 'Return':
|
|
139
|
+
event.preventDefault();
|
|
140
|
+
return;
|
|
141
|
+
default:
|
|
142
|
+
setActiveDescendant(undefined);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
},
|
|
148
|
+
getItemProps: function getItemProps(item, index) {
|
|
149
|
+
var id = getElementId('item', item.__indexName, index);
|
|
150
|
+
return {
|
|
151
|
+
id: id,
|
|
152
|
+
role: 'row',
|
|
153
|
+
'aria-selected': id === activeDescendant,
|
|
154
|
+
onSelect: function onSelect() {
|
|
155
|
+
return submit(id);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
getPanelProps: function getPanelProps() {
|
|
160
|
+
return {
|
|
161
|
+
hidden: !isOpen,
|
|
162
|
+
id: getElementId('panel'),
|
|
163
|
+
role: 'grid',
|
|
164
|
+
'aria-labelledby': getElementId('input')
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
getRootProps: function getRootProps() {
|
|
168
|
+
return {
|
|
169
|
+
ref: rootRef
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function buildItems(_ref4) {
|
|
176
|
+
var indices = _ref4.indices,
|
|
177
|
+
indicesConfig = _ref4.indicesConfig,
|
|
178
|
+
getElementId = _ref4.getElementId;
|
|
179
|
+
var itemsIds = [];
|
|
180
|
+
var items = new Map();
|
|
181
|
+
for (var i = 0; i < indicesConfig.length; i++) {
|
|
182
|
+
var _indices$i;
|
|
183
|
+
var config = indicesConfig[i];
|
|
184
|
+
var hits = ((_indices$i = indices[i]) === null || _indices$i === void 0 ? void 0 : _indices$i.hits) || [];
|
|
185
|
+
for (var position = 0; position < hits.length; position++) {
|
|
186
|
+
var itemId = getElementId('item', config.indexName, position);
|
|
187
|
+
items.set(itemId, {
|
|
188
|
+
item: hits[position],
|
|
189
|
+
config: config
|
|
190
|
+
});
|
|
191
|
+
itemsIds.push(itemId);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
items: items,
|
|
196
|
+
itemsIds: itemsIds
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function createGetElementId(autocompleteId) {
|
|
200
|
+
return function getElementId() {
|
|
201
|
+
var prefix = 'autocomplete';
|
|
202
|
+
for (var _len = arguments.length, suffixes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
203
|
+
suffixes[_key] = arguments[_key];
|
|
204
|
+
}
|
|
205
|
+
return "".concat(prefix).concat(autocompleteId).concat(suffixes.join(':'));
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Returns the framework-agnostic value of a ref.
|
|
211
|
+
*/
|
|
212
|
+
function unwrapRef(ref) {
|
|
213
|
+
return ref.current && _typeof(ref.current) === 'object' && 'base' in ref.current ? ref.current.base // Preact
|
|
214
|
+
: ref.current; // React
|
|
215
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** @jsx createElement */
|
|
2
|
+
import type { Renderer } from '../../types';
|
|
3
|
+
type IconProps = Pick<Renderer, 'createElement'>;
|
|
4
|
+
export declare function AutocompleteSubmitIcon({ createElement }: IconProps): JSX.Element;
|
|
5
|
+
export declare function AutocompleteLoadingIcon({ createElement }: IconProps): JSX.Element;
|
|
6
|
+
export declare function AutocompleteClearIcon({ createElement }: IconProps): JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function AutocompleteSubmitIcon(_ref) {
|
|
2
|
+
var createElement = _ref.createElement;
|
|
3
|
+
return createElement("svg", {
|
|
4
|
+
className: "ais-AutocompleteSubmitIcon",
|
|
5
|
+
viewBox: "0 0 24 24",
|
|
6
|
+
width: "20",
|
|
7
|
+
height: "20",
|
|
8
|
+
fill: "currentColor"
|
|
9
|
+
}, createElement("path", {
|
|
10
|
+
d: "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
export function AutocompleteLoadingIcon(_ref2) {
|
|
14
|
+
var createElement = _ref2.createElement;
|
|
15
|
+
return createElement("svg", {
|
|
16
|
+
className: "ais-AutocompleteLoadingIcon",
|
|
17
|
+
viewBox: "0 0 100 100",
|
|
18
|
+
width: "20",
|
|
19
|
+
height: "20"
|
|
20
|
+
}, createElement("circle", {
|
|
21
|
+
cx: "50",
|
|
22
|
+
cy: "50",
|
|
23
|
+
fill: "none",
|
|
24
|
+
r: "35",
|
|
25
|
+
stroke: "currentColor",
|
|
26
|
+
strokeDasharray: "164.93361431346415 56.97787143782138",
|
|
27
|
+
strokeWidth: "6"
|
|
28
|
+
}, createElement("animateTransform", {
|
|
29
|
+
attributeName: "transform",
|
|
30
|
+
type: "rotate",
|
|
31
|
+
repeatCount: "indefinite",
|
|
32
|
+
dur: "1s",
|
|
33
|
+
values: "0 50 50;90 50 50;180 50 50;360 50 50",
|
|
34
|
+
keyTimes: "0;0.40;0.65;1"
|
|
35
|
+
})));
|
|
36
|
+
}
|
|
37
|
+
export function AutocompleteClearIcon(_ref3) {
|
|
38
|
+
var createElement = _ref3.createElement;
|
|
39
|
+
return createElement("svg", {
|
|
40
|
+
className: "ais-AutocompleteClearIcon",
|
|
41
|
+
viewBox: "0 0 24 24",
|
|
42
|
+
width: "18",
|
|
43
|
+
height: "18",
|
|
44
|
+
fill: "currentColor"
|
|
45
|
+
}, createElement("path", {
|
|
46
|
+
d: "M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Renderer, ComponentProps } from '../../types';
|
|
2
|
+
import type { ChatHeaderProps, ChatHeaderOwnProps } from './ChatHeader';
|
|
3
|
+
import type { ChatMessagesProps } from './ChatMessages';
|
|
4
|
+
import type { ChatPromptProps, ChatPromptOwnProps } from './ChatPrompt';
|
|
5
|
+
import type { ChatToggleButtonOwnProps, ChatToggleButtonProps } from './ChatToggleButton';
|
|
6
|
+
export type ChatClassNames = {
|
|
7
|
+
root?: string | string[];
|
|
8
|
+
container?: string | string[];
|
|
9
|
+
header?: ChatHeaderProps['classNames'];
|
|
10
|
+
messages?: ChatMessagesProps['classNames'];
|
|
11
|
+
prompt?: ChatPromptProps['classNames'];
|
|
12
|
+
toggleButton?: ChatToggleButtonProps['classNames'];
|
|
13
|
+
};
|
|
14
|
+
export type ChatProps = Omit<ComponentProps<'div'>, 'onError' | 'title'> & {
|
|
15
|
+
open: boolean;
|
|
16
|
+
maximized?: boolean;
|
|
17
|
+
headerProps: ChatHeaderProps;
|
|
18
|
+
toggleButtonProps: ChatToggleButtonProps;
|
|
19
|
+
messagesProps: ChatMessagesProps;
|
|
20
|
+
promptProps: ChatPromptProps;
|
|
21
|
+
/**
|
|
22
|
+
* Optional class names for elements
|
|
23
|
+
*/
|
|
24
|
+
classNames?: Partial<ChatClassNames>;
|
|
25
|
+
/**
|
|
26
|
+
* Optional title for the chat
|
|
27
|
+
*/
|
|
28
|
+
title?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Optional header component for the chat
|
|
31
|
+
*/
|
|
32
|
+
headerComponent?: (props: ChatHeaderOwnProps) => JSX.Element;
|
|
33
|
+
/**
|
|
34
|
+
* Optional prompt component for the chat
|
|
35
|
+
*/
|
|
36
|
+
promptComponent?: (props: ChatPromptOwnProps) => JSX.Element;
|
|
37
|
+
/**
|
|
38
|
+
* Optional toggle button component for the chat
|
|
39
|
+
*/
|
|
40
|
+
toggleButtonComponent?: (props: ChatToggleButtonOwnProps) => JSX.Element;
|
|
41
|
+
};
|
|
42
|
+
export declare function createChatComponent({ createElement, Fragment }: Renderer): ({ open, maximized, headerProps, toggleButtonProps, messagesProps, promptProps, headerComponent: HeaderComponent, promptComponent: PromptComponent, toggleButtonComponent: ToggleButtonComponent, classNames, className, ...props }: ChatProps) => JSX.Element;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["open", "maximized", "headerProps", "toggleButtonProps", "messagesProps", "promptProps", "headerComponent", "promptComponent", "toggleButtonComponent", "classNames", "className"];
|
|
5
|
+
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; }
|
|
6
|
+
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) { _defineProperty(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; }
|
|
7
|
+
import { cx } from "../../lib/index.js";
|
|
8
|
+
import { createChatHeaderComponent } from "./ChatHeader.js";
|
|
9
|
+
import { createChatMessagesComponent } from "./ChatMessages.js";
|
|
10
|
+
import { createChatPromptComponent } from "./ChatPrompt.js";
|
|
11
|
+
import { createChatToggleButtonComponent } from "./ChatToggleButton.js";
|
|
12
|
+
export function createChatComponent(_ref) {
|
|
13
|
+
var createElement = _ref.createElement,
|
|
14
|
+
Fragment = _ref.Fragment;
|
|
15
|
+
var ChatToggleButton = createChatToggleButtonComponent({
|
|
16
|
+
createElement: createElement,
|
|
17
|
+
Fragment: Fragment
|
|
18
|
+
});
|
|
19
|
+
var ChatHeader = createChatHeaderComponent({
|
|
20
|
+
createElement: createElement,
|
|
21
|
+
Fragment: Fragment
|
|
22
|
+
});
|
|
23
|
+
var ChatMessages = createChatMessagesComponent({
|
|
24
|
+
createElement: createElement,
|
|
25
|
+
Fragment: Fragment
|
|
26
|
+
});
|
|
27
|
+
var ChatPrompt = createChatPromptComponent({
|
|
28
|
+
createElement: createElement,
|
|
29
|
+
Fragment: Fragment
|
|
30
|
+
});
|
|
31
|
+
return function Chat(_ref2) {
|
|
32
|
+
var open = _ref2.open,
|
|
33
|
+
_ref2$maximized = _ref2.maximized,
|
|
34
|
+
maximized = _ref2$maximized === void 0 ? false : _ref2$maximized,
|
|
35
|
+
headerProps = _ref2.headerProps,
|
|
36
|
+
toggleButtonProps = _ref2.toggleButtonProps,
|
|
37
|
+
messagesProps = _ref2.messagesProps,
|
|
38
|
+
_ref2$promptProps = _ref2.promptProps,
|
|
39
|
+
promptProps = _ref2$promptProps === void 0 ? {} : _ref2$promptProps,
|
|
40
|
+
HeaderComponent = _ref2.headerComponent,
|
|
41
|
+
PromptComponent = _ref2.promptComponent,
|
|
42
|
+
ToggleButtonComponent = _ref2.toggleButtonComponent,
|
|
43
|
+
_ref2$classNames = _ref2.classNames,
|
|
44
|
+
classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames,
|
|
45
|
+
className = _ref2.className,
|
|
46
|
+
props = _objectWithoutProperties(_ref2, _excluded);
|
|
47
|
+
return createElement("div", _extends({}, props, {
|
|
48
|
+
className: cx('ais-Chat', maximized && 'ais-Chat--maximized', classNames.root, className)
|
|
49
|
+
}), createElement("div", {
|
|
50
|
+
className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
|
|
51
|
+
}, createElement(HeaderComponent || ChatHeader, _objectSpread(_objectSpread({}, headerProps), {}, {
|
|
52
|
+
classNames: classNames.header,
|
|
53
|
+
maximized: maximized
|
|
54
|
+
})), createElement(ChatMessages, _extends({}, messagesProps, {
|
|
55
|
+
classNames: classNames.messages
|
|
56
|
+
})), createElement(PromptComponent || ChatPrompt, _objectSpread(_objectSpread({}, promptProps), {}, {
|
|
57
|
+
classNames: classNames.prompt
|
|
58
|
+
}))), createElement("div", {
|
|
59
|
+
className: "ais-Chat-toggleButtonWrapper"
|
|
60
|
+
}, createElement(ToggleButtonComponent || ChatToggleButton, _objectSpread(_objectSpread({}, toggleButtonProps), {}, {
|
|
61
|
+
classNames: classNames.toggleButton,
|
|
62
|
+
onClick: function onClick() {
|
|
63
|
+
var _toggleButtonProps$on;
|
|
64
|
+
(_toggleButtonProps$on = toggleButtonProps.onClick) === null || _toggleButtonProps$on === void 0 ? void 0 : _toggleButtonProps$on.call(toggleButtonProps);
|
|
65
|
+
if (!open) {
|
|
66
|
+
var _promptProps$promptRe, _promptProps$promptRe2;
|
|
67
|
+
(_promptProps$promptRe = promptProps.promptRef) === null || _promptProps$promptRe === void 0 ? void 0 : (_promptProps$promptRe2 = _promptProps$promptRe.current) === null || _promptProps$promptRe2 === void 0 ? void 0 : _promptProps$promptRe2.focus();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}))));
|
|
71
|
+
};
|
|
72
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { Renderer, ComponentProps } from '../../types';
|
|
2
|
+
export type ChatHeaderTranslations = {
|
|
3
|
+
/**
|
|
4
|
+
* The title to display in the header
|
|
5
|
+
*/
|
|
6
|
+
title: string;
|
|
7
|
+
/**
|
|
8
|
+
* Accessible label for the minimize button
|
|
9
|
+
*/
|
|
10
|
+
minimizeLabel: string;
|
|
11
|
+
/**
|
|
12
|
+
* Accessible label for the maximize button
|
|
13
|
+
*/
|
|
14
|
+
maximizeLabel: string;
|
|
15
|
+
/**
|
|
16
|
+
* Accessible label for the close button
|
|
17
|
+
*/
|
|
18
|
+
closeLabel: string;
|
|
19
|
+
/**
|
|
20
|
+
* Text for the clear button
|
|
21
|
+
*/
|
|
22
|
+
clearLabel: string;
|
|
23
|
+
};
|
|
24
|
+
export type ChatHeaderClassNames = {
|
|
25
|
+
/**
|
|
26
|
+
* Class names to apply to the root element
|
|
27
|
+
*/
|
|
28
|
+
root?: string | string[];
|
|
29
|
+
/**
|
|
30
|
+
* Class names to apply to the title element
|
|
31
|
+
*/
|
|
32
|
+
title?: string | string[];
|
|
33
|
+
/**
|
|
34
|
+
* Class names to apply to the title icon element
|
|
35
|
+
*/
|
|
36
|
+
titleIcon?: string | string[];
|
|
37
|
+
/**
|
|
38
|
+
* Class names to apply to the maximize button element
|
|
39
|
+
*/
|
|
40
|
+
maximize?: string | string[];
|
|
41
|
+
/**
|
|
42
|
+
* Class names to apply to the close button element
|
|
43
|
+
*/
|
|
44
|
+
close?: string | string[];
|
|
45
|
+
/**
|
|
46
|
+
* Class names to apply to the clear button element
|
|
47
|
+
*/
|
|
48
|
+
clear?: string | string[];
|
|
49
|
+
};
|
|
50
|
+
export type ChatHeaderOwnProps = {
|
|
51
|
+
/**
|
|
52
|
+
* Whether the chat is maximized
|
|
53
|
+
*/
|
|
54
|
+
maximized?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Callback when the maximize button is clicked
|
|
57
|
+
*/
|
|
58
|
+
onToggleMaximize?: () => void;
|
|
59
|
+
/**
|
|
60
|
+
* Callback when the close button is clicked
|
|
61
|
+
*/
|
|
62
|
+
onClose: () => void;
|
|
63
|
+
/**
|
|
64
|
+
* Callback when the clear button is clicked
|
|
65
|
+
*/
|
|
66
|
+
onClear?: () => void;
|
|
67
|
+
/**
|
|
68
|
+
* Whether the clear button is enabled
|
|
69
|
+
*/
|
|
70
|
+
canClear?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Optional close icon component
|
|
73
|
+
*/
|
|
74
|
+
closeIconComponent?: () => JSX.Element;
|
|
75
|
+
/**
|
|
76
|
+
* Optional minimize icon component
|
|
77
|
+
*/
|
|
78
|
+
minimizeIconComponent?: () => JSX.Element;
|
|
79
|
+
/**
|
|
80
|
+
* Optional maximize icon component
|
|
81
|
+
*/
|
|
82
|
+
maximizeIconComponent?: (props: {
|
|
83
|
+
maximized: boolean;
|
|
84
|
+
}) => JSX.Element;
|
|
85
|
+
/**
|
|
86
|
+
* Optional title icon component (defaults to sparkles)
|
|
87
|
+
*/
|
|
88
|
+
titleIconComponent?: () => JSX.Element;
|
|
89
|
+
/**
|
|
90
|
+
* Optional class names for elements
|
|
91
|
+
*/
|
|
92
|
+
classNames?: Partial<ChatHeaderClassNames>;
|
|
93
|
+
/**
|
|
94
|
+
* Optional translations
|
|
95
|
+
*/
|
|
96
|
+
translations?: Partial<ChatHeaderTranslations>;
|
|
97
|
+
};
|
|
98
|
+
export type ChatHeaderProps = ComponentProps<'div'> & ChatHeaderOwnProps;
|
|
99
|
+
export declare function createChatHeaderComponent({ createElement }: Renderer): ({ maximized, onToggleMaximize, onClose, onClear, canClear, closeIconComponent: CloseIconComponent, minimizeIconComponent: MinimizeIconComponent, maximizeIconComponent: MaximizeIconComponent, titleIconComponent: TitleIconComponent, classNames, translations: userTranslations, ...props }: ChatHeaderProps) => JSX.Element;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["maximized", "onToggleMaximize", "onClose", "onClear", "canClear", "closeIconComponent", "minimizeIconComponent", "maximizeIconComponent", "titleIconComponent", "classNames", "translations"];
|
|
5
|
+
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; }
|
|
6
|
+
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) { _defineProperty(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; }
|
|
7
|
+
import { cx } from "../../lib/index.js";
|
|
8
|
+
import { createButtonComponent } from "../Button.js";
|
|
9
|
+
import { SparklesIconComponent, MaximizeIconComponent as MaximizeIconComponentDefault, MinimizeIconComponent as MinimizeIconComponentDefault, CloseIconComponent as CloseIconComponentDefault } from "./icons.js";
|
|
10
|
+
export function createChatHeaderComponent(_ref) {
|
|
11
|
+
var createElement = _ref.createElement;
|
|
12
|
+
var Button = createButtonComponent({
|
|
13
|
+
createElement: createElement
|
|
14
|
+
});
|
|
15
|
+
return function ChatHeader(_ref2) {
|
|
16
|
+
var _ref2$maximized = _ref2.maximized,
|
|
17
|
+
maximized = _ref2$maximized === void 0 ? false : _ref2$maximized,
|
|
18
|
+
onToggleMaximize = _ref2.onToggleMaximize,
|
|
19
|
+
onClose = _ref2.onClose,
|
|
20
|
+
onClear = _ref2.onClear,
|
|
21
|
+
_ref2$canClear = _ref2.canClear,
|
|
22
|
+
canClear = _ref2$canClear === void 0 ? false : _ref2$canClear,
|
|
23
|
+
CloseIconComponent = _ref2.closeIconComponent,
|
|
24
|
+
MinimizeIconComponent = _ref2.minimizeIconComponent,
|
|
25
|
+
MaximizeIconComponent = _ref2.maximizeIconComponent,
|
|
26
|
+
TitleIconComponent = _ref2.titleIconComponent,
|
|
27
|
+
_ref2$classNames = _ref2.classNames,
|
|
28
|
+
classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames,
|
|
29
|
+
userTranslations = _ref2.translations,
|
|
30
|
+
props = _objectWithoutProperties(_ref2, _excluded);
|
|
31
|
+
var translations = _objectSpread({
|
|
32
|
+
title: 'Chat',
|
|
33
|
+
minimizeLabel: 'Minimize chat',
|
|
34
|
+
maximizeLabel: 'Maximize chat',
|
|
35
|
+
closeLabel: 'Close chat',
|
|
36
|
+
clearLabel: 'Clear'
|
|
37
|
+
}, userTranslations);
|
|
38
|
+
var defaultMaximizeIcon = maximized ? createElement(MinimizeIconComponentDefault, {
|
|
39
|
+
createElement: createElement
|
|
40
|
+
}) : createElement(MaximizeIconComponentDefault, {
|
|
41
|
+
createElement: createElement
|
|
42
|
+
});
|
|
43
|
+
return createElement("div", _extends({
|
|
44
|
+
className: cx('ais-ChatHeader', classNames.root, props.className)
|
|
45
|
+
}, props), createElement("span", {
|
|
46
|
+
className: cx('ais-ChatHeader-title', classNames.title)
|
|
47
|
+
}, createElement("span", {
|
|
48
|
+
className: cx('ais-ChatHeader-titleIcon', classNames.titleIcon)
|
|
49
|
+
}, TitleIconComponent ? createElement(TitleIconComponent, null) : createElement(SparklesIconComponent, {
|
|
50
|
+
createElement: createElement,
|
|
51
|
+
width: 20,
|
|
52
|
+
height: 20
|
|
53
|
+
})), translations.title), createElement("div", {
|
|
54
|
+
className: cx('ais-ChatHeader-actions')
|
|
55
|
+
}, onClear && createElement(Button, {
|
|
56
|
+
variant: "ghost",
|
|
57
|
+
size: "sm",
|
|
58
|
+
className: cx('ais-ChatHeader-clear', classNames.clear),
|
|
59
|
+
onClick: onClear,
|
|
60
|
+
disabled: !canClear
|
|
61
|
+
}, translations.clearLabel), createElement(Button, {
|
|
62
|
+
variant: "ghost",
|
|
63
|
+
size: "sm",
|
|
64
|
+
iconOnly: true,
|
|
65
|
+
className: cx('ais-ChatHeader-maximize', classNames.maximize),
|
|
66
|
+
onClick: onToggleMaximize,
|
|
67
|
+
"aria-label": maximized ? translations.minimizeLabel : translations.maximizeLabel
|
|
68
|
+
}, MaximizeIconComponent ? createElement(MaximizeIconComponent, {
|
|
69
|
+
maximized: maximized
|
|
70
|
+
}) : defaultMaximizeIcon), createElement(Button, {
|
|
71
|
+
variant: "ghost",
|
|
72
|
+
size: "sm",
|
|
73
|
+
iconOnly: true,
|
|
74
|
+
className: cx('ais-ChatHeader-close', classNames.close),
|
|
75
|
+
onClick: onClose,
|
|
76
|
+
"aria-label": translations.closeLabel,
|
|
77
|
+
title: translations.closeLabel
|
|
78
|
+
}, CloseIconComponent ? createElement(CloseIconComponent, null) : createElement(CloseIconComponentDefault, {
|
|
79
|
+
createElement: createElement
|
|
80
|
+
}))));
|
|
81
|
+
};
|
|
82
|
+
}
|