@xapp/chat-widget 1.64.2 → 1.65.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/components/ActionButton/ActionButton.d.ts +0 -0
- package/dist/components/AdminBar/AdminBar.d.ts +0 -0
- package/dist/components/ChatWidget/ChatWidget.stories.d.ts +4 -0
- package/dist/components/CtaBubble/CtaBubbleContainer.d.ts +0 -0
- package/dist/index.css +2 -2
- package/dist/index.es.js +55 -35
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +55 -35
- package/dist/index.js.map +1 -1
- package/dist/xapp-chat-widget.css +1 -1
- package/dist/xapp-chat-widget.js +3 -3
- package/dist/xapp-chat-widget.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -12,14 +12,15 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
12
12
|
var React__default$1 = /*#__PURE__*/_interopDefaultLegacy(React$1);
|
|
13
13
|
var thunk__default = /*#__PURE__*/_interopDefaultLegacy(thunk);
|
|
14
14
|
|
|
15
|
-
var ActionButton = function (
|
|
15
|
+
var ActionButton = function (_a) {
|
|
16
|
+
var label = _a.label, disable = _a.disable, type = _a.type, addClass = _a.addClass, onClick = _a.onClick;
|
|
16
17
|
function handleClick(ev) {
|
|
17
18
|
ev.stopPropagation();
|
|
18
|
-
if (
|
|
19
|
-
|
|
19
|
+
if (onClick) {
|
|
20
|
+
onClick(label);
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
return (React__default$1["default"].createElement("button", { type:
|
|
23
|
+
return (React__default$1["default"].createElement("button", { disabled: disable, type: type, className: "action-button ".concat(addClass), onClick: handleClick }, label));
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
var defaultServerUrl = "";
|
|
@@ -678,40 +679,45 @@ var CtaBubble = function (props) {
|
|
|
678
679
|
};
|
|
679
680
|
|
|
680
681
|
var CtaBubbleContainer = function (props) {
|
|
681
|
-
var visible = props.visible, timeout = props.timeout, delay = props.delay, animate = props.animate, buttonAnimation = props.buttonAnimation, onClick = props.onClick;
|
|
682
|
+
var visible = props.visible, timeout = props.timeout, delay = props.delay, animate = props.animate, buttonAnimation = props.buttonAnimation, onClick = props.onClick, children = props.children;
|
|
682
683
|
var startTime = React$1.useMemo(function () {
|
|
683
|
-
|
|
684
|
-
return new Date().valueOf();
|
|
685
|
-
}
|
|
686
|
-
return undefined;
|
|
684
|
+
return visible ? new Date().valueOf() : undefined;
|
|
687
685
|
}, [visible]);
|
|
688
686
|
var _a = React$1.useState(false), showBubble = _a[0], setShowBubble = _a[1];
|
|
687
|
+
var isMounted = React$1.useRef(true);
|
|
689
688
|
React$1.useEffect(function () {
|
|
690
|
-
var
|
|
689
|
+
var hideTimer = null;
|
|
691
690
|
if (startTime) {
|
|
692
691
|
var delayTimer_1 = setTimeout(function () {
|
|
693
|
-
if (isMounted) {
|
|
692
|
+
if (isMounted.current) {
|
|
694
693
|
setShowBubble(true);
|
|
695
694
|
}
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
};
|
|
695
|
+
if (typeof timeout === "number") {
|
|
696
|
+
hideTimer = setTimeout(function () {
|
|
697
|
+
if (isMounted.current) {
|
|
698
|
+
setShowBubble(false);
|
|
699
|
+
}
|
|
700
|
+
}, timeout);
|
|
701
|
+
}
|
|
704
702
|
}, delay);
|
|
705
703
|
return function () {
|
|
706
|
-
|
|
704
|
+
if (hideTimer) {
|
|
705
|
+
clearTimeout(hideTimer);
|
|
706
|
+
}
|
|
707
707
|
clearTimeout(delayTimer_1);
|
|
708
|
+
isMounted.current = false;
|
|
708
709
|
};
|
|
709
710
|
}
|
|
711
|
+
// Return a cleanup function for the case where startTime is undefined
|
|
710
712
|
return function () {
|
|
711
|
-
|
|
713
|
+
if (hideTimer) {
|
|
714
|
+
clearTimeout(hideTimer);
|
|
715
|
+
}
|
|
716
|
+
isMounted.current = false;
|
|
712
717
|
};
|
|
713
718
|
}, [startTime, timeout, delay]);
|
|
714
|
-
|
|
719
|
+
console.log("visible ".concat(visible, " showBubble ").concat(showBubble));
|
|
720
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, visible && showBubble && React__default$1["default"].createElement(CtaBubble, { onClick: onClick, animate: animate, buttonAnimation: buttonAnimation }, children)));
|
|
715
721
|
};
|
|
716
722
|
|
|
717
723
|
var ChatButton = function (_a) {
|
|
@@ -753,7 +759,7 @@ var ChatButton = function (_a) {
|
|
|
753
759
|
setAnimate(false);
|
|
754
760
|
}, configToApply.animationTimeout);
|
|
755
761
|
}
|
|
756
|
-
else {
|
|
762
|
+
else if (configToApply === null || configToApply === void 0 ? void 0 : configToApply.animation) {
|
|
757
763
|
// No delay or timeout, start animation immediately
|
|
758
764
|
setAnimate(true);
|
|
759
765
|
}
|
|
@@ -796,8 +802,8 @@ var ChatButton = function (_a) {
|
|
|
796
802
|
// Fallback to default SVG
|
|
797
803
|
React__default$1["default"].createElement("svg", { width: svgSize, height: svgSize, viewBox: "0 0 22 22" },
|
|
798
804
|
React__default$1["default"].createElement("path", { d: "M13 22l-4-6H2c-1.11-.043-2-.935-2-2V2C0 .89.89 0 2 0h18c1.11 0 2 .892 2 2v12c0 1.067-.89 1.957-2 2h-3l-4 6zm3-8h4c-.005.3-.01-12 0-12-.01.004-18 .006-18 0 .005.006 0 12 0 12h8l3 5 3-5z", fill: "#FFF", fillRule: "evenodd" })))),
|
|
799
|
-
|
|
800
|
-
React__default$1["default"].createElement(CtaBubbleContainer, { timeout: configToApply === null || configToApply === void 0 ? void 0 : configToApply.timeout, delay: configToApply === null || configToApply === void 0 ? void 0 : configToApply.delay, animate: animate, buttonAnimation: animation, visible: !visible },
|
|
805
|
+
configToApply && configToApply.message && (React__default$1["default"].createElement("div", { className: "xapp-chat-button__cta" },
|
|
806
|
+
React__default$1["default"].createElement(CtaBubbleContainer, { timeout: configToApply === null || configToApply === void 0 ? void 0 : configToApply.timeout, delay: configToApply === null || configToApply === void 0 ? void 0 : configToApply.delay, animate: animate, buttonAnimation: animation, visible: !visible /** Why is this !visible */ }, configToApply === null || configToApply === void 0 ? void 0 : configToApply.message)))));
|
|
801
807
|
};
|
|
802
808
|
|
|
803
809
|
var ChatCard = function (props) {
|
|
@@ -7949,11 +7955,17 @@ function useSuggestions(search, context) {
|
|
|
7949
7955
|
}); }, [suggestions, suggestionIndex, execute, suggestionItem]);
|
|
7950
7956
|
}
|
|
7951
7957
|
|
|
7952
|
-
var AdminBar = function (
|
|
7958
|
+
var AdminBar = function (_a) {
|
|
7959
|
+
var onAdminJoin = _a.onAdminJoin;
|
|
7953
7960
|
var name = React$1.useRef(null);
|
|
7954
7961
|
// We can manage this locally
|
|
7955
7962
|
// const hasAdminJoined = useSelector<ChatState, boolean | undefined>(state => state.hasAdminJoined);
|
|
7956
|
-
var
|
|
7963
|
+
var _b = React$1.useState(false), joined = _b[0], setJoined = _b[1];
|
|
7964
|
+
var _c = React$1.useState(""), inputName = _c[0], setInputName = _c[1];
|
|
7965
|
+
function handleInputChange(event) {
|
|
7966
|
+
setInputName(event.target.value);
|
|
7967
|
+
}
|
|
7968
|
+
var disable = inputName === "" || inputName === undefined;
|
|
7957
7969
|
var dispatch = useChatServerDispatch();
|
|
7958
7970
|
function onSubmit(event) {
|
|
7959
7971
|
var _a;
|
|
@@ -7961,18 +7973,21 @@ var AdminBar = function (_props) {
|
|
|
7961
7973
|
if (!joined) {
|
|
7962
7974
|
dispatch(sendBargeIn((_a = name.current) === null || _a === void 0 ? void 0 : _a.value));
|
|
7963
7975
|
setJoined(true);
|
|
7976
|
+
onAdminJoin(true);
|
|
7964
7977
|
}
|
|
7965
7978
|
else {
|
|
7966
7979
|
dispatch(sendBargeOut());
|
|
7967
7980
|
setJoined(false);
|
|
7981
|
+
onAdminJoin(false);
|
|
7982
|
+
setInputName("");
|
|
7968
7983
|
}
|
|
7969
7984
|
}
|
|
7970
7985
|
function renderJoin() {
|
|
7971
7986
|
return (React__default$1["default"].createElement("form", { className: "xappw-admin-input-form", onSubmit: onSubmit },
|
|
7972
7987
|
React__default$1["default"].createElement("div", { className: "xappw-admin-input-form__buttons" },
|
|
7973
|
-
React__default$1["default"].createElement(ActionButton, { addClass: "xappw-admin-input-form__btn", type: "submit", label: "Join" })),
|
|
7988
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "xappw-admin-input-form__btn", type: "submit", label: "Join", disable: disable })),
|
|
7974
7989
|
React__default$1["default"].createElement("div", { className: "xappw-admin-input" },
|
|
7975
|
-
React__default$1["default"].createElement("input", { ref: name, id: "adminBarInput", placeholder: "Type your name here...", className: "xappw-admin-input__input" }))));
|
|
7990
|
+
React__default$1["default"].createElement("input", { ref: name, id: "adminBarInput", placeholder: "Type your name here...", className: "xappw-admin-input__input", onChange: handleInputChange }))));
|
|
7976
7991
|
}
|
|
7977
7992
|
function renderLeave() {
|
|
7978
7993
|
return (React__default$1["default"].createElement("form", { className: "xappw-admin-input-form", onSubmit: onSubmit },
|
|
@@ -8244,10 +8259,11 @@ var ChatFooter = function (props) {
|
|
|
8244
8259
|
var menuButtonTabIndex = (_a = menuConfig === null || menuConfig === void 0 ? void 0 : menuConfig.button) === null || _a === void 0 ? void 0 : _a.tabIndex;
|
|
8245
8260
|
var menuItems = React$1.useMemo(function () { return menuItemsRaw ? menuItemsRaw : []; }, [menuItemsRaw]);
|
|
8246
8261
|
var brandingEnabled = (_b = footerConfig === null || footerConfig === void 0 ? void 0 : footerConfig.branding) === null || _b === void 0 ? void 0 : _b.enabled;
|
|
8247
|
-
var _e = React$1.useState(
|
|
8262
|
+
var _e = React$1.useState(false), isAdminJoined = _e[0], setAdminJoined = _e[1];
|
|
8263
|
+
var _f = React$1.useState({
|
|
8248
8264
|
text: "",
|
|
8249
8265
|
formats: []
|
|
8250
|
-
}), input =
|
|
8266
|
+
}), input = _f[0], setInput = _f[1];
|
|
8251
8267
|
function toggleDrawer() {
|
|
8252
8268
|
var newDrawer = !drawerOpen;
|
|
8253
8269
|
setDrawerState(newDrawer);
|
|
@@ -8283,6 +8299,9 @@ var ChatFooter = function (props) {
|
|
|
8283
8299
|
setInput(data);
|
|
8284
8300
|
setSuggestionSearch(data.text);
|
|
8285
8301
|
}, []);
|
|
8302
|
+
var handleAdminJoin = function (status) {
|
|
8303
|
+
setAdminJoined(status);
|
|
8304
|
+
};
|
|
8286
8305
|
return (React__default$1["default"].createElement("div", { className: "chat-footer background-footer", "aria-label": menuItems.length ? "to open menu click a button above the rounded rectangle at the bottom of widget" : "", "aria-hidden": false },
|
|
8287
8306
|
showMenu && menuItems.length ?
|
|
8288
8307
|
React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
@@ -8290,10 +8309,11 @@ var ChatFooter = function (props) {
|
|
|
8290
8309
|
React__default$1["default"].createElement("div", { className: "chat-footer__menu-icon" },
|
|
8291
8310
|
React__default$1["default"].createElement(DrawerBars, { tabIndex: menuButtonTabIndex, onToggle: toggleDrawer }))) : React__default$1["default"].createElement(React__default$1["default"].Fragment, null),
|
|
8292
8311
|
React__default$1["default"].createElement(Suggestions, { className: "xappw-chat-footer__suggestions", data: suggestions.suggestions, index: suggestions.index, searchTerms: suggestionSearch, onItemClick: handleItemClick, onItemUse: handleItemUse }),
|
|
8293
|
-
props.isAdmin && props.isChatting && props.visible && React__default$1["default"].createElement(AdminBar,
|
|
8294
|
-
React__default$1["default"].createElement(
|
|
8295
|
-
|
|
8296
|
-
|
|
8312
|
+
props.isAdmin && props.isChatting && props.visible && React__default$1["default"].createElement(AdminBar, { onAdminJoin: handleAdminJoin }),
|
|
8313
|
+
React__default$1["default"].createElement("div", { style: { pointerEvents: isAdminJoined ? "auto" : "none", opacity: isAdminJoined ? 1 : 0.5 } },
|
|
8314
|
+
React__default$1["default"].createElement(Input, { addClass: "chat-footer__input " + (props.isChatting && props.visible ? "visible" : ""), suggestion: suggestions.item, value: input, placeholder: placeholder, sendButtonIcon: sendButtonIcon, footerConfig: footerConfig, inputConfig: inputConfig, onSubmit: handleSubmit, onChange: handleChange, onSuggestionCommand: suggestions.execute,
|
|
8315
|
+
// onFocus={this.inputOnFocus}
|
|
8316
|
+
onFileUpload: props.onFileUpload })),
|
|
8297
8317
|
brandingEnabled && React__default$1["default"].createElement(ChatBranding, { text: 'Powered by [XAPP AI](https://xapp.ai)' })));
|
|
8298
8318
|
};
|
|
8299
8319
|
|