@yext/chat-ui-react 0.5.6 → 0.6.0-alpha.38
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/README.md +9 -11
- package/THIRD-PARTY-NOTICES +1 -1
- package/lib/commonjs/package.json.js +141 -0
- package/lib/commonjs/package.json.js.map +1 -0
- package/lib/commonjs/src/components/ChatHeader.js +21 -20
- package/lib/commonjs/src/components/ChatHeader.js.map +1 -1
- package/lib/commonjs/src/components/ChatInput.js +24 -26
- package/lib/commonjs/src/components/ChatInput.js.map +1 -1
- package/lib/commonjs/src/components/ChatPanel.d.ts.map +1 -1
- package/lib/commonjs/src/components/ChatPanel.js +28 -28
- package/lib/commonjs/src/components/ChatPanel.js.map +1 -1
- package/lib/commonjs/src/components/ChatPopUp.d.ts.map +1 -1
- package/lib/commonjs/src/components/ChatPopUp.js +24 -23
- package/lib/commonjs/src/components/ChatPopUp.js.map +1 -1
- package/lib/commonjs/src/components/FeedbackButtons.js +21 -20
- package/lib/commonjs/src/components/FeedbackButtons.js.map +1 -1
- package/lib/commonjs/src/components/LoadingDots.js +8 -7
- package/lib/commonjs/src/components/LoadingDots.js.map +1 -1
- package/lib/commonjs/src/components/Markdown.js +19 -21
- package/lib/commonjs/src/components/Markdown.js.map +1 -1
- package/lib/commonjs/src/components/MessageBubble.js +20 -19
- package/lib/commonjs/src/components/MessageBubble.js.map +1 -1
- package/lib/commonjs/src/components/index.d.ts +0 -1
- package/lib/commonjs/src/components/index.d.ts.map +1 -1
- package/lib/commonjs/src/hooks/useComposedCssClasses.js +9 -8
- package/lib/commonjs/src/hooks/useComposedCssClasses.js.map +1 -1
- package/lib/commonjs/src/hooks/useDefaultHandleApiError.js +10 -9
- package/lib/commonjs/src/hooks/useDefaultHandleApiError.js.map +1 -1
- package/lib/commonjs/src/hooks/useReportAnalyticsEvent.js +11 -13
- package/lib/commonjs/src/hooks/useReportAnalyticsEvent.js.map +1 -1
- package/lib/commonjs/src/icons/Arrow.js +7 -6
- package/lib/commonjs/src/icons/Arrow.js.map +1 -1
- package/lib/commonjs/src/icons/Chat.js +7 -6
- package/lib/commonjs/src/icons/Chat.js.map +1 -1
- package/lib/commonjs/src/icons/Cross.js +7 -6
- package/lib/commonjs/src/icons/Cross.js.map +1 -1
- package/lib/commonjs/src/icons/DualSync.js +7 -6
- package/lib/commonjs/src/icons/DualSync.js.map +1 -1
- package/lib/commonjs/src/icons/ThumbsDown.js +7 -6
- package/lib/commonjs/src/icons/ThumbsDown.js.map +1 -1
- package/lib/commonjs/src/icons/ThumbsDownFill.js +7 -6
- package/lib/commonjs/src/icons/ThumbsDownFill.js.map +1 -1
- package/lib/commonjs/src/icons/ThumbsUp.js +7 -6
- package/lib/commonjs/src/icons/ThumbsUp.js.map +1 -1
- package/lib/commonjs/src/icons/ThumbsUpFill.js +7 -6
- package/lib/commonjs/src/icons/ThumbsUpFill.js.map +1 -1
- package/lib/commonjs/src/index.js +18 -19
- package/lib/commonjs/src/index.js.map +1 -1
- package/lib/commonjs/src/utils/withStylelessCssClasses.js +4 -4
- package/lib/commonjs/src/utils/withStylelessCssClasses.js.map +1 -1
- package/lib/esm/index.d.ts +0 -12
- package/lib/esm/package.json.mjs +121 -0
- package/lib/esm/package.json.mjs.map +1 -0
- package/lib/esm/src/components/{ChatHeader.js → ChatHeader.mjs} +14 -11
- package/lib/esm/src/components/ChatHeader.mjs.map +1 -0
- package/lib/esm/src/components/{ChatInput.js → ChatInput.mjs} +14 -11
- package/lib/esm/src/components/ChatInput.mjs.map +1 -0
- package/lib/esm/src/components/ChatPanel.d.ts.map +1 -1
- package/lib/esm/src/components/{ChatPanel.js → ChatPanel.mjs} +16 -14
- package/lib/esm/src/components/ChatPanel.mjs.map +1 -0
- package/lib/esm/src/components/ChatPopUp.d.ts.map +1 -1
- package/lib/esm/src/components/{ChatPopUp.js → ChatPopUp.mjs} +15 -12
- package/lib/esm/src/components/ChatPopUp.mjs.map +1 -0
- package/lib/esm/src/components/{FeedbackButtons.js → FeedbackButtons.mjs} +15 -12
- package/lib/esm/src/components/FeedbackButtons.mjs.map +1 -0
- package/lib/esm/src/components/LoadingDots.mjs +14 -0
- package/lib/esm/src/components/LoadingDots.mjs.map +1 -0
- package/lib/esm/src/components/{Markdown.js → Markdown.mjs} +14 -11
- package/lib/esm/src/components/Markdown.mjs.map +1 -0
- package/lib/esm/src/components/{MessageBubble.js → MessageBubble.mjs} +13 -10
- package/lib/esm/src/components/MessageBubble.mjs.map +1 -0
- package/lib/esm/src/components/index.d.ts +0 -1
- package/lib/esm/src/components/index.d.ts.map +1 -1
- package/lib/esm/src/hooks/{useComposedCssClasses.js → useComposedCssClasses.mjs} +7 -4
- package/lib/esm/src/hooks/useComposedCssClasses.mjs.map +1 -0
- package/lib/esm/src/hooks/{useDefaultHandleApiError.js → useDefaultHandleApiError.mjs} +7 -4
- package/lib/esm/src/hooks/useDefaultHandleApiError.mjs.map +1 -0
- package/lib/esm/src/hooks/{useReportAnalyticsEvent.js → useReportAnalyticsEvent.mjs} +8 -5
- package/lib/esm/src/hooks/useReportAnalyticsEvent.mjs.map +1 -0
- package/lib/esm/src/icons/Arrow.mjs +8 -0
- package/lib/esm/src/icons/Arrow.mjs.map +1 -0
- package/lib/esm/src/icons/Chat.mjs +8 -0
- package/lib/esm/src/icons/Chat.mjs.map +1 -0
- package/lib/esm/src/icons/Cross.mjs +8 -0
- package/lib/esm/src/icons/Cross.mjs.map +1 -0
- package/lib/esm/src/icons/DualSync.mjs +8 -0
- package/lib/esm/src/icons/DualSync.mjs.map +1 -0
- package/lib/esm/src/icons/ThumbsDown.mjs +8 -0
- package/lib/esm/src/icons/ThumbsDown.mjs.map +1 -0
- package/lib/esm/src/icons/ThumbsDownFill.mjs +8 -0
- package/lib/esm/src/icons/ThumbsDownFill.mjs.map +1 -0
- package/lib/esm/src/icons/ThumbsUp.mjs +8 -0
- package/lib/esm/src/icons/ThumbsUp.mjs.map +1 -0
- package/lib/esm/src/icons/ThumbsUpFill.mjs +8 -0
- package/lib/esm/src/icons/ThumbsUpFill.mjs.map +1 -0
- package/lib/esm/src/index.mjs +7 -0
- package/lib/esm/src/index.mjs.map +1 -0
- package/lib/esm/src/utils/{withStylelessCssClasses.js → withStylelessCssClasses.mjs} +4 -2
- package/lib/esm/src/utils/withStylelessCssClasses.mjs.map +1 -0
- package/package.json +9 -6
- package/src/components/ChatPanel.tsx +18 -16
- package/src/components/ChatPopUp.tsx +26 -22
- package/src/components/index.ts +0 -2
- package/lib/commonjs/package.json +0 -99
- package/lib/commonjs/src/components/ChatStyleProvider.d.ts +0 -13
- package/lib/commonjs/src/components/ChatStyleProvider.d.ts.map +0 -1
- package/lib/commonjs/src/components/ChatStyleProvider.js +0 -19
- package/lib/commonjs/src/components/ChatStyleProvider.js.map +0 -1
- package/lib/commonjs/src/components/index.js +0 -16
- package/lib/commonjs/src/components/index.js.map +0 -1
- package/lib/commonjs/src/hooks/index.js +0 -6
- package/lib/commonjs/src/hooks/index.js.map +0 -1
- package/lib/esm/package.json +0 -99
- package/lib/esm/src/components/ChatHeader.js.map +0 -1
- package/lib/esm/src/components/ChatInput.js.map +0 -1
- package/lib/esm/src/components/ChatPanel.js.map +0 -1
- package/lib/esm/src/components/ChatPopUp.js.map +0 -1
- package/lib/esm/src/components/ChatStyleProvider.d.ts +0 -13
- package/lib/esm/src/components/ChatStyleProvider.d.ts.map +0 -1
- package/lib/esm/src/components/ChatStyleProvider.js +0 -15
- package/lib/esm/src/components/ChatStyleProvider.js.map +0 -1
- package/lib/esm/src/components/FeedbackButtons.js.map +0 -1
- package/lib/esm/src/components/LoadingDots.js +0 -11
- package/lib/esm/src/components/LoadingDots.js.map +0 -1
- package/lib/esm/src/components/Markdown.js.map +0 -1
- package/lib/esm/src/components/MessageBubble.js.map +0 -1
- package/lib/esm/src/components/index.js +0 -7
- package/lib/esm/src/components/index.js.map +0 -1
- package/lib/esm/src/hooks/index.js +0 -2
- package/lib/esm/src/hooks/index.js.map +0 -1
- package/lib/esm/src/hooks/useComposedCssClasses.js.map +0 -1
- package/lib/esm/src/hooks/useDefaultHandleApiError.js.map +0 -1
- package/lib/esm/src/hooks/useReportAnalyticsEvent.js.map +0 -1
- package/lib/esm/src/icons/Arrow.js +0 -5
- package/lib/esm/src/icons/Arrow.js.map +0 -1
- package/lib/esm/src/icons/Chat.js +0 -5
- package/lib/esm/src/icons/Chat.js.map +0 -1
- package/lib/esm/src/icons/Cross.js +0 -5
- package/lib/esm/src/icons/Cross.js.map +0 -1
- package/lib/esm/src/icons/DualSync.js +0 -5
- package/lib/esm/src/icons/DualSync.js.map +0 -1
- package/lib/esm/src/icons/ThumbsDown.js +0 -5
- package/lib/esm/src/icons/ThumbsDown.js.map +0 -1
- package/lib/esm/src/icons/ThumbsDownFill.js +0 -5
- package/lib/esm/src/icons/ThumbsDownFill.js.map +0 -1
- package/lib/esm/src/icons/ThumbsUp.js +0 -5
- package/lib/esm/src/icons/ThumbsUp.js.map +0 -1
- package/lib/esm/src/icons/ThumbsUpFill.js +0 -5
- package/lib/esm/src/icons/ThumbsUpFill.js.map +0 -1
- package/lib/esm/src/index.js +0 -3
- package/lib/esm/src/index.js.map +0 -1
- package/lib/esm/src/utils/withStylelessCssClasses.js.map +0 -1
- package/src/components/ChatStyleProvider.tsx +0 -15
package/README.md
CHANGED
|
@@ -41,21 +41,19 @@ export default App;
|
|
|
41
41
|
|
|
42
42
|
### default styling
|
|
43
43
|
|
|
44
|
-
By default, the component library uses Tailwind styling.
|
|
44
|
+
By default, the component library uses Tailwind styling. However, for projects that
|
|
45
|
+
do not use Tailwind, a css bundle is exported as part of this package. To use it, you can import
|
|
46
|
+
the file `@yext/chat-ui-react/bundle.css` into your normal CSS flow.
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
`ChatStyleProvider` as a wrapper for all Chat related components:
|
|
48
|
+
Example for Yext Pages:
|
|
48
49
|
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<ChatPanel />
|
|
53
|
-
</ChatHeadlessProvider>
|
|
54
|
-
</ChatStyleProvider>
|
|
50
|
+
```css
|
|
51
|
+
/* index.css */
|
|
52
|
+
@import "@yext/chat-ui-react/bundle.css";
|
|
55
53
|
```
|
|
56
54
|
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
The CSS bundle is scoped to the target class `.yext-chat`, which is automatically included as a wrapper div in both
|
|
56
|
+
`ChatPanel` and `ChatPopUp`.
|
|
59
57
|
|
|
60
58
|
### custom styling
|
|
61
59
|
|
package/THIRD-PARTY-NOTICES
CHANGED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var name = "@yext/chat-ui-react";
|
|
6
|
+
var version = "0.6.0-alpha.38";
|
|
7
|
+
var description = "A library of React Components for powering Yext Chat integrations.";
|
|
8
|
+
var author = "clippy@yext.com";
|
|
9
|
+
var main = "./lib/commonjs/src/index.js";
|
|
10
|
+
var module$1 = "./lib/esm/src/index.mjs";
|
|
11
|
+
var types = "./lib/esm/src/index.d.ts";
|
|
12
|
+
var sideEffects = false;
|
|
13
|
+
var exports$1 = {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./lib/esm/src/index.mjs",
|
|
16
|
+
require: "./lib/commonjs/src/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./bundle.css": "./lib/bundle.css"
|
|
19
|
+
};
|
|
20
|
+
var license = "BSD-3-Clause";
|
|
21
|
+
var files = [
|
|
22
|
+
"lib",
|
|
23
|
+
"src",
|
|
24
|
+
"THIRD-PARTY-NOTICES",
|
|
25
|
+
"LICENSE"
|
|
26
|
+
];
|
|
27
|
+
var keywords = [
|
|
28
|
+
"chat",
|
|
29
|
+
"ai",
|
|
30
|
+
"yext",
|
|
31
|
+
"react",
|
|
32
|
+
"components",
|
|
33
|
+
"tailwindcss"
|
|
34
|
+
];
|
|
35
|
+
var scripts = {
|
|
36
|
+
lint: "prettier --write . && eslint --fix --max-warnings=0 .",
|
|
37
|
+
test: "jest --config=jest.config.json",
|
|
38
|
+
storybook: "storybook dev -p 6006",
|
|
39
|
+
dev: "tsc --watch -p tsconfig.json",
|
|
40
|
+
"generate-docs": "api-extractor run --local --verbose && api-documenter markdown --input-folder temp --output-folder docs && rm -rf temp",
|
|
41
|
+
"generate-notices": "generate-license-file --input package.json --output ./THIRD-PARTY-NOTICES --overwrite",
|
|
42
|
+
postcss: "postcss",
|
|
43
|
+
tailwindcss: "tailwindcss",
|
|
44
|
+
"build:css": "./scoped-bundle.sh",
|
|
45
|
+
"build:js": "rollup --config rollup.config.mjs",
|
|
46
|
+
build: "rm -rf lib/** && npm run build:js && npm run build:css && npm run generate-docs && npm run generate-notices",
|
|
47
|
+
"build-storybook": "storybook build"
|
|
48
|
+
};
|
|
49
|
+
var devDependencies = {
|
|
50
|
+
"@babel/core": "^7.21.8",
|
|
51
|
+
"@babel/preset-env": "^7.21.5",
|
|
52
|
+
"@babel/preset-react": "^7.18.6",
|
|
53
|
+
"@babel/preset-typescript": "^7.21.5",
|
|
54
|
+
"@microsoft/api-documenter": "^7.22.8",
|
|
55
|
+
"@microsoft/api-extractor": "^7.35.1",
|
|
56
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
57
|
+
"@storybook/addon-essentials": "^7.0.18",
|
|
58
|
+
"@storybook/addon-interactions": "^7.0.18",
|
|
59
|
+
"@storybook/addon-links": "^7.0.18",
|
|
60
|
+
"@storybook/blocks": "^7.0.18",
|
|
61
|
+
"@storybook/react": "^7.0.17",
|
|
62
|
+
"@storybook/react-vite": "^7.0.17",
|
|
63
|
+
"@storybook/testing-library": "^0.1.0",
|
|
64
|
+
"@tailwindcss/container-queries": "^0.1.1",
|
|
65
|
+
"@tailwindcss/typography": "^0.5.9",
|
|
66
|
+
"@testing-library/jest-dom": "^5.16.5",
|
|
67
|
+
"@testing-library/react": "^14.0.0",
|
|
68
|
+
"@testing-library/user-event": "^14.4.3",
|
|
69
|
+
"@types/jest": "^29.5.1",
|
|
70
|
+
"@types/react": "^18.2.7",
|
|
71
|
+
"@yext/chat-headless-react": "^0.5.6",
|
|
72
|
+
"@yext/eslint-config": "^1.0.0",
|
|
73
|
+
"babel-jest": "^29.5.0",
|
|
74
|
+
eslint: "^8.39.0",
|
|
75
|
+
"eslint-plugin-storybook": "^0.6.12",
|
|
76
|
+
"generate-license-file": "^2.0.0",
|
|
77
|
+
jest: "^29.5.0",
|
|
78
|
+
"jest-environment-jsdom": "^29.5.0",
|
|
79
|
+
msw: "^1.2.1",
|
|
80
|
+
"msw-storybook-addon": "^1.8.0",
|
|
81
|
+
"postcss-cli": "^10.1.0",
|
|
82
|
+
"postcss-nested": "^6.0.1",
|
|
83
|
+
prettier: "^2.8.8",
|
|
84
|
+
react: "^18.2.0",
|
|
85
|
+
"react-dom": "^18.2.0",
|
|
86
|
+
rollup: "^3.28.1",
|
|
87
|
+
"rollup-plugin-typescript2": "^0.35.0",
|
|
88
|
+
storybook: "^7.0.17",
|
|
89
|
+
tailwindcss: "^3.3.2",
|
|
90
|
+
typescript: "^5.0.4"
|
|
91
|
+
};
|
|
92
|
+
var peerDependencies = {
|
|
93
|
+
"@yext/chat-headless-react": "^0.5.4",
|
|
94
|
+
react: "^16.14 || ^17 || ^18",
|
|
95
|
+
"react-dom": "^16.14 || ^17 || || ^18"
|
|
96
|
+
};
|
|
97
|
+
var dependencies = {
|
|
98
|
+
"react-markdown": "^6.0.3",
|
|
99
|
+
"react-textarea-autosize": "^8.5.3",
|
|
100
|
+
"rehype-raw": "^5.0.0",
|
|
101
|
+
"rehype-sanitize": "^4.0.0",
|
|
102
|
+
"remark-gfm": "^1.0.0",
|
|
103
|
+
"tailwind-merge": "^1.12.0"
|
|
104
|
+
};
|
|
105
|
+
var packageJson = {
|
|
106
|
+
name: name,
|
|
107
|
+
version: version,
|
|
108
|
+
description: description,
|
|
109
|
+
author: author,
|
|
110
|
+
main: main,
|
|
111
|
+
module: module$1,
|
|
112
|
+
types: types,
|
|
113
|
+
sideEffects: sideEffects,
|
|
114
|
+
exports: exports$1,
|
|
115
|
+
license: license,
|
|
116
|
+
files: files,
|
|
117
|
+
keywords: keywords,
|
|
118
|
+
scripts: scripts,
|
|
119
|
+
devDependencies: devDependencies,
|
|
120
|
+
peerDependencies: peerDependencies,
|
|
121
|
+
dependencies: dependencies
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
exports.author = author;
|
|
125
|
+
exports.default = packageJson;
|
|
126
|
+
exports.dependencies = dependencies;
|
|
127
|
+
exports.description = description;
|
|
128
|
+
exports.devDependencies = devDependencies;
|
|
129
|
+
exports.exports = exports$1;
|
|
130
|
+
exports.files = files;
|
|
131
|
+
exports.keywords = keywords;
|
|
132
|
+
exports.license = license;
|
|
133
|
+
exports.main = main;
|
|
134
|
+
exports.module = module$1;
|
|
135
|
+
exports.name = name;
|
|
136
|
+
exports.peerDependencies = peerDependencies;
|
|
137
|
+
exports.scripts = scripts;
|
|
138
|
+
exports.sideEffects = sideEffects;
|
|
139
|
+
exports.types = types;
|
|
140
|
+
exports.version = version;
|
|
141
|
+
//# sourceMappingURL=package.json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const builtInCssClasses =
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var chatHeadlessReact = require('@yext/chat-headless-react');
|
|
5
|
+
var DualSync = require('../icons/DualSync.js');
|
|
6
|
+
var useComposedCssClasses = require('../hooks/useComposedCssClasses.js');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var tailwindMerge = require('tailwind-merge');
|
|
9
|
+
var Cross = require('../icons/Cross.js');
|
|
10
|
+
var withStylelessCssClasses = require('../utils/withStylelessCssClasses.js');
|
|
11
|
+
|
|
12
|
+
const builtInCssClasses = withStylelessCssClasses.withStylelessCssClasses("Header", {
|
|
13
13
|
container: "w-full pl-4 pr-3 py-3 flex justify-between bg-gradient-to-tr from-blue-600 to-blue-800",
|
|
14
14
|
title: "text-white text-xl font-medium truncate pr-1",
|
|
15
15
|
restartButton: "w-8 h-8 ml-auto shrink-0 flex justify-center items-center",
|
|
@@ -26,12 +26,12 @@ const builtInCssClasses = (0, withStylelessCssClasses_1.withStylelessCssClasses)
|
|
|
26
26
|
* @param props - {@link ChatHeaderProps}
|
|
27
27
|
*/
|
|
28
28
|
function ChatHeader({ title, showRestartButton, restartButtonIcon, showCloseButton, closeButtonIcon, onClose, customCssClasses, }) {
|
|
29
|
-
const chat =
|
|
30
|
-
const cssClasses =
|
|
31
|
-
const [isSpinning, setIsSpinning] =
|
|
32
|
-
const restartButtonCssClasses =
|
|
33
|
-
const clearTimerRef =
|
|
34
|
-
const onRestart =
|
|
29
|
+
const chat = chatHeadlessReact.useChatActions();
|
|
30
|
+
const cssClasses = useComposedCssClasses.useComposedCssClasses(builtInCssClasses, customCssClasses);
|
|
31
|
+
const [isSpinning, setIsSpinning] = react.useState(false);
|
|
32
|
+
const restartButtonCssClasses = tailwindMerge.twMerge(cssClasses.restartButton, isSpinning ? "animate-[spin_0.3s_linear]" : "hover:scale-110");
|
|
33
|
+
const clearTimerRef = react.useRef();
|
|
34
|
+
const onRestart = react.useCallback(async () => {
|
|
35
35
|
clearTimeout(clearTimerRef.current);
|
|
36
36
|
setIsSpinning(true);
|
|
37
37
|
clearTimerRef.current = setTimeout(() => {
|
|
@@ -39,7 +39,8 @@ function ChatHeader({ title, showRestartButton, restartButtonIcon, showCloseButt
|
|
|
39
39
|
}, 1000);
|
|
40
40
|
chat.restartConversation();
|
|
41
41
|
}, [chat]);
|
|
42
|
-
return (
|
|
42
|
+
return (jsxRuntime.jsxs("div", { className: cssClasses.container, children: [jsxRuntime.jsx("h1", { className: cssClasses.title, children: title }), showRestartButton && (jsxRuntime.jsx("button", { "aria-label": "Restart Conversation", onClick: onRestart, className: restartButtonCssClasses, children: restartButtonIcon ?? (jsxRuntime.jsx(DualSync.DualSyncIcon, { className: cssClasses.restartButtonIcon })) })), showCloseButton && (jsxRuntime.jsx("button", { "aria-label": "Close Chat", onClick: onClose, className: cssClasses.closeButton, children: closeButtonIcon ?? (jsxRuntime.jsx(Cross.CrossIcon, { className: cssClasses.closeButtonIcon })) }))] }));
|
|
43
43
|
}
|
|
44
|
+
|
|
44
45
|
exports.ChatHeader = ChatHeader;
|
|
45
|
-
//# sourceMappingURL=ChatHeader.js.map
|
|
46
|
+
//# sourceMappingURL=ChatHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatHeader.js","
|
|
1
|
+
{"version":3,"file":"ChatHeader.js","sources":["../../../../src/components/ChatHeader.tsx"],"sourcesContent":["import { useChatActions } from \"@yext/chat-headless-react\";\nimport { DualSyncIcon } from \"../icons/DualSync\";\nimport { useComposedCssClasses } from \"../hooks/useComposedCssClasses\";\nimport { useCallback, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { CrossIcon } from \"../icons/Cross\";\nimport { withStylelessCssClasses } from \"../utils/withStylelessCssClasses\";\n\n/**\n * The CSS class interface for the {@link ChatHeader} component.\n *\n * @public\n */\nexport interface ChatHeaderCssClasses {\n container?: string;\n title?: string;\n restartButton?: string;\n restartButtonIcon?: string;\n closeButton?: string;\n closeButtonIcon?: string;\n}\n\nconst builtInCssClasses: Readonly<ChatHeaderCssClasses> =\n withStylelessCssClasses(\"Header\", {\n container:\n \"w-full pl-4 pr-3 py-3 flex justify-between bg-gradient-to-tr from-blue-600 to-blue-800\",\n title: \"text-white text-xl font-medium truncate pr-1\",\n restartButton: \"w-8 h-8 ml-auto shrink-0 flex justify-center items-center\",\n restartButtonIcon: \"text-white stroke-[0.2] w-[26px] h-[26px]\",\n closeButton:\n \"w-8 h-8 hover:scale-110 shrink-0 flex justify-center items-center\",\n closeButtonIcon: \"text-white w-[26px] h-[26px]\",\n });\n\n/**\n * The props for the {@link ChatHeader} component.\n *\n * @public\n */\nexport interface ChatHeaderProps {\n /**\n * The headers's title text, essentially how the chat window identifies itself to the user.\n */\n title: string;\n /**\n * Displays a restart button which allows the user to restart the conversation.\n * Defaults to false.\n */\n showRestartButton?: boolean;\n /**\n * Displays a close button which will invoke {@link ChatHeaderProps.onClose} on click.\n * Default to false.\n */\n showCloseButton?: boolean;\n /** A function which is called when the close button is clicked. */\n onClose?: () => void;\n /** Custom icon for for restart button. */\n restartButtonIcon?: JSX.Element;\n /** Custom icon for for close button. */\n closeButtonIcon?: JSX.Element;\n /** CSS classes for customizing the component styling. */\n customCssClasses?: ChatHeaderCssClasses;\n}\n\n/**\n * A component that renders the header of a chat bot panel,\n * including the title and a button to reset the conversation.\n *\n * @public\n *\n * @param props - {@link ChatHeaderProps}\n */\nexport function ChatHeader({\n title,\n showRestartButton,\n restartButtonIcon,\n showCloseButton,\n closeButtonIcon,\n onClose,\n customCssClasses,\n}: ChatHeaderProps) {\n const chat = useChatActions();\n\n const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n const [isSpinning, setIsSpinning] = useState(false);\n const restartButtonCssClasses = twMerge(\n cssClasses.restartButton,\n isSpinning ? \"animate-[spin_0.3s_linear]\" : \"hover:scale-110\"\n );\n\n const clearTimerRef = useRef<ReturnType<typeof setTimeout>>();\n const onRestart = useCallback(async () => {\n clearTimeout(clearTimerRef.current);\n setIsSpinning(true);\n clearTimerRef.current = setTimeout(() => {\n setIsSpinning(false);\n }, 1000);\n chat.restartConversation();\n }, [chat]);\n\n return (\n <div className={cssClasses.container}>\n <h1 className={cssClasses.title}>{title}</h1>\n {showRestartButton && (\n <button\n aria-label=\"Restart Conversation\"\n onClick={onRestart}\n className={restartButtonCssClasses}\n >\n {restartButtonIcon ?? (\n <DualSyncIcon className={cssClasses.restartButtonIcon} />\n )}\n </button>\n )}\n {showCloseButton && (\n <button\n aria-label=\"Close Chat\"\n onClick={onClose}\n className={cssClasses.closeButton}\n >\n {closeButtonIcon ?? (\n <CrossIcon className={cssClasses.closeButtonIcon} />\n )}\n </button>\n )}\n </div>\n );\n}\n"],"names":["withStylelessCssClasses","useChatActions","useComposedCssClasses","useState","twMerge","useRef","useCallback","_jsxs","_jsx","DualSyncIcon","CrossIcon"],"mappings":";;;;;;;;;;;AAsBA,MAAM,iBAAiB,GACrBA,+CAAuB,CAAC,QAAQ,EAAE;AAChC,IAAA,SAAS,EACP,wFAAwF;AAC1F,IAAA,KAAK,EAAE,8CAA8C;AACrD,IAAA,aAAa,EAAE,2DAA2D;AAC1E,IAAA,iBAAiB,EAAE,2CAA2C;AAC9D,IAAA,WAAW,EACT,mEAAmE;AACrE,IAAA,eAAe,EAAE,8BAA8B;AAChD,CAAA,CAAC,CAAC;AAgCL;;;;;;;AAOG;SACa,UAAU,CAAC,EACzB,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,OAAO,EACP,gBAAgB,GACA,EAAA;AAChB,IAAA,MAAM,IAAI,GAAGC,gCAAc,EAAE,CAAC;IAE9B,MAAM,UAAU,GAAGC,2CAAqB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IAE9E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,MAAM,uBAAuB,GAAGC,qBAAO,CACrC,UAAU,CAAC,aAAa,EACxB,UAAU,GAAG,4BAA4B,GAAG,iBAAiB,CAC9D,CAAC;AAEF,IAAA,MAAM,aAAa,GAAGC,YAAM,EAAiC,CAAC;AAC9D,IAAA,MAAM,SAAS,GAAGC,iBAAW,CAAC,YAAW;AACvC,QAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,aAAa,CAAC,IAAI,CAAC,CAAC;AACpB,QAAA,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,MAAK;YACtC,aAAa,CAAC,KAAK,CAAC,CAAC;SACtB,EAAE,IAAI,CAAC,CAAC;QACT,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7B,KAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAEX,IAAA,QACEC,eAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,UAAU,CAAC,SAAS,EAAA,QAAA,EAAA,CAClCC,cAAI,CAAA,IAAA,EAAA,EAAA,SAAS,EAAE,UAAU,CAAC,KAAK,EAAG,QAAA,EAAA,KAAK,GAAM,EAC5C,iBAAiB,KAChBA,yCACa,sBAAsB,EACjC,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,uBAAuB,YAEjC,iBAAiB,KAChBA,cAAC,CAAAC,qBAAY,IAAC,SAAS,EAAE,UAAU,CAAC,iBAAiB,EAAI,CAAA,CAC1D,EACM,CAAA,CACV,EACA,eAAe,KACdD,cAAA,CAAA,QAAA,EAAA,EAAA,YAAA,EACa,YAAY,EACvB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,UAAU,CAAC,WAAW,YAEhC,eAAe,KACdA,cAAC,CAAAE,eAAS,IAAC,SAAS,EAAE,UAAU,CAAC,eAAe,EAAI,CAAA,CACrD,GACM,CACV,CAAA,EAAA,CACG,EACN;AACJ;;;;"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const useDefaultHandleApiError_1 = require("../hooks/useDefaultHandleApiError");
|
|
14
|
-
const withStylelessCssClasses_1 = require("../utils/withStylelessCssClasses");
|
|
15
|
-
const builtInCssClasses = (0, withStylelessCssClasses_1.withStylelessCssClasses)("Input", {
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var chatHeadlessReact = require('@yext/chat-headless-react');
|
|
6
|
+
var Arrow = require('../icons/Arrow.js');
|
|
7
|
+
var useComposedCssClasses = require('../hooks/useComposedCssClasses.js');
|
|
8
|
+
var TextareaAutosize = require('react-textarea-autosize');
|
|
9
|
+
var useDefaultHandleApiError = require('../hooks/useDefaultHandleApiError.js');
|
|
10
|
+
var withStylelessCssClasses = require('../utils/withStylelessCssClasses.js');
|
|
11
|
+
|
|
12
|
+
const builtInCssClasses = withStylelessCssClasses.withStylelessCssClasses("Input", {
|
|
16
13
|
container: "w-full h-fit flex flex-row relative @container",
|
|
17
14
|
textArea: "w-full p-4 pr-12 border border-slate-300 rounded-3xl resize-none text-[13px] @[480px]:text-base placeholder:text-[13px] placeholder:@[480px]:text-base text-slate-900",
|
|
18
15
|
sendButton: "rounded-full p-1.5 w-8 h-8 stroke-2 text-white bg-blue-600 disabled:bg-slate-200 hover:bg-blue-800 active:scale-90 transition-all absolute right-4 bottom-2.5 @[480px]:bottom-3.5",
|
|
@@ -28,20 +25,20 @@ const builtInCssClasses = (0, withStylelessCssClasses_1.withStylelessCssClasses)
|
|
|
28
25
|
*
|
|
29
26
|
* @param props - {@link ChatInputProps}
|
|
30
27
|
*/
|
|
31
|
-
function ChatInput({ placeholder = "Type a message...", stream = false, inputAutoFocus = false, handleError, sendButtonIcon =
|
|
32
|
-
const chat =
|
|
33
|
-
const [input, setInput] =
|
|
34
|
-
const canSendMessage =
|
|
35
|
-
const defaultHandleApiError =
|
|
36
|
-
const cssClasses =
|
|
37
|
-
const sendMessage =
|
|
28
|
+
function ChatInput({ placeholder = "Type a message...", stream = false, inputAutoFocus = false, handleError, sendButtonIcon = jsxRuntime.jsx(Arrow.ArrowIcon, {}), customCssClasses, }) {
|
|
29
|
+
const chat = chatHeadlessReact.useChatActions();
|
|
30
|
+
const [input, setInput] = react.useState("");
|
|
31
|
+
const canSendMessage = chatHeadlessReact.useChatState((state) => state.conversation.canSendMessage);
|
|
32
|
+
const defaultHandleApiError = useDefaultHandleApiError.useDefaultHandleApiError();
|
|
33
|
+
const cssClasses = useComposedCssClasses.useComposedCssClasses(builtInCssClasses, customCssClasses);
|
|
34
|
+
const sendMessage = react.useCallback(async () => {
|
|
38
35
|
const res = stream
|
|
39
36
|
? chat.streamNextMessage(input)
|
|
40
37
|
: chat.getNextMessage(input);
|
|
41
38
|
setInput("");
|
|
42
39
|
res.catch((e) => (handleError ? handleError(e) : defaultHandleApiError(e)));
|
|
43
40
|
}, [chat, input, handleError, defaultHandleApiError, stream]);
|
|
44
|
-
const handleKeyDown =
|
|
41
|
+
const handleKeyDown = react.useCallback((e) => {
|
|
45
42
|
if (!e.shiftKey && e.key === "Enter") {
|
|
46
43
|
e.preventDefault();
|
|
47
44
|
if (canSendMessage && input.trim().length !== 0) {
|
|
@@ -49,10 +46,11 @@ function ChatInput({ placeholder = "Type a message...", stream = false, inputAut
|
|
|
49
46
|
}
|
|
50
47
|
}
|
|
51
48
|
}, [sendMessage, canSendMessage, input]);
|
|
52
|
-
const onInputChange =
|
|
49
|
+
const onInputChange = react.useCallback((e) => {
|
|
53
50
|
setInput(e.target.value);
|
|
54
51
|
}, []);
|
|
55
|
-
return (
|
|
52
|
+
return (jsxRuntime.jsxs("div", { className: cssClasses.container, children: [jsxRuntime.jsx(TextareaAutosize, { autoFocus: inputAutoFocus, onKeyDown: handleKeyDown, value: input, onChange: onInputChange, className: cssClasses.textArea, placeholder: placeholder }), jsxRuntime.jsx("button", { "aria-label": "Send Message", disabled: !canSendMessage || input.trim().length === 0, onClick: sendMessage, className: cssClasses.sendButton, children: sendButtonIcon })] }));
|
|
56
53
|
}
|
|
54
|
+
|
|
57
55
|
exports.ChatInput = ChatInput;
|
|
58
|
-
//# sourceMappingURL=ChatInput.js.map
|
|
56
|
+
//# sourceMappingURL=ChatInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInput.js","
|
|
1
|
+
{"version":3,"file":"ChatInput.js","sources":["../../../../src/components/ChatInput.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\nimport { useChatActions, useChatState } from \"@yext/chat-headless-react\";\nimport { ArrowIcon } from \"../icons/Arrow\";\nimport { useComposedCssClasses } from \"../hooks\";\nimport TextareaAutosize from \"react-textarea-autosize\";\nimport { useDefaultHandleApiError } from \"../hooks/useDefaultHandleApiError\";\nimport { withStylelessCssClasses } from \"../utils/withStylelessCssClasses\";\n\n/**\n * The CSS class interface for the {@link ChatInput} component.\n *\n * @public\n */\nexport interface ChatInputCssClasses {\n container?: string;\n textArea?: string;\n sendButton?: string;\n}\n\nconst builtInCssClasses: ChatInputCssClasses = withStylelessCssClasses(\n \"Input\",\n {\n container: \"w-full h-fit flex flex-row relative @container\",\n textArea:\n \"w-full p-4 pr-12 border border-slate-300 rounded-3xl resize-none text-[13px] @[480px]:text-base placeholder:text-[13px] placeholder:@[480px]:text-base text-slate-900\",\n sendButton:\n \"rounded-full p-1.5 w-8 h-8 stroke-2 text-white bg-blue-600 disabled:bg-slate-200 hover:bg-blue-800 active:scale-90 transition-all absolute right-4 bottom-2.5 @[480px]:bottom-3.5\",\n }\n);\n\n/**\n * The props for the {@link ChatInput} component.\n *\n * @public\n */\nexport interface ChatInputProps {\n /**\n * The input's placeholder text when no text has been entered by the user.\n * Defaults to \"Type a message...\".\n */\n placeholder?: string;\n /**\n * Enable streaming behavior by making a request to Chat Streaming API.\n * This feature is experimental, and is subject to change.\n * Defaults to false.\n */\n stream?: boolean;\n /** Enable auto focus for the input box. Defaults to false. */\n inputAutoFocus?: boolean;\n /**\n * A function which is called when an error occurs from Chat API while processing the user's message.\n * By default, the error is logged to the console and an error message is added to state.\n */\n handleError?: (e: unknown) => void;\n /** Custom icon for the send button. */\n sendButtonIcon?: JSX.Element;\n /** CSS classes for customizing the component styling. */\n customCssClasses?: ChatInputCssClasses;\n}\n\n/**\n * A component that allows user to input message and send to Chat API.\n *\n * @remarks\n * Pressing \"Enter\" key will send the current message.\n * To add a newline, press \"Shift\" and \"Enter\".\n *\n * @public\n *\n * @param props - {@link ChatInputProps}\n */\nexport function ChatInput({\n placeholder = \"Type a message...\",\n stream = false,\n inputAutoFocus = false,\n handleError,\n sendButtonIcon = <ArrowIcon />,\n customCssClasses,\n}: ChatInputProps) {\n const chat = useChatActions();\n const [input, setInput] = useState(\"\");\n const canSendMessage = useChatState(\n (state) => state.conversation.canSendMessage\n );\n const defaultHandleApiError = useDefaultHandleApiError();\n\n const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n const sendMessage = useCallback(async () => {\n const res = stream\n ? chat.streamNextMessage(input)\n : chat.getNextMessage(input);\n setInput(\"\");\n res.catch((e) => (handleError ? handleError(e) : defaultHandleApiError(e)));\n }, [chat, input, handleError, defaultHandleApiError, stream]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!e.shiftKey && e.key === \"Enter\") {\n e.preventDefault();\n if (canSendMessage && input.trim().length !== 0) {\n sendMessage();\n }\n }\n },\n [sendMessage, canSendMessage, input]\n );\n\n const onInputChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInput(e.target.value);\n },\n []\n );\n\n return (\n <div className={cssClasses.container}>\n <TextareaAutosize\n autoFocus={inputAutoFocus}\n onKeyDown={handleKeyDown}\n value={input}\n onChange={onInputChange}\n className={cssClasses.textArea}\n placeholder={placeholder}\n />\n <button\n aria-label=\"Send Message\"\n disabled={!canSendMessage || input.trim().length === 0}\n onClick={sendMessage}\n className={cssClasses.sendButton}\n >\n {sendButtonIcon}\n </button>\n </div>\n );\n}\n"],"names":["withStylelessCssClasses","_jsx","ArrowIcon","useChatActions","useState","useChatState","useDefaultHandleApiError","useComposedCssClasses","useCallback","_jsxs"],"mappings":";;;;;;;;;;;AAmBA,MAAM,iBAAiB,GAAwBA,+CAAuB,CACpE,OAAO,EACP;AACE,IAAA,SAAS,EAAE,gDAAgD;AAC3D,IAAA,QAAQ,EACN,uKAAuK;AACzK,IAAA,UAAU,EACR,mLAAmL;AACtL,CAAA,CACF,CAAC;AAgCF;;;;;;;;;;AAUG;AACG,SAAU,SAAS,CAAC,EACxB,WAAW,GAAG,mBAAmB,EACjC,MAAM,GAAG,KAAK,EACd,cAAc,GAAG,KAAK,EACtB,WAAW,EACX,cAAc,GAAGC,cAAA,CAACC,eAAS,EAAA,EAAA,CAAG,EAC9B,gBAAgB,GACD,EAAA;AACf,IAAA,MAAM,IAAI,GAAGC,gCAAc,EAAE,CAAC;IAC9B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGC,cAAQ,CAAC,EAAE,CAAC,CAAC;AACvC,IAAA,MAAM,cAAc,GAAGC,8BAAY,CACjC,CAAC,KAAK,KAAK,KAAK,CAAC,YAAY,CAAC,cAAc,CAC7C,CAAC;AACF,IAAA,MAAM,qBAAqB,GAAGC,iDAAwB,EAAE,CAAC;IAEzD,MAAM,UAAU,GAAGC,2CAAqB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;AAE9E,IAAA,MAAM,WAAW,GAAGC,iBAAW,CAAC,YAAW;QACzC,MAAM,GAAG,GAAG,MAAM;AAChB,cAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC/B,cAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,KAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,IAAA,MAAM,aAAa,GAAGA,iBAAW,CAC/B,CAAC,CAA2C,KAAI;QAC9C,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YACpC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,gBAAA,WAAW,EAAE,CAAC;AACf,aAAA;AACF,SAAA;KACF,EACD,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,CACrC,CAAC;AAEF,IAAA,MAAM,aAAa,GAAGA,iBAAW,CAC/B,CAAC,CAAyC,KAAI;AAC5C,QAAA,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC1B,EACD,EAAE,CACH,CAAC;AAEF,IAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,SAAS,EAClC,QAAA,EAAA,CAAAR,cAAA,CAAC,gBAAgB,EAAA,EACf,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,UAAU,CAAC,QAAQ,EAC9B,WAAW,EAAE,WAAW,EACxB,CAAA,EACFA,cACa,CAAA,QAAA,EAAA,EAAA,YAAA,EAAA,cAAc,EACzB,QAAQ,EAAE,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACtD,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,UAAU,CAAC,UAAU,EAE/B,QAAA,EAAA,cAAc,EACR,CAAA,CAAA,EAAA,CACL,EACN;AACJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/ChatPanel.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAa,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO7E;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD;AAeD;;;;GAIG;AACH,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,CAAC,EAC9D,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC1C,kDAAkD;IAClD,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/ChatPanel.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAa,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO7E;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD;AAeD;;;;GAIG;AACH,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,CAAC,EAC9D,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC1C,kDAAkD;IAClD,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CA6D9C"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const builtInCssClasses = (0, withStylelessCssClasses_1.withStylelessCssClasses)("Panel", {
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var chatHeadlessReact = require('@yext/chat-headless-react');
|
|
6
|
+
var MessageBubble = require('./MessageBubble.js');
|
|
7
|
+
var ChatInput = require('./ChatInput.js');
|
|
8
|
+
var LoadingDots = require('./LoadingDots.js');
|
|
9
|
+
var useComposedCssClasses = require('../hooks/useComposedCssClasses.js');
|
|
10
|
+
var useDefaultHandleApiError = require('../hooks/useDefaultHandleApiError.js');
|
|
11
|
+
var withStylelessCssClasses = require('../utils/withStylelessCssClasses.js');
|
|
12
|
+
var useReportAnalyticsEvent = require('../hooks/useReportAnalyticsEvent.js');
|
|
13
|
+
|
|
14
|
+
const builtInCssClasses = withStylelessCssClasses.withStylelessCssClasses("Panel", {
|
|
16
15
|
container: "h-full w-full flex flex-col relative shadow-2xl bg-white",
|
|
17
16
|
messagesScrollContainer: "flex flex-col mt-auto overflow-hidden",
|
|
18
17
|
messagesContainer: "flex flex-col gap-y-1 px-4 overflow-auto",
|
|
@@ -32,20 +31,20 @@ const builtInCssClasses = (0, withStylelessCssClasses_1.withStylelessCssClasses)
|
|
|
32
31
|
*/
|
|
33
32
|
function ChatPanel(props) {
|
|
34
33
|
const { header, customCssClasses } = props;
|
|
35
|
-
const chat =
|
|
36
|
-
const messages =
|
|
37
|
-
const loading =
|
|
38
|
-
const canSendMessage =
|
|
39
|
-
const cssClasses =
|
|
40
|
-
const defaultHandleApiError =
|
|
41
|
-
const reportAnalyticsEvent =
|
|
42
|
-
|
|
34
|
+
const chat = chatHeadlessReact.useChatActions();
|
|
35
|
+
const messages = chatHeadlessReact.useChatState((state) => state.conversation.messages);
|
|
36
|
+
const loading = chatHeadlessReact.useChatState((state) => state.conversation.isLoading);
|
|
37
|
+
const canSendMessage = chatHeadlessReact.useChatState((state) => state.conversation.canSendMessage);
|
|
38
|
+
const cssClasses = useComposedCssClasses.useComposedCssClasses(builtInCssClasses, customCssClasses);
|
|
39
|
+
const defaultHandleApiError = useDefaultHandleApiError.useDefaultHandleApiError();
|
|
40
|
+
const reportAnalyticsEvent = useReportAnalyticsEvent.useReportAnalyticsEvent();
|
|
41
|
+
react.useEffect(() => {
|
|
43
42
|
reportAnalyticsEvent({
|
|
44
43
|
action: "CHAT_IMPRESSION",
|
|
45
44
|
});
|
|
46
45
|
}, [reportAnalyticsEvent]);
|
|
47
46
|
// Fetch the first message on load, if there are no existing messages or a request being processed
|
|
48
|
-
|
|
47
|
+
react.useEffect(() => {
|
|
49
48
|
if (messages.length !== 0 || !canSendMessage) {
|
|
50
49
|
return;
|
|
51
50
|
}
|
|
@@ -53,15 +52,16 @@ function ChatPanel(props) {
|
|
|
53
52
|
const res = stream ? chat.streamNextMessage() : chat.getNextMessage();
|
|
54
53
|
res.catch((e) => (handleError ? handleError(e) : defaultHandleApiError(e)));
|
|
55
54
|
}, [chat, props, messages, defaultHandleApiError, canSendMessage]);
|
|
56
|
-
const messagesRef =
|
|
55
|
+
const messagesRef = react.useRef(null);
|
|
57
56
|
// Scroll to the bottom of the chat when the messages change
|
|
58
|
-
|
|
57
|
+
react.useEffect(() => {
|
|
59
58
|
messagesRef.current?.scroll({
|
|
60
59
|
top: messagesRef.current?.scrollHeight,
|
|
61
60
|
behavior: "smooth",
|
|
62
61
|
});
|
|
63
62
|
}, [messages]);
|
|
64
|
-
return ((
|
|
63
|
+
return (jsxRuntime.jsx("div", { className: "yext-chat", children: jsxRuntime.jsxs("div", { className: cssClasses.container, children: [header, jsxRuntime.jsx("div", { className: cssClasses.messagesScrollContainer, children: jsxRuntime.jsxs("div", { ref: messagesRef, className: cssClasses.messagesContainer, children: [messages.map((message, index) => (react.createElement(MessageBubble.MessageBubble, { ...props, customCssClasses: cssClasses.messageBubbleCssClasses, key: index, message: message }))), loading && jsxRuntime.jsx(LoadingDots.LoadingDots, {})] }) }), jsxRuntime.jsx("div", { className: cssClasses.inputContainer, children: jsxRuntime.jsx(ChatInput.ChatInput, { ...props, customCssClasses: cssClasses.inputCssClasses }) })] }) }));
|
|
65
64
|
}
|
|
65
|
+
|
|
66
66
|
exports.ChatPanel = ChatPanel;
|
|
67
|
-
//# sourceMappingURL=ChatPanel.js.map
|
|
67
|
+
//# sourceMappingURL=ChatPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPanel.js","
|
|
1
|
+
{"version":3,"file":"ChatPanel.js","sources":["../../../../src/components/ChatPanel.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useChatState, useChatActions } from \"@yext/chat-headless-react\";\nimport {\n MessageBubble,\n MessageBubbleCssClasses,\n MessageBubbleProps,\n} from \"./MessageBubble\";\nimport { ChatInput, ChatInputCssClasses, ChatInputProps } from \"./ChatInput\";\nimport { LoadingDots } from \"./LoadingDots\";\nimport { useComposedCssClasses } from \"../hooks\";\nimport { useDefaultHandleApiError } from \"../hooks/useDefaultHandleApiError\";\nimport { withStylelessCssClasses } from \"../utils/withStylelessCssClasses\";\nimport { useReportAnalyticsEvent } from \"../hooks/useReportAnalyticsEvent\";\n\n/**\n * The CSS class interface for the {@link ChatPanel} component.\n *\n * @public\n */\nexport interface ChatPanelCssClasses {\n container?: string;\n messagesContainer?: string;\n messagesScrollContainer?: string;\n inputContainer?: string;\n inputCssClasses?: ChatInputCssClasses;\n messageBubbleCssClasses?: MessageBubbleCssClasses;\n}\n\nconst builtInCssClasses: ChatPanelCssClasses = withStylelessCssClasses(\n \"Panel\",\n {\n container: \"h-full w-full flex flex-col relative shadow-2xl bg-white\",\n messagesScrollContainer: \"flex flex-col mt-auto overflow-hidden\",\n messagesContainer: \"flex flex-col gap-y-1 px-4 overflow-auto\",\n inputContainer: \"w-full p-4\",\n messageBubbleCssClasses: {\n topContainer: \"first:mt-4\",\n },\n }\n);\n\n/**\n * The props for the {@link ChatPanel} component.\n *\n * @public\n */\nexport interface ChatPanelProps\n extends Omit<MessageBubbleProps, \"customCssClasses\" | \"message\">,\n Omit<ChatInputProps, \"customCssClasses\"> {\n /** A header to render at the top of the panel. */\n header?: JSX.Element;\n /**\n * CSS classes for customizing the component styling.\n */\n customCssClasses?: ChatPanelCssClasses;\n}\n\n/**\n * A component that renders a full panel for chat bot interactions. This includes\n * the message bubbles for the conversation, input box with send button, and header\n * (if provided).\n *\n * @public\n *\n * @param props - {@link ChatPanelProps}\n */\nexport function ChatPanel(props: ChatPanelProps) {\n const { header, customCssClasses } = props;\n const chat = useChatActions();\n const messages = useChatState((state) => state.conversation.messages);\n const loading = useChatState((state) => state.conversation.isLoading);\n const canSendMessage = useChatState(\n (state) => state.conversation.canSendMessage\n );\n const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n const defaultHandleApiError = useDefaultHandleApiError();\n const reportAnalyticsEvent = useReportAnalyticsEvent();\n\n useEffect(() => {\n reportAnalyticsEvent({\n action: \"CHAT_IMPRESSION\",\n });\n }, [reportAnalyticsEvent]);\n\n // Fetch the first message on load, if there are no existing messages or a request being processed\n useEffect(() => {\n if (messages.length !== 0 || !canSendMessage) {\n return;\n }\n const { stream = false, handleError } = props;\n const res = stream ? chat.streamNextMessage() : chat.getNextMessage();\n res.catch((e) => (handleError ? handleError(e) : defaultHandleApiError(e)));\n }, [chat, props, messages, defaultHandleApiError, canSendMessage]);\n\n const messagesRef = useRef<HTMLDivElement>(null);\n\n // Scroll to the bottom of the chat when the messages change\n useEffect(() => {\n messagesRef.current?.scroll({\n top: messagesRef.current?.scrollHeight,\n behavior: \"smooth\",\n });\n }, [messages]);\n\n return (\n <div className=\"yext-chat\">\n <div className={cssClasses.container}>\n {header}\n <div className={cssClasses.messagesScrollContainer}>\n <div ref={messagesRef} className={cssClasses.messagesContainer}>\n {messages.map((message, index) => (\n <MessageBubble\n {...props}\n customCssClasses={cssClasses.messageBubbleCssClasses}\n key={index}\n message={message}\n />\n ))}\n {loading && <LoadingDots />}\n </div>\n </div>\n <div className={cssClasses.inputContainer}>\n <ChatInput {...props} customCssClasses={cssClasses.inputCssClasses} />\n </div>\n </div>\n </div>\n );\n}\n"],"names":["withStylelessCssClasses","useChatActions","useChatState","useComposedCssClasses","useDefaultHandleApiError","useReportAnalyticsEvent","useEffect","useRef","_jsx","_jsxs","_createElement","MessageBubble","LoadingDots","ChatInput"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPopUp.d.ts","sourceRoot":"","sources":["../../../../src/components/ChatPopUp.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAa,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAEL,oBAAoB,EACpB,eAAe,EAChB,MAAM,cAAc,CAAC;AAMtB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AA8BD;;;;GAIG;AACH,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,kBAAkB,CAAC,EACnE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,kBAAkB,CAAC;IACrD,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAClC;;OAEG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"ChatPopUp.d.ts","sourceRoot":"","sources":["../../../../src/components/ChatPopUp.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAa,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAEL,oBAAoB,EACpB,eAAe,EAChB,MAAM,cAAc,CAAC;AAMtB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AA8BD;;;;GAIG;AACH,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,kBAAkB,CAAC,EACnE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,kBAAkB,CAAC;IACrD,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAClC;;OAEG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAkE9C"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var Chat = require('../icons/Chat.js');
|
|
6
|
+
var ChatPanel = require('./ChatPanel.js');
|
|
7
|
+
var ChatHeader = require('./ChatHeader.js');
|
|
8
|
+
var tailwindMerge = require('tailwind-merge');
|
|
9
|
+
var useComposedCssClasses = require('../hooks/useComposedCssClasses.js');
|
|
10
|
+
var withStylelessCssClasses = require('../utils/withStylelessCssClasses.js');
|
|
11
|
+
var useReportAnalyticsEvent = require('../hooks/useReportAnalyticsEvent.js');
|
|
12
|
+
|
|
13
13
|
const fixedPosition = "fixed bottom-6 right-4 lg:bottom-14 lg:right-10 z-50 ";
|
|
14
|
-
const builtInCssClasses =
|
|
14
|
+
const builtInCssClasses = withStylelessCssClasses.withStylelessCssClasses("PopUp", {
|
|
15
15
|
container: "transition-all",
|
|
16
16
|
panel: fixedPosition +
|
|
17
17
|
"w-80 max-[480px]:right-0 max-[480px]:bottom-0 max-[480px]:w-full max-[480px]:h-full lg:w-96 h-[75vh]",
|
|
@@ -41,24 +41,25 @@ const builtInCssClasses = (0, withStylelessCssClasses_1.withStylelessCssClasses)
|
|
|
41
41
|
*/
|
|
42
42
|
function ChatPopUp(props) {
|
|
43
43
|
const { openPanelButtonIcon, customCssClasses, showRestartButton = true, onClose: customOnClose, title, } = props;
|
|
44
|
-
const reportAnalyticsEvent =
|
|
45
|
-
|
|
44
|
+
const reportAnalyticsEvent = useReportAnalyticsEvent.useReportAnalyticsEvent();
|
|
45
|
+
react.useEffect(() => {
|
|
46
46
|
reportAnalyticsEvent({
|
|
47
47
|
action: "CHAT_IMPRESSION",
|
|
48
48
|
});
|
|
49
49
|
}, [reportAnalyticsEvent]);
|
|
50
|
-
const [showChat, setShowChat] =
|
|
51
|
-
const onClick =
|
|
50
|
+
const [showChat, setShowChat] = react.useState(false);
|
|
51
|
+
const onClick = react.useCallback(() => {
|
|
52
52
|
setShowChat(!showChat);
|
|
53
53
|
}, [showChat]);
|
|
54
|
-
const onClose =
|
|
54
|
+
const onClose = react.useCallback(() => {
|
|
55
55
|
setShowChat(false);
|
|
56
56
|
customOnClose?.();
|
|
57
57
|
}, [customOnClose]);
|
|
58
|
-
const cssClasses =
|
|
59
|
-
const panelCssClasses =
|
|
60
|
-
const buttonCssClasses =
|
|
61
|
-
return ((
|
|
58
|
+
const cssClasses = useComposedCssClasses.useComposedCssClasses(builtInCssClasses, customCssClasses);
|
|
59
|
+
const panelCssClasses = tailwindMerge.twMerge(cssClasses.panel, showChat ? cssClasses.panel__display : cssClasses.panel__hidden);
|
|
60
|
+
const buttonCssClasses = tailwindMerge.twMerge(cssClasses.button, showChat ? cssClasses.button__hidden : cssClasses.button__display);
|
|
61
|
+
return (jsxRuntime.jsx("div", { className: "yext-chat", children: jsxRuntime.jsxs("div", { className: cssClasses.container, children: [jsxRuntime.jsx("div", { className: panelCssClasses, "aria-label": "Chat Popup Panel", children: jsxRuntime.jsx(ChatPanel.ChatPanel, { ...props, customCssClasses: cssClasses.panelCssClasses, header: jsxRuntime.jsx(ChatHeader.ChatHeader, { title: title, showRestartButton: showRestartButton, showCloseButton: true, onClose: onClose, customCssClasses: cssClasses.headerCssClasses }) }) }), jsxRuntime.jsx("button", { "aria-label": "Chat Popup Button", onClick: onClick, className: buttonCssClasses, children: openPanelButtonIcon ?? (jsxRuntime.jsx(Chat.ChatIcon, { className: cssClasses.buttonIcon })) })] }) }));
|
|
62
62
|
}
|
|
63
|
+
|
|
63
64
|
exports.ChatPopUp = ChatPopUp;
|
|
64
|
-
//# sourceMappingURL=ChatPopUp.js.map
|
|
65
|
+
//# sourceMappingURL=ChatPopUp.js.map
|