@bigbinary/neeto-molecules 1.12.2 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdaptiveInput.js +84 -0
- package/dist/AdaptiveInput.js.map +1 -0
- package/dist/NeetoWidget.js +35 -45
- package/dist/NeetoWidget.js.map +1 -1
- package/dist/cjs/AdaptiveInput.js +94 -0
- package/dist/cjs/AdaptiveInput.js.map +1 -0
- package/dist/cjs/NeetoWidget.js +35 -45
- package/dist/cjs/NeetoWidget.js.map +1 -1
- package/package.json +1 -1
- package/src/translations/en.json +9 -6
- package/types/AdaptiveInput.d.ts +51 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { _ as _defineProperty } from './defineProperty-549061a7.js';
|
|
2
|
+
import { _ as _extends } from './extends-093996c9.js';
|
|
3
|
+
import { _ as _objectWithoutProperties } from './objectWithoutProperties-a0edb288.js';
|
|
4
|
+
import React__default, { forwardRef } from 'react';
|
|
5
|
+
import classnames from 'classnames';
|
|
6
|
+
import { Textarea } from '@bigbinary/neetoui';
|
|
7
|
+
import { n } from './inject-css-c86de496.js';
|
|
8
|
+
import { _ as _slicedToArray } from './slicedToArray-b4278ecd.js';
|
|
9
|
+
import { useField } from 'formik';
|
|
10
|
+
|
|
11
|
+
var css = ".neeto-molecules-adaptive-input textarea{resize:none}.neeto-molecules-adaptive-input .neeto-ui-input.neeto-ui-input--small{--neeto-ui-textarea-padding-x:8px;--neeto-ui-textarea-padding-y:4px}.neeto-molecules-adaptive-input .neeto-ui-input.neeto-ui-input--medium{--neeto-ui-textarea-padding-x:8px;--neeto-ui-textarea-padding-y:5px}.neeto-molecules-adaptive-input .neeto-ui-input.neeto-ui-input--large{--neeto-ui-textarea-padding-x:12px;--neeto-ui-textarea-padding-y:8px}.neeto-molecules-adaptive-input__suffix{bottom:0;position:absolute;right:0}";
|
|
12
|
+
n(css,{});
|
|
13
|
+
|
|
14
|
+
var _excluded$1 = ["label", "className", "size", "required", "disabled", "suffix"];
|
|
15
|
+
|
|
16
|
+
// eslint-disable-next-line @bigbinary/neeto/no-dangling-constants
|
|
17
|
+
var SIZES = {
|
|
18
|
+
small: "small",
|
|
19
|
+
medium: "medium",
|
|
20
|
+
large: "large"
|
|
21
|
+
};
|
|
22
|
+
var AdaptiveInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
23
|
+
var _ref$label = _ref.label,
|
|
24
|
+
label = _ref$label === void 0 ? "" : _ref$label,
|
|
25
|
+
_ref$className = _ref.className,
|
|
26
|
+
className = _ref$className === void 0 ? "" : _ref$className,
|
|
27
|
+
_ref$size = _ref.size,
|
|
28
|
+
size = _ref$size === void 0 ? SIZES.medium : _ref$size,
|
|
29
|
+
_ref$required = _ref.required,
|
|
30
|
+
required = _ref$required === void 0 ? false : _ref$required,
|
|
31
|
+
_ref$disabled = _ref.disabled,
|
|
32
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
33
|
+
_ref$suffix = _ref.suffix,
|
|
34
|
+
suffix = _ref$suffix === void 0 ? null : _ref$suffix,
|
|
35
|
+
otherProps = _objectWithoutProperties(_ref, _excluded$1);
|
|
36
|
+
var handleFocus = function handleFocus(element) {
|
|
37
|
+
var end = element.value.length;
|
|
38
|
+
element.setSelectionRange(end, end);
|
|
39
|
+
};
|
|
40
|
+
var handleKeyDown = function handleKeyDown(event) {
|
|
41
|
+
var _otherProps$onSubmit;
|
|
42
|
+
if (event.key !== "Enter") return;
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
(_otherProps$onSubmit = otherProps.onSubmit) === null || _otherProps$onSubmit === void 0 ? void 0 : _otherProps$onSubmit.call(otherProps);
|
|
45
|
+
};
|
|
46
|
+
return /*#__PURE__*/React__default.createElement("div", {
|
|
47
|
+
className: "relative w-full"
|
|
48
|
+
}, /*#__PURE__*/React__default.createElement(Textarea, _extends(_defineProperty(_defineProperty(_defineProperty({
|
|
49
|
+
disabled: disabled,
|
|
50
|
+
label: label,
|
|
51
|
+
ref: ref,
|
|
52
|
+
required: required,
|
|
53
|
+
size: size,
|
|
54
|
+
"data-cy": "neeto-molecules-adaptive-input",
|
|
55
|
+
"data-testid": "neeto-molecules-adaptive-input",
|
|
56
|
+
rows: 1
|
|
57
|
+
}, "size", "small"), "className", classnames("neeto-molecules-adaptive-input", {
|
|
58
|
+
"neeto-ui-input--disabled": !!disabled
|
|
59
|
+
}, className)), "onKeyDown", handleKeyDown), otherProps, {
|
|
60
|
+
onFocus: function onFocus(_ref2) {
|
|
61
|
+
var target = _ref2.target;
|
|
62
|
+
return handleFocus(target);
|
|
63
|
+
}
|
|
64
|
+
})), suffix && /*#__PURE__*/React__default.createElement("div", {
|
|
65
|
+
className: "neeto-molecules-adaptive-input__suffix"
|
|
66
|
+
}, suffix));
|
|
67
|
+
});
|
|
68
|
+
AdaptiveInput.displayName = "AdaptiveInput";
|
|
69
|
+
|
|
70
|
+
var _excluded = ["name"];
|
|
71
|
+
var FormikAdaptiveInput = function FormikAdaptiveInput(_ref) {
|
|
72
|
+
var name = _ref.name,
|
|
73
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
74
|
+
var _useField = useField(name),
|
|
75
|
+
_useField2 = _slicedToArray(_useField, 2),
|
|
76
|
+
field = _useField2[0],
|
|
77
|
+
meta = _useField2[1];
|
|
78
|
+
return /*#__PURE__*/React__default.createElement(AdaptiveInput, _extends({}, field, {
|
|
79
|
+
error: meta.touched ? meta.error : ""
|
|
80
|
+
}, props));
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export { AdaptiveInput, FormikAdaptiveInput };
|
|
84
|
+
//# sourceMappingURL=AdaptiveInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptiveInput.js","sources":["../src/components/AdaptiveInput/AdaptiveInput.jsx","../src/components/AdaptiveInput/FormikAdaptiveInput.jsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport classnames from \"classnames\";\nimport { Textarea } from \"neetoui\";\nimport PropTypes from \"prop-types\";\n\nimport \"./adaptiveInput.scss\";\n\n// eslint-disable-next-line @bigbinary/neeto/no-dangling-constants\nconst SIZES = { small: \"small\", medium: \"medium\", large: \"large\" };\n\nconst AdaptiveInput = forwardRef(\n (\n {\n label = \"\",\n className = \"\",\n size = SIZES.medium,\n required = false,\n disabled = false,\n suffix = null,\n ...otherProps\n },\n ref\n ) => {\n const handleFocus = element => {\n const end = element.value.length;\n element.setSelectionRange(end, end);\n };\n\n const handleKeyDown = event => {\n if (event.key !== \"Enter\") return;\n\n event.preventDefault();\n otherProps.onSubmit?.();\n };\n\n return (\n <div className=\"relative w-full\">\n <Textarea\n {...{ disabled, label, ref, required, size }}\n data-cy=\"neeto-molecules-adaptive-input\"\n data-testid=\"neeto-molecules-adaptive-input\"\n rows={1}\n size=\"small\"\n className={classnames(\n \"neeto-molecules-adaptive-input\",\n { \"neeto-ui-input--disabled\": !!disabled },\n className\n )}\n onKeyDown={handleKeyDown}\n {...otherProps}\n onFocus={({ target }) => handleFocus(target)}\n />\n {suffix && (\n <div className=\"neeto-molecules-adaptive-input__suffix\">{suffix}</div>\n )}\n </div>\n );\n }\n);\n\nAdaptiveInput.displayName = \"AdaptiveInput\";\n\nAdaptiveInput.propTypes = {\n /**\n * To provide additional classes to the component.\n */\n className: PropTypes.string,\n /**\n * To specify the text to be displayed above the input.\n */\n label: PropTypes.string,\n /**\n * To specify the size of the input field\n */\n size: PropTypes.oneOf(Object.values(SIZES)),\n /**\n * To specify whether the input field is required or not.\n */\n required: PropTypes.bool,\n /**\n * To specify whether the input field is disabled or not.\n */\n disabled: PropTypes.bool,\n /**\n * To specify the content to be added at the end of the input field.\n */\n suffix: PropTypes.node,\n};\n\nexport default AdaptiveInput;\n","import React from \"react\";\n\nimport { useField } from \"formik\";\n\nimport AdaptiveInput from \"./AdaptiveInput\";\n\nconst FormikAdaptiveInput = ({ name, ...props }) => {\n const [field, meta] = useField(name);\n\n return (\n <AdaptiveInput\n {...field}\n error={meta.touched ? meta.error : \"\"}\n {...props}\n />\n );\n};\n\nexport default FormikAdaptiveInput;\n"],"names":["SIZES","small","medium","large","AdaptiveInput","forwardRef","_ref","ref","_ref$label","label","_ref$className","className","_ref$size","size","_ref$required","required","_ref$disabled","disabled","_ref$suffix","suffix","otherProps","_objectWithoutProperties","_excluded","handleFocus","element","end","value","length","setSelectionRange","handleKeyDown","event","_otherProps$onSubmit","key","preventDefault","onSubmit","call","React","createElement","Textarea","_extends","_defineProperty","rows","classnames","onFocus","_ref2","target","displayName","FormikAdaptiveInput","name","props","_useField","useField","_useField2","_slicedToArray","field","meta","error","touched"],"mappings":"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"}
|
package/dist/NeetoWidget.js
CHANGED
|
@@ -93,7 +93,6 @@ var WIDGET_KB_HELP_URL = {
|
|
|
93
93
|
chat: "".concat(CHAT_WIDGET_KB_BASE_URL, "/categories/installation"),
|
|
94
94
|
replay: "".concat(REPLAY_WIDGET_KB_BASE_URL, "/categories/widget-installation-usage")
|
|
95
95
|
};
|
|
96
|
-
var USE_NEETO_WIDGET_NPM_PAGE_URL = "https://www.npmjs.com/package/@bigbinary/react-use-neeto-widget";
|
|
97
96
|
|
|
98
97
|
var ChatWidgetBody = function ChatWidgetBody(_ref) {
|
|
99
98
|
var widgets = _ref.widgets;
|
|
@@ -505,15 +504,7 @@ var SelectionSwitches = function SelectionSwitches(_ref) {
|
|
|
505
504
|
selectedWidgets: selectedWidgets,
|
|
506
505
|
updateSelectedWidgets: updateSelectedWidgets,
|
|
507
506
|
widget: primaryWidget
|
|
508
|
-
}), /*#__PURE__*/React__default.createElement("div", {
|
|
509
|
-
className: "flex items-center space-x-1"
|
|
510
|
-
}, /*#__PURE__*/React__default.createElement(Label, null, "neeto", capitalize(primaryWidget)), /*#__PURE__*/React__default.createElement("a", {
|
|
511
|
-
href: WIDGET_KB_HELP_URL[primaryApp],
|
|
512
|
-
rel: "noreferrer",
|
|
513
|
-
target: "_blank"
|
|
514
|
-
}, /*#__PURE__*/React__default.createElement(Info, {
|
|
515
|
-
size: 16
|
|
516
|
-
})))), /*#__PURE__*/React__default.createElement("div", {
|
|
507
|
+
}), /*#__PURE__*/React__default.createElement(Label, null, "neeto", capitalize(primaryWidget))), /*#__PURE__*/React__default.createElement("div", {
|
|
517
508
|
className: "flex flex-wrap items-center gap-6 sm:justify-end"
|
|
518
509
|
}, WIDGET_TYPES_VALUES.map(function (widget, index) {
|
|
519
510
|
return primaryApp !== widget && /*#__PURE__*/React__default.createElement("div", {
|
|
@@ -755,14 +746,9 @@ var EmbedCode = function EmbedCode(_ref) {
|
|
|
755
746
|
style: "body2",
|
|
756
747
|
weight: "semibold"
|
|
757
748
|
}),
|
|
758
|
-
|
|
759
|
-
component: "span",
|
|
760
|
-
style: "body2",
|
|
761
|
-
weight: "normal"
|
|
762
|
-
}),
|
|
763
|
-
a: /*#__PURE__*/React__default.createElement("a", {
|
|
749
|
+
Link: /*#__PURE__*/React__default.createElement("a", {
|
|
764
750
|
className: "neeto-ui-text-primary-800",
|
|
765
|
-
href:
|
|
751
|
+
href: WIDGET_KB_HELP_URL[primaryApp],
|
|
766
752
|
rel: "noreferrer",
|
|
767
753
|
target: "_blank"
|
|
768
754
|
})
|
|
@@ -777,45 +763,49 @@ var EmbedCode = function EmbedCode(_ref) {
|
|
|
777
763
|
selectedFramework: selectedFramework,
|
|
778
764
|
setSelectedFramework: setSelectedFramework
|
|
779
765
|
},
|
|
766
|
+
title: t("neetoMolecules.widget.title.userIdentity"),
|
|
780
767
|
codeString: getSampleUserIdentity(enabledWidgets, selectedFramework.value),
|
|
781
768
|
sendViaEmail: function sendViaEmail() {
|
|
782
769
|
return handleSendViaEmail(EMAIL_TYPES.userIdentity);
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
770
|
+
}
|
|
771
|
+
})), /*#__PURE__*/React__default.createElement(Trans, {
|
|
772
|
+
i18nKey: "neetoMolecules.widget.installation.instructions.userIdentity",
|
|
773
|
+
components: {
|
|
774
|
+
p: /*#__PURE__*/React__default.createElement(Typography, {
|
|
775
|
+
style: "body2"
|
|
776
|
+
}),
|
|
777
|
+
Link: /*#__PURE__*/React__default.createElement("a", {
|
|
778
|
+
className: "neeto-ui-text-primary-800",
|
|
779
|
+
rel: "noreferrer",
|
|
780
|
+
target: "_blank",
|
|
781
|
+
href: enabledWidgets.chat ? NEETO_CHAT_USER_IDENTITY_URL : NEETO_REPLAY_CONFIGURE_URL
|
|
782
|
+
})
|
|
783
|
+
}
|
|
784
|
+
})) : null, shouldShowSessionContext ? /*#__PURE__*/React__default.createElement("div", {
|
|
797
785
|
className: "w-full flex-grow flex-col items-center justify-start"
|
|
798
786
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
799
787
|
className: "mx-auto mb-2 w-full"
|
|
800
788
|
}, /*#__PURE__*/React__default.createElement(CodeBlock, {
|
|
801
789
|
className: "neeto-ui-bg-primary-100 neeto-ui-rounded-lg",
|
|
802
790
|
codeString: SAMPLE_CONTEXT_CODE_STRING,
|
|
791
|
+
title: t("neetoMolecules.widget.title.sessionContext"),
|
|
803
792
|
sendViaEmail: function sendViaEmail() {
|
|
804
793
|
return handleSendViaEmail(EMAIL_TYPES.sessionContext);
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
794
|
+
}
|
|
795
|
+
})), /*#__PURE__*/React__default.createElement(Trans, {
|
|
796
|
+
i18nKey: "neetoMolecules.widget.installation.instructions.sessionContext",
|
|
797
|
+
components: {
|
|
798
|
+
p: /*#__PURE__*/React__default.createElement(Typography, {
|
|
799
|
+
style: "body2"
|
|
800
|
+
}),
|
|
801
|
+
Link: /*#__PURE__*/React__default.createElement("a", {
|
|
802
|
+
className: "neeto-ui-text-primary-800",
|
|
803
|
+
href: NEETO_REPLAY_CONFIGURE_URL,
|
|
804
|
+
rel: "noreferrer",
|
|
805
|
+
target: "_blank"
|
|
806
|
+
})
|
|
807
|
+
}
|
|
808
|
+
})) : null), /*#__PURE__*/React__default.createElement(CodeSnippet, _extends({
|
|
819
809
|
isPaneOpen: !!emailType && isNotEmpty(selectedWidgets),
|
|
820
810
|
onClose: function onClose() {
|
|
821
811
|
return setEmailType(EMAIL_TYPES["null"]);
|