react-textarea-with-suggest 2.2.0 → 2.3.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/README.md +7 -1
- package/example/src/App.js +16 -1
- package/lib/components/NativeTextarea.d.ts +2 -0
- package/lib/{suggest.d.ts → components/SuggestResults.d.ts} +5 -6
- package/lib/components/SuggestResultsItem.d.ts +11 -0
- package/lib/components/TextareaWithSuggests.d.ts +26 -0
- package/lib/components/index.d.ts +2 -0
- package/lib/constants.d.ts +9 -0
- package/lib/index.d.ts +2 -25
- package/lib/index.js +1 -1
- package/lib/types.d.ts +4 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/isMobileAndTabletCheck.d.ts +5 -0
- package/lib/utils/nativeEvents.d.ts +5 -0
- package/lib/utils/syntheticEvents.d.ts +3 -0
- package/lib/utils/usePrevious.d.ts +1 -0
- package/package.json +10 -9
- package/lib/utils.d.ts +0 -11
package/README.md
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
# react-textarea-with-suggest
|
|
2
2
|
Textarea with suggest for React app v2
|
|
3
3
|
|
|
4
|
-
[](https://www.npmjs.com/package/react-textarea-with-suggest)
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+

|
|
9
|
+

|
|
10
|
+

|
|
5
11
|
|
|
6
12
|
### Last changes
|
|
7
13
|
[You can find in CHANGELOG.md](./CHANGELOG.md)
|
package/example/src/App.js
CHANGED
|
@@ -63,7 +63,22 @@ function App() {
|
|
|
63
63
|
|
|
64
64
|
return (
|
|
65
65
|
<div className="example">
|
|
66
|
-
<h1>
|
|
66
|
+
<h1>Textarea With Suggest Example page</h1>
|
|
67
|
+
|
|
68
|
+
<p>
|
|
69
|
+
You can check <code>react-textarea-with-suggest</code> npm page{" "}
|
|
70
|
+
<a
|
|
71
|
+
href="https://www.npmjs.com/package/react-textarea-with-suggest"
|
|
72
|
+
target="_blank"
|
|
73
|
+
rel="noreferrer"
|
|
74
|
+
>
|
|
75
|
+
here
|
|
76
|
+
</a>
|
|
77
|
+
</p>
|
|
78
|
+
<p>
|
|
79
|
+
You can check <code>onChange</code> and <code>onSearch</code> firing in
|
|
80
|
+
your Browser console
|
|
81
|
+
</p>
|
|
67
82
|
|
|
68
83
|
<ExampleItem
|
|
69
84
|
title="Default"
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export declare const NativeTextarea: React.ForwardRefExoticComponent<Pick<React.HTMLProps<HTMLTextAreaElement>, "value" | "target" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "cite" | "classID" | "cols" | "colSpan" | "content" | "controls" | "coords" | "crossOrigin" | "data" | "dateTime" | "default" | "defer" | "disabled" | "download" | "encType" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "height" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "label" | "list" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "multiple" | "muted" | "name" | "noValidate" | "open" | "optimum" | "pattern" | "placeholder" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "size" | "sizes" | "span" | "src" | "srcDoc" | "srcLang" | "srcSet" | "start" | "step" | "summary" | "type" | "useMap" | "width" | "wmode" | "wrap" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "nonce" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key"> & React.RefAttributes<HTMLTextAreaElement>>;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
import { Nullable } from "
|
|
3
|
-
interface SuggestProps<T> {
|
|
1
|
+
import React, { RefObject } from "react";
|
|
2
|
+
import { CustomSuggestItemRenderer, Nullable, OnItemClickHandler } from "../types";
|
|
3
|
+
export interface SuggestProps<T> {
|
|
4
4
|
className?: string;
|
|
5
5
|
textareaRef: RefObject<Nullable<HTMLTextAreaElement>>;
|
|
6
6
|
selectedItemIndex?: number;
|
|
7
7
|
values: T[];
|
|
8
8
|
isHidden?: boolean;
|
|
9
|
-
onItemClickHandler:
|
|
10
|
-
customSuggestItemRenderer?:
|
|
9
|
+
onItemClickHandler: OnItemClickHandler<T>;
|
|
10
|
+
customSuggestItemRenderer?: CustomSuggestItemRenderer<T>;
|
|
11
11
|
}
|
|
12
12
|
export declare const SuggestResults: <T extends React.ReactNode>({ textareaRef, values, isHidden, className, selectedItemIndex, customSuggestItemRenderer, onItemClickHandler, }: SuggestProps<T>) => JSX.Element | null;
|
|
13
|
-
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { CustomSuggestItemRenderer, OnItemClickHandler } from "../types";
|
|
3
|
+
interface SuggestResultsItemProps<T> {
|
|
4
|
+
item: T;
|
|
5
|
+
isSelected: boolean;
|
|
6
|
+
className?: string;
|
|
7
|
+
customSuggestItemRenderer?: CustomSuggestItemRenderer<T>;
|
|
8
|
+
onItemClickHandler: OnItemClickHandler<T>;
|
|
9
|
+
}
|
|
10
|
+
export declare const SuggestResultsItem: React.MemoExoticComponent<(<T>({ isSelected, item: itemProp, className, customSuggestItemRenderer, onItemClickHandler, }: SuggestResultsItemProps<T>) => JSX.Element)>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React textarea with suggest v2.0.0
|
|
3
|
+
*
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2019-present,
|
|
6
|
+
* by Mariia Lobareva (marialobareva97@gmail.com).
|
|
7
|
+
*
|
|
8
|
+
* LICENSE MIT.
|
|
9
|
+
*/
|
|
10
|
+
import React, { HTMLProps, ChangeEvent } from "react";
|
|
11
|
+
import { CustomSuggestItemRenderer } from "../types";
|
|
12
|
+
interface TextareaSuggestProps<SuggestItemType> extends Partial<Omit<HTMLProps<HTMLTextAreaElement>, "style">> {
|
|
13
|
+
className?: string;
|
|
14
|
+
autosizable?: boolean;
|
|
15
|
+
searchMarker?: string;
|
|
16
|
+
searchRegexp?: RegExp;
|
|
17
|
+
suggestList?: SuggestItemType[];
|
|
18
|
+
value?: string;
|
|
19
|
+
closeSuggestOnFocusOut?: boolean;
|
|
20
|
+
cancelSearchOnFocusOut?: boolean;
|
|
21
|
+
onChange?: (event: ChangeEvent<HTMLTextAreaElement>) => void;
|
|
22
|
+
onSearch: (newValue: string) => void;
|
|
23
|
+
customSuggestItemRenderer?: CustomSuggestItemRenderer<SuggestItemType>;
|
|
24
|
+
}
|
|
25
|
+
export declare const TextareaWithSuggests: <SuggestItemType extends React.ReactNode>({ autosizable, value, searchMarker, searchRegexp: searchRegexpProp, suggestList, closeSuggestOnFocusOut, cancelSearchOnFocusOut, onSearch, onChange, customSuggestItemRenderer, ...props }: TextareaSuggestProps<SuggestItemType>) => JSX.Element;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare enum KeyCodes {
|
|
2
|
+
ArrowUp = "ArrowUp",
|
|
3
|
+
ArrowDown = "ArrowDown",
|
|
4
|
+
Enter = "Enter",
|
|
5
|
+
Escape = "Escape"
|
|
6
|
+
}
|
|
7
|
+
export declare const SUPPORTED_KEYDOWN: KeyCodes[];
|
|
8
|
+
export declare const SEARCH_MARKER = "@";
|
|
9
|
+
export declare const ENDING_SYMBOLS: string[];
|
package/lib/index.d.ts
CHANGED
|
@@ -1,25 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) 2019-present,
|
|
6
|
-
* by Mariia Lobareva (marialobareva97@gmail.com).
|
|
7
|
-
*
|
|
8
|
-
* LICENSE MIT.
|
|
9
|
-
*/
|
|
10
|
-
import React, { ReactNode, HTMLProps, ChangeEvent } from "react";
|
|
11
|
-
interface TextareaSuggestProps<SuggestItemType> extends Partial<Omit<HTMLProps<HTMLTextAreaElement>, "style">> {
|
|
12
|
-
className?: string;
|
|
13
|
-
autosizable?: boolean;
|
|
14
|
-
searchMarker?: string;
|
|
15
|
-
searchRegexp?: RegExp;
|
|
16
|
-
suggestList?: SuggestItemType[];
|
|
17
|
-
value?: string;
|
|
18
|
-
closeSuggestOnFocusOut?: boolean;
|
|
19
|
-
cancelSearchOnFocusOut?: boolean;
|
|
20
|
-
onChange?: (event: ChangeEvent<HTMLTextAreaElement>) => void;
|
|
21
|
-
onSearch: (newValue: string) => void;
|
|
22
|
-
customSuggestItemRenderer?: (suggestItem: SuggestItemType) => ReactNode;
|
|
23
|
-
}
|
|
24
|
-
declare const TextareaSuggest: <SuggestItemType extends React.ReactNode>({ autosizable, value, searchMarker, searchRegexp: searchRegexpProp, suggestList, closeSuggestOnFocusOut, cancelSearchOnFocusOut, onSearch, onChange, customSuggestItemRenderer, ...props }: TextareaSuggestProps<SuggestItemType>) => JSX.Element;
|
|
25
|
-
export default TextareaSuggest;
|
|
1
|
+
import { TextareaWithSuggests } from "./components/TextareaWithSuggests";
|
|
2
|
+
export default TextareaWithSuggests;
|
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("react-textarea-autosize");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e),a=n(t),o=function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},o.apply(this,arguments)};function i(t){var n=e.useRef();return e.useEffect((function(){n.current=t}),[t]),n.current}
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("react-textarea-autosize");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e),a=n(t),o=function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},o.apply(this,arguments)};function i(t){var n=e.useRef();return e.useEffect((function(){n.current=t}),[t]),n.current}var c,l=function(e){var t=!1,n=!1;return{nativeEvent:e,currentTarget:e.currentTarget,target:e.target,bubbles:e.bubbles,cancelable:e.cancelable,defaultPrevented:e.defaultPrevented,eventPhase:e.eventPhase,isTrusted:e.isTrusted,preventDefault:function(){t=!0,e.preventDefault()},isDefaultPrevented:function(){return t},stopPropagation:function(){n=!0,e.stopPropagation()},isPropagationStopped:function(){return n},persist:function(){},timeStamp:e.timeStamp,type:e.type}},u=e.forwardRef((function(e,t){return r.default.createElement("textarea",o({},e,{ref:t}))})),s=r.default.memo((function(t){var n=t.isSelected,a=t.item,o=t.className,i=t.customSuggestItemRenderer,c=t.onItemClickHandler,l=e.useRef(!1),u=a,s=["textarea-suggest-item",n?"textarea-suggest-item_selected":"",o?"".concat(o,"__results__item"):"",n&&o?"".concat(o,"__results__item_selected"):""].filter(Boolean).join(" ");return r.default.createElement("div",{className:s,onMouseDown:function(e){if(l.current)return e.preventDefault(),e.stopPropagation(),void(l.current=!1);c(u)()},onTouchStart:function(e){l.current=!0,e.stopPropagation(),c(u)()}},i?i(u,n):r.default.createElement("div",{className:"textarea-suggest-item__info"},u))})),d=function(t){var n=t.textareaRef,a=t.values,o=void 0===a?[]:a,i=t.isHidden,c=t.className,l=t.selectedItemIndex,u=t.customSuggestItemRenderer,d=t.onItemClickHandler,v=e.useMemo((function(){var e,t;return(null===(t=null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.getBoundingClientRect)||void 0===t?void 0:t.call(e))||{}}),[null==n?void 0:n.current]),f=v.width,p=void 0===f?0:f,m=v.left,g=void 0===m?0:m;return!i&&(null==o?void 0:o.length)&&(null==n?void 0:n.current)?r.default.createElement("div",{className:"textarea-suggest__results ".concat(c?"".concat(c,"__results"):""),style:{position:"absolute",width:p,left:g}},o.map((function(e,t){return r.default.createElement(s,{key:t,className:c,item:e,isSelected:t===l,onItemClickHandler:d,customSuggestItemRenderer:u})}))):null};!function(e){e.ArrowUp="ArrowUp",e.ArrowDown="ArrowDown",e.Enter="Enter",e.Escape="Escape"}(c||(c={}));var v=[c.ArrowUp,c.ArrowDown,c.Enter,c.Escape],f=[" ","\n","\r"];exports.default=function(t){var n=t.autosizable,s=void 0!==n&&n,p=t.value,m=void 0===p?"":p,g=t.searchMarker,b=void 0===g?"@":g,w=t.searchRegexp,h=t.suggestList,y=void 0===h?[]:h,k=t.closeSuggestOnFocusOut,x=void 0!==k&&k,O=t.cancelSearchOnFocusOut,E=void 0!==O&&O,S=t.onSearch,P=t.onChange,_=t.customSuggestItemRenderer,I=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n}(t,["autosizable","value","searchMarker","searchRegexp","suggestList","closeSuggestOnFocusOut","cancelSearchOnFocusOut","onSearch","onChange","customSuggestItemRenderer"]),j=e.useState(m),R=j[0],D=j[1],z=e.useState(null==m?void 0:m.includes(b)),C=z[0],T=z[1],A=e.useState(!0),M=A[0],N=A[1],q=e.useState(void 0),F=q[0],H=q[1],B=i(R),U=i(m),K=e.useRef(null),L=s?a.default:u,G=e.useMemo((function(){return w?new RegExp(w):new RegExp("".concat(b,"([a-z0-9-_.]+[a-z0-9])"),"gim")}),[w]);e.useEffect((function(){if(b.length>1)throw new TypeError("Max length of searchMarker is 1 symbol. Please change your searchMarker to char")}),[]),e.useEffect((function(){m&&B!==m&&U!==m&&(D(m),W(void 0,m))}),[R,m,B,U]);var J=e.useCallback((function(e){var t,n=e.code,r=C&&!M&&y.length;if(null===(t=I.onKeyDown)||void 0===t||t.call(I,e),r&&v.includes(n))switch(e.stopPropagation(),e.nativeEvent.stopImmediatePropagation(),n){case c.ArrowUp:return e.preventDefault(),H((function(e){return void 0===e||0===e?y.length-1:e-1}));case c.ArrowDown:return e.preventDefault(),H((function(e){return void 0===e||e===y.length-1?0:e+1}));case c.Enter:return void(void 0!==F&&(e.preventDefault(),X(y[F])()));case c.Escape:T(!1),H(void 0)}}),[I.onKeyDown,F,y,C,M]),Q=e.useCallback((function(e){var t;x&&N(!0),E&&T(!1),null===(t=I.onBlur)||void 0===t||t.call(I,e)}),[x,E,I.onBlur]),V=e.useCallback((function(e){var t;M&&N(!1),null===(t=I.onFocus)||void 0===t||t.call(I,e)}),[x,E,I.onFocus]),W=function(e,t){var n,r,a;void 0===t&&(t="");var i=e?void 0===(null===(n=e.currentTarget)||void 0===n?void 0:n.value)?R:(null===(r=e.currentTarget)||void 0===r?void 0:r.value)||"":t,c=!!e&&(void 0===e.isTrusted||e.isTrusted),u=null===(a=K.current)||void 0===a?void 0:a.selectionEnd,s=u?i.slice(u-1,u):i.slice(-1);if(D(i),s===b&&(t&&N(!1),T(!0)),i.includes(b)&&!f.includes(s)||!C||T(!1),s!==b&&C){var d=i.slice(0,u),v=d.slice(d.lastIndexOf(b)).match(G),p=v?v[0].slice(1):s;S(p)}if(!e&&K.current&&(K.current.value=i),e&&c)return null==P?void 0:P(e);if(e&&!c)return null==P?void 0:P(o(o({},e),{currentTarget:K.current,target:K.current}));var m=function(e,t){var n=new Event("change",{bubbles:!0});return Object.defineProperty(n,"target",{writable:!1,value:e}),l(n)}(K.current);return null==P?void 0:P(m)},X=e.useCallback((function(e){return function(){var t,n,r=null===(t=K.current)||void 0===t?void 0:t.selectionEnd,a=R.slice(0,r).lastIndexOf(b),o=R.slice(a);if(-1!==a){var i=(o.includes(" ")?o.indexOf(" "):R.length)+a;o.lastIndexOf(b)>0&&(i=o.lastIndexOf(b)+a),(!i||i<a)&&(i=R.length);var c=R.slice(0,a||0)+R.slice(a).replace(R.slice(a,i),"".concat(b).concat(e," "));if(function(){if("undefined"==typeof navigator||"undefined"==typeof window)return!1;var e,t=!1;return e=navigator.userAgent||navigator.vendor||"opera"in window&&window.opera,(/(android|bb\d+|meego).+mobile|tablet|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/gi.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(t=!0),t}()){var l=c.slice(a).indexOf(" ")+a+1;null===(n=K.current)||void 0===n||n.setSelectionRange(l,l)}K.current&&(!function(e,t){var n,r,a=null===(n=Object.getOwnPropertyDescriptor(e,"value"))||void 0===n?void 0:n.set,o=Object.getPrototypeOf(e),i=null===(r=Object.getOwnPropertyDescriptor(o,"value"))||void 0===r?void 0:r.set;a&&a!==i?null==i||i.call(e,t):null==a||a.call(e,t),e.dispatchEvent(new Event("input",{bubbles:!0}))}(K.current,c),setTimeout((function(){var e;return null===(e=K.current)||void 0===e?void 0:e.focus()}))),H(void 0),T(!1),D(c)}}}),[K,R]);return r.default.createElement("div",{className:"textarea-suggest"},r.default.createElement(L,o({},I,{onKeyDown:J,onBlur:Q,onFocus:V,ref:K,onChange:W,value:R||m})),r.default.createElement(d,{className:I.className,textareaRef:K,values:y,selectedItemIndex:F,isHidden:M||!C,customSuggestItemRenderer:_,onItemClickHandler:X}))};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SyntheticEvent } from "react";
|
|
2
|
+
export declare const createSyntheticEventByTarget: <T extends Element>(target: T, eventType?: string) => SyntheticEvent<T, Event>;
|
|
3
|
+
export declare const createSyntheticEvent: <T extends Element, E extends Event>(event: E) => SyntheticEvent<T, E>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function usePrevious<T>(value: T): T | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-textarea-with-suggest",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Textarea with suggest for React app",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
"prettier": "prettier --write .",
|
|
16
16
|
"build:debug": "npm install && npm run build && rm -rf node_modules",
|
|
17
17
|
"build": "rollup -c",
|
|
18
|
-
"start": "rollup -c -w"
|
|
18
|
+
"start": "rollup -c -w",
|
|
19
|
+
"deploy:demo": "cd ./example && rm -rf node_modules && rm package-lock.json && npm i && npm run deploy && cd ../",
|
|
20
|
+
"test": "jest --coverage --"
|
|
19
21
|
},
|
|
20
22
|
"license": "MIT",
|
|
21
23
|
"eslintConfig": {
|
|
@@ -36,7 +38,7 @@
|
|
|
36
38
|
"bugs": {
|
|
37
39
|
"url": "https://github.com/marylorian/react-textarea-with-suggest/issues"
|
|
38
40
|
},
|
|
39
|
-
"homepage": "https://github.
|
|
41
|
+
"homepage": "https://marylorian.github.io/react-textarea-with-suggest/",
|
|
40
42
|
"browserslist": {
|
|
41
43
|
"production": [
|
|
42
44
|
">0.2%",
|
|
@@ -56,12 +58,7 @@
|
|
|
56
58
|
"@babel/preset-typescript"
|
|
57
59
|
],
|
|
58
60
|
"plugins": [
|
|
59
|
-
|
|
60
|
-
"@babel/plugin-proposal-class-properties",
|
|
61
|
-
{
|
|
62
|
-
"loose": true
|
|
63
|
-
}
|
|
64
|
-
]
|
|
61
|
+
"@babel/plugin-proposal-class-properties"
|
|
65
62
|
]
|
|
66
63
|
},
|
|
67
64
|
"peerDependencies": {
|
|
@@ -78,9 +75,13 @@
|
|
|
78
75
|
"@rollup/plugin-babel": "^6.0.3",
|
|
79
76
|
"@rollup/plugin-terser": "^0.2.1",
|
|
80
77
|
"@rollup/plugin-typescript": "^10.0.1",
|
|
78
|
+
"@testing-library/jest-dom": "^5.16.5",
|
|
79
|
+
"@testing-library/react": "^13.4.0",
|
|
81
80
|
"@types/react": "^18.0.26",
|
|
82
81
|
"babel-loader": "^8.0.6",
|
|
83
82
|
"css-loader": "^6.7.3",
|
|
83
|
+
"jest": "^29.3.1",
|
|
84
|
+
"jest-environment-jsdom": "^29.3.1",
|
|
84
85
|
"prettier": "2.7.1",
|
|
85
86
|
"rollup": "^2.79.1",
|
|
86
87
|
"rollup-plugin-css-only": "^4.3.0",
|
package/lib/utils.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { SyntheticEvent } from "react";
|
|
2
|
-
export type Nullable<T> = T | null;
|
|
3
|
-
export declare function usePrevious<T>(value: T): T | undefined;
|
|
4
|
-
export declare function isMobileAndTabletCheck(): boolean;
|
|
5
|
-
/**
|
|
6
|
-
* syntetic events no longer supported by react
|
|
7
|
-
* https://github.com/facebook/react/issues/12344
|
|
8
|
-
*/
|
|
9
|
-
export declare function setNativeValue(element: Element, value: string): void;
|
|
10
|
-
export declare const createSyntheticEventByTarget: <T extends Element>(target: T, eventType?: string) => SyntheticEvent<T, Event>;
|
|
11
|
-
export declare const createSyntheticEvent: <T extends Element, E extends Event>(event: E) => SyntheticEvent<T, E>;
|