-
Notifications
You must be signed in to change notification settings - Fork 555
Expand file tree
/
Copy pathAutocompletePromptSuggestion.tsx
More file actions
83 lines (77 loc) · 2.08 KB
/
AutocompletePromptSuggestion.tsx
File metadata and controls
83 lines (77 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/** @jsx createElement */
import { cx } from '../../lib';
import { SparklesIcon } from '../chat/icons';
import type { ComponentChildren, Renderer } from '../../types';
export type AutocompletePromptSuggestionProps<
T = { prompt: string; label?: string } & Record<string, unknown>
> = {
item: T;
onSelect: () => void;
children?: ComponentChildren;
classNames?: Partial<AutocompletePromptSuggestionClassNames>;
};
export type AutocompletePromptSuggestionClassNames = {
/**
* Class names to apply to the root element.
*/
root: string | string[];
/**
* Class names to apply to the content element.
*/
content: string | string[];
/**
* Class names to apply to the icon element.
*/
icon: string | string[];
/**
* Class names to apply to the body element.
*/
body: string | string[];
};
export function createAutocompletePromptSuggestionComponent({
createElement,
}: Renderer) {
return function AutocompletePromptSuggestion(
userProps: AutocompletePromptSuggestionProps
) {
const { item, onSelect, children, classNames = {} } = userProps;
const label = item.label || item.prompt;
return (
<div
onClick={onSelect}
className={cx(
'ais-AutocompleteItemWrapper',
'ais-AutocompletePromptSuggestionWrapper',
classNames.root
)}
>
<div
className={cx(
'ais-AutocompleteItemContent',
'ais-AutocompletePromptSuggestionItemContent',
classNames.content
)}
>
<div
className={cx(
'ais-AutocompleteItemIcon',
'ais-AutocompletePromptSuggestionItemIcon',
classNames.icon
)}
>
<SparklesIcon createElement={createElement} />
</div>
<div
className={cx(
'ais-AutocompleteItemContentBody',
'ais-AutocompletePromptSuggestionItemContentBody',
classNames.body
)}
>
{children ?? label}
</div>
</div>
</div>
);
};
}