react-input-emoji 5.0.2 → 5.1.1
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 +2 -1
- package/dist/index.es.js +68 -6
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +68 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ export default function Example() {
|
|
|
46
46
|
## Props
|
|
47
47
|
|
|
48
48
|
| Prop | Type | Default | Description |
|
|
49
|
-
|
|
49
|
+
| -------------- | -------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
50
50
|
| `value` | string | "" | The input value. |
|
|
51
51
|
| `onChange` | function | - | This function is called when the value of the input changes. The first argument is the current value. |
|
|
52
52
|
| `onResize` | function | - | This function is called when the width or the height of the input changes. The first argument is the current size value. |
|
|
@@ -62,6 +62,7 @@ export default function Example() {
|
|
|
62
62
|
| `borderColor` | string | "#EAEAEA" | The border color of the input container. |
|
|
63
63
|
| `fontSize` | number | 15 | The font size of the placeholder and input container. |
|
|
64
64
|
| `fontFamily` | string | "sans-serif" | The font family of the placeholder and input container. |
|
|
65
|
+
| `shouldReturn` | boolean | - | Allows the user to use the `Shift + Enter` or `Ctrl + Enter` keyboard shortcut to create a new line. |
|
|
65
66
|
|
|
66
67
|
## License
|
|
67
68
|
|
package/dist/index.es.js
CHANGED
|
@@ -732,6 +732,43 @@ function totalCharacters(_ref2) {
|
|
|
732
732
|
var emojisCount = (html.match(/<img/g) || []).length;
|
|
733
733
|
return textCount + emojisCount;
|
|
734
734
|
} // eslint-disable-next-line valid-jsdoc
|
|
735
|
+
/**
|
|
736
|
+
* Set caret to the end of text value
|
|
737
|
+
* @param {React.MutableRefObject<HTMLDivElement| null>} input
|
|
738
|
+
*/
|
|
739
|
+
|
|
740
|
+
function moveCaretToEnd(input) {
|
|
741
|
+
var range;
|
|
742
|
+
var selection;
|
|
743
|
+
|
|
744
|
+
if (document.createRange && input.current) {
|
|
745
|
+
range = document.createRange();
|
|
746
|
+
range.selectNodeContents(input.current);
|
|
747
|
+
range.collapse(false);
|
|
748
|
+
selection = window.getSelection();
|
|
749
|
+
|
|
750
|
+
if (selection) {
|
|
751
|
+
selection.removeAllRanges();
|
|
752
|
+
selection.addRange(range);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
/**
|
|
757
|
+
*
|
|
758
|
+
* @param {HTMLDivElement} inputDiv
|
|
759
|
+
* @return {string}
|
|
760
|
+
*/
|
|
761
|
+
|
|
762
|
+
function removeHtmlExceptBr(inputDiv) {
|
|
763
|
+
var temp = inputDiv.innerHTML.replace(/<br\s*\/?>/gi, '[BR]'); // temporarily replace <br> with placeholder
|
|
764
|
+
|
|
765
|
+
var stripped = temp.replace(/<[^>]+>/g, ''); // strip all html tags
|
|
766
|
+
|
|
767
|
+
var _final = stripped.replace(/\[BR\]/gi, '</br>'); // replace placeholders with <br>
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
return _final;
|
|
771
|
+
}
|
|
735
772
|
|
|
736
773
|
// @ts-check
|
|
737
774
|
/**
|
|
@@ -739,9 +776,11 @@ function totalCharacters(_ref2) {
|
|
|
739
776
|
*/
|
|
740
777
|
// eslint-disable-next-line valid-jsdoc
|
|
741
778
|
|
|
742
|
-
/**
|
|
779
|
+
/**
|
|
780
|
+
* @param {boolean} shouldReturn
|
|
781
|
+
*/
|
|
743
782
|
|
|
744
|
-
function useSanitize() {
|
|
783
|
+
function useSanitize(shouldReturn) {
|
|
745
784
|
/** @type {React.MutableRefObject<SanitizeFn[]>} */
|
|
746
785
|
var sanitizeFnsRef = useRef([]);
|
|
747
786
|
var sanitizedTextRef = useRef("");
|
|
@@ -756,7 +795,7 @@ function useSanitize() {
|
|
|
756
795
|
var result = sanitizeFnsRef.current.reduce(function (acc, fn) {
|
|
757
796
|
return fn(acc);
|
|
758
797
|
}, html);
|
|
759
|
-
result = replaceAllHtmlToString(result);
|
|
798
|
+
result = replaceAllHtmlToString(result, shouldReturn);
|
|
760
799
|
sanitizedTextRef.current = result;
|
|
761
800
|
return result;
|
|
762
801
|
}, []);
|
|
@@ -769,13 +808,21 @@ function useSanitize() {
|
|
|
769
808
|
/**
|
|
770
809
|
*
|
|
771
810
|
* @param {string} html
|
|
811
|
+
* @param {boolean} shouldReturn
|
|
772
812
|
* @return {string}
|
|
773
813
|
*/
|
|
774
814
|
|
|
775
|
-
function replaceAllHtmlToString(html) {
|
|
815
|
+
function replaceAllHtmlToString(html, shouldReturn) {
|
|
776
816
|
var container = document.createElement("div");
|
|
777
817
|
container.innerHTML = html;
|
|
778
|
-
var text
|
|
818
|
+
var text;
|
|
819
|
+
|
|
820
|
+
if (shouldReturn) {
|
|
821
|
+
text = removeHtmlExceptBr(container);
|
|
822
|
+
} else {
|
|
823
|
+
text = container.innerText || "";
|
|
824
|
+
} // remove all ↵ for safari
|
|
825
|
+
|
|
779
826
|
|
|
780
827
|
text = text.replace(/\n/gi, "");
|
|
781
828
|
return text;
|
|
@@ -883,6 +930,7 @@ var _excluded = ["placeholder", "style", "tabIndex", "className", "onChange"];
|
|
|
883
930
|
* @property {(event: React.KeyboardEvent) => void} onArrowUp
|
|
884
931
|
* @property {(event: React.KeyboardEvent) => void} onArrowDown
|
|
885
932
|
* @property {(event: React.KeyboardEvent) => void} onEnter
|
|
933
|
+
* @property {boolean} shouldReturn
|
|
886
934
|
* @property {(event: React.ClipboardEvent) => void} onCopy
|
|
887
935
|
* @property {(event: React.ClipboardEvent) => void} onPaste
|
|
888
936
|
* @property {string} placeholder
|
|
@@ -997,6 +1045,16 @@ var TextInput = function TextInput(_ref, ref) {
|
|
|
997
1045
|
*/
|
|
998
1046
|
|
|
999
1047
|
function handleKeyDown(event) {
|
|
1048
|
+
if (event.key === "Enter" && (event.shiftKey === true || event.ctrlKey === true) && props.shouldReturn) {
|
|
1049
|
+
event.preventDefault();
|
|
1050
|
+
|
|
1051
|
+
if (textInputRef.current) {
|
|
1052
|
+
textInputRef.current.innerHTML = "".concat(textInputRef.current.innerHTML, "</br></br>");
|
|
1053
|
+
moveCaretToEnd(textInputRef);
|
|
1054
|
+
return;
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1000
1058
|
if (event.key === "Enter") {
|
|
1001
1059
|
props.onEnter(event);
|
|
1002
1060
|
} else if (event.key === "ArrowUp") {
|
|
@@ -4720,6 +4778,7 @@ function usePollute() {
|
|
|
4720
4778
|
* @property {() => void} onClick
|
|
4721
4779
|
* @property {() => void} onFocus
|
|
4722
4780
|
* @property {() => void=} onBlur
|
|
4781
|
+
* @property {boolean} shouldReturn
|
|
4723
4782
|
* @property {number} maxLength
|
|
4724
4783
|
* @property {boolean} keepOpened
|
|
4725
4784
|
* @property {(event: KeyboardEvent) => void} onKeyDown
|
|
@@ -4746,6 +4805,7 @@ function usePollute() {
|
|
|
4746
4805
|
function InputEmoji(props, ref) {
|
|
4747
4806
|
var onChange = props.onChange,
|
|
4748
4807
|
onEnter = props.onEnter,
|
|
4808
|
+
shouldReturn = props.shouldReturn,
|
|
4749
4809
|
onResize = props.onResize,
|
|
4750
4810
|
onClick = props.onClick,
|
|
4751
4811
|
onFocus = props.onFocus,
|
|
@@ -4775,7 +4835,7 @@ function InputEmoji(props, ref) {
|
|
|
4775
4835
|
addEventListener = _useEventListeners.addEventListener,
|
|
4776
4836
|
listeners = _useEventListeners.listeners;
|
|
4777
4837
|
|
|
4778
|
-
var _useSanitize = useSanitize(),
|
|
4838
|
+
var _useSanitize = useSanitize(props.shouldReturn),
|
|
4779
4839
|
addSanitizeFn = _useSanitize.addSanitizeFn,
|
|
4780
4840
|
sanitize = _useSanitize.sanitize,
|
|
4781
4841
|
sanitizedTextRef = _useSanitize.sanitizedTextRef;
|
|
@@ -4943,6 +5003,7 @@ function InputEmoji(props, ref) {
|
|
|
4943
5003
|
ref: textInputRef,
|
|
4944
5004
|
onCopy: handleCopy,
|
|
4945
5005
|
onPaste: handlePaste,
|
|
5006
|
+
shouldReturn: shouldReturn,
|
|
4946
5007
|
onBlur: listeners.blur.publish,
|
|
4947
5008
|
onFocus: listeners.focus.publish,
|
|
4948
5009
|
onArrowUp: listeners.arrowUp.publish,
|
|
@@ -4984,6 +5045,7 @@ InputEmojiWithRef.defaultProps = {
|
|
|
4984
5045
|
fontSize: 15,
|
|
4985
5046
|
fontFamily: "sans-serif",
|
|
4986
5047
|
tabIndex: 0,
|
|
5048
|
+
shouldReturn: false,
|
|
4987
5049
|
customEmojis: []
|
|
4988
5050
|
};
|
|
4989
5051
|
|