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.
Files changed (86) hide show
  1. package/dist/cjs/components/Button.js +29 -0
  2. package/dist/cjs/components/Carousel.js +26 -6
  3. package/dist/cjs/components/autocomplete/Autocomplete.js +23 -0
  4. package/dist/cjs/components/autocomplete/AutocompleteIndex.js +44 -0
  5. package/dist/cjs/components/autocomplete/AutocompletePanel.js +25 -0
  6. package/dist/cjs/components/autocomplete/AutocompleteSearch.js +70 -0
  7. package/dist/cjs/components/autocomplete/AutocompleteSuggestion.js +20 -0
  8. package/dist/cjs/components/autocomplete/createAutocompletePropGetters.js +222 -0
  9. package/dist/cjs/components/autocomplete/icons.js +56 -0
  10. package/dist/cjs/components/autocomplete/index.js +71 -0
  11. package/dist/cjs/components/chat/Chat.js +79 -0
  12. package/dist/cjs/components/chat/ChatHeader.js +89 -0
  13. package/dist/cjs/components/chat/ChatMessage.js +138 -0
  14. package/dist/cjs/components/chat/ChatMessageError.js +57 -0
  15. package/dist/cjs/components/chat/ChatMessageLoader.js +47 -0
  16. package/dist/cjs/components/chat/ChatMessages.js +192 -0
  17. package/dist/cjs/components/chat/ChatPrompt.js +179 -0
  18. package/dist/cjs/components/chat/ChatToggleButton.js +46 -0
  19. package/dist/cjs/components/chat/icons.js +375 -0
  20. package/dist/cjs/components/chat/types.js +1 -0
  21. package/dist/cjs/components/index.js +132 -0
  22. package/dist/cjs/lib/index.js +22 -0
  23. package/dist/cjs/lib/stickToBottom.js +481 -0
  24. package/dist/cjs/lib/utils/find.js +15 -0
  25. package/dist/cjs/lib/utils/index.js +27 -0
  26. package/dist/cjs/lib/utils/startsWith.js +9 -0
  27. package/dist/cjs/version.js +1 -1
  28. package/dist/cjs/warn.js +40 -0
  29. package/dist/es/components/Button.d.ts +38 -0
  30. package/dist/es/components/Button.js +22 -0
  31. package/dist/es/components/Carousel.d.ts +11 -0
  32. package/dist/es/components/Carousel.js +26 -6
  33. package/dist/es/components/autocomplete/Autocomplete.d.ts +13 -0
  34. package/dist/es/components/autocomplete/Autocomplete.js +16 -0
  35. package/dist/es/components/autocomplete/AutocompleteIndex.d.ts +38 -0
  36. package/dist/es/components/autocomplete/AutocompleteIndex.js +37 -0
  37. package/dist/es/components/autocomplete/AutocompletePanel.d.ts +17 -0
  38. package/dist/es/components/autocomplete/AutocompletePanel.js +18 -0
  39. package/dist/es/components/autocomplete/AutocompleteSearch.d.ts +8 -0
  40. package/dist/es/components/autocomplete/AutocompleteSearch.js +63 -0
  41. package/dist/es/components/autocomplete/AutocompleteSuggestion.d.ts +16 -0
  42. package/dist/es/components/autocomplete/AutocompleteSuggestion.js +14 -0
  43. package/dist/es/components/autocomplete/createAutocompletePropGetters.d.ts +49 -0
  44. package/dist/es/components/autocomplete/createAutocompletePropGetters.js +215 -0
  45. package/dist/es/components/autocomplete/icons.d.ts +7 -0
  46. package/dist/es/components/autocomplete/icons.js +48 -0
  47. package/dist/es/components/autocomplete/index.d.ts +6 -0
  48. package/dist/es/components/autocomplete/index.js +6 -0
  49. package/dist/es/components/chat/Chat.d.ts +42 -0
  50. package/dist/es/components/chat/Chat.js +72 -0
  51. package/dist/es/components/chat/ChatHeader.d.ts +99 -0
  52. package/dist/es/components/chat/ChatHeader.js +82 -0
  53. package/dist/es/components/chat/ChatMessage.d.ts +124 -0
  54. package/dist/es/components/chat/ChatMessage.js +131 -0
  55. package/dist/es/components/chat/ChatMessageError.d.ts +27 -0
  56. package/dist/es/components/chat/ChatMessageError.js +50 -0
  57. package/dist/es/components/chat/ChatMessageLoader.d.ts +15 -0
  58. package/dist/es/components/chat/ChatMessageLoader.js +40 -0
  59. package/dist/es/components/chat/ChatMessages.d.ts +139 -0
  60. package/dist/es/components/chat/ChatMessages.js +185 -0
  61. package/dist/es/components/chat/ChatPrompt.d.ts +119 -0
  62. package/dist/es/components/chat/ChatPrompt.js +172 -0
  63. package/dist/es/components/chat/ChatToggleButton.d.ts +29 -0
  64. package/dist/es/components/chat/ChatToggleButton.js +39 -0
  65. package/dist/es/components/chat/icons.d.ts +22 -0
  66. package/dist/es/components/chat/icons.js +355 -0
  67. package/dist/es/components/chat/types.d.ts +29 -0
  68. package/dist/es/components/chat/types.js +1 -0
  69. package/dist/es/components/index.d.ts +12 -0
  70. package/dist/es/components/index.js +12 -0
  71. package/dist/es/lib/index.d.ts +2 -0
  72. package/dist/es/lib/index.js +3 -1
  73. package/dist/es/lib/stickToBottom.d.ts +114 -0
  74. package/dist/es/lib/stickToBottom.js +474 -0
  75. package/dist/es/lib/utils/find.d.ts +1 -0
  76. package/dist/es/lib/utils/find.js +9 -0
  77. package/dist/es/lib/utils/index.d.ts +2 -0
  78. package/dist/es/lib/utils/index.js +2 -0
  79. package/dist/es/lib/utils/startsWith.d.ts +1 -0
  80. package/dist/es/lib/utils/startsWith.js +3 -0
  81. package/dist/es/types/Renderer.d.ts +1 -1
  82. package/dist/es/version.d.ts +1 -1
  83. package/dist/es/version.js +1 -1
  84. package/dist/es/warn.d.ts +10 -0
  85. package/dist/es/warn.js +33 -0
  86. 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,6 @@
1
+ export * from './Autocomplete';
2
+ export * from './AutocompleteIndex';
3
+ export * from './AutocompletePanel';
4
+ export * from './AutocompleteSearch';
5
+ export * from './AutocompleteSuggestion';
6
+ export * from './createAutocompletePropGetters';
@@ -0,0 +1,6 @@
1
+ export * from "./Autocomplete.js";
2
+ export * from "./AutocompleteIndex.js";
3
+ export * from "./AutocompletePanel.js";
4
+ export * from "./AutocompleteSearch.js";
5
+ export * from "./AutocompleteSuggestion.js";
6
+ export * from "./createAutocompletePropGetters.js";
@@ -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
+ }