@consta/uikit 4.19.0 → 4.21.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/__internal__/src/components/AutoCompleteCanary/useAutoComplete.js +1 -1
- package/__internal__/src/components/AutoCompleteCanary/useAutoComplete.js.map +1 -1
- package/__internal__/src/components/Button/Button.css +1 -1
- package/__internal__/src/components/Button/Button.js +1 -1
- package/__internal__/src/components/Button/Button.js.map +1 -1
- package/__internal__/src/components/Checkbox/Checkbox.css +1 -1
- package/__internal__/src/components/Collapse/Collapse.css +1 -1
- package/__internal__/src/components/Collapse/Collapse.js +1 -1
- package/__internal__/src/components/Collapse/Collapse.js.map +1 -1
- package/__internal__/src/components/Collapse/types.d.ts +6 -2
- package/__internal__/src/components/Collapse/types.js +1 -1
- package/__internal__/src/components/Collapse/types.js.map +1 -1
- package/__internal__/src/components/CollapseGroup/CollapseGroup.js +1 -1
- package/__internal__/src/components/CollapseGroup/CollapseGroup.js.map +1 -1
- package/__internal__/src/components/CollapseGroup/helpers.d.ts +8 -5
- package/__internal__/src/components/CollapseGroup/helpers.js.map +1 -1
- package/__internal__/src/components/ListCanary/ListItem/ListItem.css +1 -1
- package/__internal__/src/components/ListCanary/ListItem/ListItem.js +1 -1
- package/__internal__/src/components/ListCanary/ListItem/ListItem.js.map +1 -1
- package/__internal__/src/components/SelectComponents/Select.css +1 -1
- package/__internal__/src/components/Tabs/FitModeDropdownWrapper/TabsFitModeDropdownWrapper.js +1 -1
- package/__internal__/src/components/Tabs/FitModeDropdownWrapper/TabsFitModeDropdownWrapper.js.map +1 -1
- package/__internal__/src/components/Tabs/Tab/TabsTab.d.ts +2 -11
- package/__internal__/src/components/Tabs/Tab/TabsTab.js +1 -1
- package/__internal__/src/components/Tabs/Tab/TabsTab.js.map +1 -1
- package/__internal__/src/components/Tabs/Tabs.d.ts +0 -2
- package/__internal__/src/components/Tabs/Tabs.js +1 -1
- package/__internal__/src/components/Tabs/Tabs.js.map +1 -1
- package/__internal__/src/components/Tabs/helpers.d.ts +7 -1
- package/__internal__/src/components/Tabs/helpers.js +1 -1
- package/__internal__/src/components/Tabs/helpers.js.map +1 -1
- package/__internal__/src/components/Tabs/index.d.ts +1 -0
- package/__internal__/src/components/Tabs/index.js +1 -1
- package/__internal__/src/components/Tabs/index.js.map +1 -1
- package/__internal__/src/components/Tabs/types.d.ts +16 -3
- package/__internal__/src/components/Tabs/types.js.map +1 -1
- package/__internal__/src/components/Text/Text.css +1 -1
- package/__internal__/src/components/Text/Text.d.ts +1 -1
- package/__internal__/src/components/Text/Text.js +1 -1
- package/__internal__/src/components/Text/Text.js.map +1 -1
- package/__internal__/src/components/TextField/TextField.js +1 -1
- package/__internal__/src/components/TextField/TextField.js.map +1 -1
- package/__internal__/src/hocs/withTooltip/withTooltip.d.ts +1 -1
- package/__internal__/src/hocs/withTooltip/withTooltip.js +1 -1
- package/__internal__/src/hocs/withTooltip/withTooltip.js.map +1 -1
- package/__internal__/src/hooks/useComponentSize/getElementSize.d.ts +2 -0
- package/__internal__/src/hooks/useComponentSize/getElementSize.js +2 -0
- package/__internal__/src/hooks/useComponentSize/getElementSize.js.map +1 -0
- package/__internal__/src/hooks/useComponentSize/index.d.ts +2 -0
- package/__internal__/src/hooks/useComponentSize/index.js +1 -1
- package/__internal__/src/hooks/useComponentSize/index.js.map +1 -1
- package/__internal__/src/hooks/useComponentSize/types.d.ts +4 -0
- package/__internal__/src/hooks/useComponentSize/types.js +2 -0
- package/__internal__/src/hooks/useComponentSize/types.js.map +1 -0
- package/__internal__/src/hooks/useComponentSize/useComponentSize.d.ts +1 -5
- package/__internal__/src/hooks/useComponentSize/useComponentSize.js +1 -1
- package/__internal__/src/hooks/useComponentSize/useComponentSize.js.map +1 -1
- package/__internal__/src/hooks/useResizeObserved/useResizeObserved.js +1 -1
- package/__internal__/src/hooks/useResizeObserved/useResizeObserved.js.map +1 -1
- package/__internal__/src/hooks/useVirtualScrollCanary/hellpers.d.ts +8 -0
- package/__internal__/src/hooks/useVirtualScrollCanary/hellpers.js +2 -0
- package/__internal__/src/hooks/useVirtualScrollCanary/hellpers.js.map +1 -0
- package/__internal__/src/hooks/useVirtualScrollCanary/index.d.ts +1 -0
- package/__internal__/src/hooks/useVirtualScrollCanary/index.js +2 -0
- package/__internal__/src/hooks/useVirtualScrollCanary/index.js.map +1 -0
- package/__internal__/src/hooks/useVirtualScrollCanary/useVirtualScrollCanary.d.ts +14 -0
- package/__internal__/src/hooks/useVirtualScrollCanary/useVirtualScrollCanary.js +2 -0
- package/__internal__/src/hooks/useVirtualScrollCanary/useVirtualScrollCanary.js.map +1 -0
- package/package.json +2 -2
- package/useVirtualScrollCanary/index.d.ts +1 -0
- package/useVirtualScrollCanary/index.js +1 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["className","type","value","onChange","id","name","rows","cols","minRows","maxRows","inputRef","maxLength","disabled","size","view","form","state","status","width","onBlur","onFocus","autoFocus","placeholder","leftSide","rightSide","autoComplete","withClearButton","incrementButtons","max","min","readOnly","required","step","tabIndex","ariaLabel","label","labelIcon","inputContainerRef","labelPosition","caption","iconSize","focused","onClick","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture"];import"./TextField.css";import{IconClose}from"@consta/icons/IconClose";import{IconEye}from"@consta/icons/IconEye";import{IconEyeClose}from"@consta/icons/IconEyeClose";import{IconSelect}from"@consta/icons/IconSelect";import{IconSelectOpen}from"@consta/icons/IconSelectOpen";import React,{forwardRef,useCallback,useEffect}from"react";import TextAreaAutoSize from"react-textarea-autosize";import{useFlag}from"../../hooks/useFlag/useFlag";import{useForkRef}from"../../hooks/useForkRef/useForkRef";import{useMutableRef}from"../../hooks/useMutableRef/useMutableRef";import{useSortSteps}from"../../hooks/useSortSteps/useSortSteps";import{cn}from"../../utils/bem";import{getByMap}from"../../utils/getByMap";import{isString}from"../../utils/type-guards";import{usePropsHandler}from"../EventInterceptor/usePropsHandler";import{FieldCaption}from"../FieldCaption/FieldCaption";import{FieldLabel}from"../FieldLabel/FieldLabel";import{getIncrementFlag,getTypeForRender,getValueByStep,sizeMap}from"./helpers";import{textFieldPropFormDefault,textFieldPropSizeDefault,textFieldPropViewDefault,textFieldPropWidthDefault}from"./types";export var COMPONENT_NAME="TextField";export var cnTextField=cn("TextField");export var TextFieldRender=function(a,b){var c=React.useRef(null),d=React.useRef(null),e=usePropsHandler(COMPONENT_NAME,a,c),f=e.className,g=e.type,h=void 0===g?"text":g,i=e.value,j=e.onChange,k=e.id,l=e.name,m=e.rows,n=e.cols,o=e.minRows,p=e.maxRows,q=e.inputRef,r=e.maxLength,s=e.disabled,t=e.size,u=void 0===t?textFieldPropSizeDefault:t,v=e.view,w=void 0===v?textFieldPropViewDefault:v,x=e.form,y=void 0===x?textFieldPropFormDefault:x,z=e.state,A=e.status,B=e.width,C=void 0===B?textFieldPropWidthDefault:B,D=e.onBlur,E=e.onFocus,F=e.autoFocus,G=void 0!==F&&F,H=e.placeholder,I=e.leftSide,J=e.rightSide,K=e.autoComplete,L=e.withClearButton,M=e.incrementButtons,N=e.max,O=e.min,P=e.readOnly,Q=e.required,R=e.step,S=void 0===R?1:R,T=e.tabIndex,U=e.ariaLabel,V=e.label,W=e.labelIcon,X=e.inputContainerRef,Y=e.labelPosition,Z=void 0===Y?"top":Y,$=e.caption,_=e.iconSize,aa=e.focused,ba=e.onClick,ca=e.onKeyDown,da=e.onKeyDownCapture,ea=e.onKeyPress,fa=e.onKeyPressCapture,ga=e.onKeyUp,ha=e.onKeyUpCapture,ia=_objectWithoutProperties(e,_excluded),ja=useFlag(G),ka=_slicedToArray(ja,2),la=ka[0],ma=ka[1],na=useFlag(!1),oa=_slicedToArray(na,2),pa=oa[0],qa=oa[1],ra=useMutableRef(i),sa=useMutableRef(ba),ta=useMutableRef(j),ua=useCallback(function(a){var b;a.stopPropagation(),qa.toggle(),null===(b=d.current)||void 0===b?void 0:b.focus()},[]),va=I,wa=J,xa=isString(I),ya=isString(J),za=getByMap(sizeMap,u,_),Aa=useSortSteps({step:S,min:+O,max:+N}),Ba=useCallback(function(a){var b;s||(null===(b=ta.current)||void 0===b?void 0:b.call(ta,{e:a,id:k,name:l,value:a.target.value||null}))},[k,l,s]),Ca=function(a){ma.on(),null===E||void 0===E?void 0:E(a)},Da={className:cnTextField("Input"),value:i||"",onChange:Ba,maxLength:r,disabled:s,onBlur:function handleBlur(a){ma.off(),null===D||void 0===D?void 0:D(a)},onFocus:Ca,autoFocus:G,placeholder:H,autoComplete:K,readOnly:P,tabIndex:T,name:l,onKeyDownCapture:da,onKeyPress:ea,onKeyPressCapture:fa,onKeyUp:ga,onKeyUpCapture:ha,id:k?k.toString():"","aria-label":U},Ea=pa?IconEyeClose:IconEye,Fa={rows:m,cols:n,minRows:o||m,maxRows:p||m,ref:useForkRef([d,q])},Ga={type:getTypeForRender(h,pa),max:N,min:O,step:Array.isArray(Aa)?0:Aa,onKeyDown:function onKeyDown(a){var b=getIncrementFlag(a);null===ca||void 0===ca?void 0:ca(a),"number"
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["className","type","value","onChange","id","name","rows","cols","minRows","maxRows","inputRef","maxLength","disabled","size","view","form","state","status","width","onBlur","onFocus","autoFocus","placeholder","leftSide","rightSide","autoComplete","withClearButton","incrementButtons","max","min","readOnly","required","step","tabIndex","ariaLabel","label","labelIcon","inputContainerRef","labelPosition","caption","iconSize","focused","onClick","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture"];import"./TextField.css";import{IconClose}from"@consta/icons/IconClose";import{IconEye}from"@consta/icons/IconEye";import{IconEyeClose}from"@consta/icons/IconEyeClose";import{IconSelect}from"@consta/icons/IconSelect";import{IconSelectOpen}from"@consta/icons/IconSelectOpen";import React,{forwardRef,useCallback,useEffect}from"react";import TextAreaAutoSize from"react-textarea-autosize";import{useFlag}from"../../hooks/useFlag/useFlag";import{useForkRef}from"../../hooks/useForkRef/useForkRef";import{useMutableRef}from"../../hooks/useMutableRef/useMutableRef";import{useSortSteps}from"../../hooks/useSortSteps/useSortSteps";import{cn}from"../../utils/bem";import{getByMap}from"../../utils/getByMap";import{isString}from"../../utils/type-guards";import{usePropsHandler}from"../EventInterceptor/usePropsHandler";import{FieldCaption}from"../FieldCaption/FieldCaption";import{FieldLabel}from"../FieldLabel/FieldLabel";import{getIncrementFlag,getTypeForRender,getValueByStep,sizeMap}from"./helpers";import{textFieldPropFormDefault,textFieldPropSizeDefault,textFieldPropViewDefault,textFieldPropWidthDefault}from"./types";export var COMPONENT_NAME="TextField";export var cnTextField=cn("TextField");export var TextFieldRender=function(a,b){var c=React.useRef(null),d=React.useRef(null),e=usePropsHandler(COMPONENT_NAME,a,c),f=e.className,g=e.type,h=void 0===g?"text":g,i=e.value,j=e.onChange,k=e.id,l=e.name,m=e.rows,n=e.cols,o=e.minRows,p=e.maxRows,q=e.inputRef,r=e.maxLength,s=e.disabled,t=e.size,u=void 0===t?textFieldPropSizeDefault:t,v=e.view,w=void 0===v?textFieldPropViewDefault:v,x=e.form,y=void 0===x?textFieldPropFormDefault:x,z=e.state,A=e.status,B=e.width,C=void 0===B?textFieldPropWidthDefault:B,D=e.onBlur,E=e.onFocus,F=e.autoFocus,G=void 0!==F&&F,H=e.placeholder,I=e.leftSide,J=e.rightSide,K=e.autoComplete,L=e.withClearButton,M=e.incrementButtons,N=e.max,O=e.min,P=e.readOnly,Q=e.required,R=e.step,S=void 0===R?1:R,T=e.tabIndex,U=e.ariaLabel,V=e.label,W=e.labelIcon,X=e.inputContainerRef,Y=e.labelPosition,Z=void 0===Y?"top":Y,$=e.caption,_=e.iconSize,aa=e.focused,ba=e.onClick,ca=e.onKeyDown,da=e.onKeyDownCapture,ea=e.onKeyPress,fa=e.onKeyPressCapture,ga=e.onKeyUp,ha=e.onKeyUpCapture,ia=_objectWithoutProperties(e,_excluded),ja=useFlag(G),ka=_slicedToArray(ja,2),la=ka[0],ma=ka[1],na=useFlag(!1),oa=_slicedToArray(na,2),pa=oa[0],qa=oa[1],ra=useMutableRef(i),sa=useMutableRef(ba),ta=useMutableRef(j),ua=useCallback(function(a){var b;a.stopPropagation(),qa.toggle(),null===(b=d.current)||void 0===b?void 0:b.focus()},[]),va=I,wa=J,xa=isString(I),ya=isString(J),za=getByMap(sizeMap,u,_),Aa=useSortSteps({step:S,min:+O,max:+N}),Ba=useCallback(function(a){var b;s||(null===(b=ta.current)||void 0===b?void 0:b.call(ta,{e:a,id:k,name:l,value:a.target.value||null}))},[k,l,s]),Ca=function(a){ma.on(),null===E||void 0===E?void 0:E(a)},Da={className:cnTextField("Input"),value:i||"",onChange:Ba,maxLength:r,disabled:s,onBlur:function handleBlur(a){ma.off(),null===D||void 0===D?void 0:D(a)},onFocus:Ca,autoFocus:G,placeholder:H,autoComplete:K,readOnly:P,tabIndex:T,name:l,onKeyDownCapture:da,onKeyPress:ea,onKeyPressCapture:fa,onKeyUp:ga,onKeyUpCapture:ha,id:k?k.toString():"","aria-label":U},Ea=pa?IconEyeClose:IconEye,Fa={rows:m,cols:n,minRows:o||m,maxRows:p||m,ref:useForkRef([d,q])},Ga={type:getTypeForRender(h,pa),max:N,min:O,step:Array.isArray(Aa)?0:Aa,onKeyDown:function onKeyDown(a){var b=getIncrementFlag(a);if(null===ca||void 0===ca?void 0:ca(a),"number"===h&&"boolean"==typeof b&&!s){var c;a.preventDefault(),null===(c=ta.current)||void 0===c?void 0:c.call(ta,{e:a,id:k,name:l,value:getValueByStep(Aa,i,b,O,N)})}},ref:useForkRef([d,q])},Ha=useCallback(function(a){var b;null===(b=ta.current)||void 0===b?void 0:b.call(ta,{e:a,id:k,name:l,value:null})},[]),Ia=function(a){var b,c=!(1<arguments.length&&void 0!==arguments[1])||arguments[1];null===(b=ta.current)||void 0===b?void 0:b.call(ta,{e:a,id:k,name:l,value:getValueByStep(Aa,i,c,O,N)})},Ja={onClick:useCallback(function(a){var b,c;null===(b=d.current)||void 0===b?void 0:b.focus(),null===(c=sa.current)||void 0===c?void 0:c.call(sa,a)},[])};return useEffect(function(){if("password"===h&&d.current){var a;d.current.selectionStart=(null===(a=ra.current)||void 0===a?void 0:a.length)||0}},[pa]),React.createElement("div",Object.assign({className:cnTextField({labelPosition:Z,size:u,view:w,width:C},[f]),ref:useForkRef([b,c])},Ja,ia),V&&React.createElement(FieldLabel,{icon:W,required:Q,className:cnTextField("Label",{labelPosition:Z}),size:u},V),React.createElement("div",{className:cnTextField("Body")},React.createElement("div",{ref:X,className:cnTextField("InputContainer",{view:w,form:y,status:A||z,disabled:s,type:h,focus:la||aa,withValue:!!i})},va&&React.createElement("div",{className:cnTextField("Side",{position:"left",type:xa?"string":"icon"}),title:"string"==typeof I?I:void 0},xa?I:React.createElement(va,{className:cnTextField("Icon"),size:za})),"textarea"===h?React.createElement(TextAreaAutoSize,Object.assign({},Da,Fa)):React.createElement("input",Object.assign({},Da,Ga)),"number"===h&&(void 0===M||M)&&React.createElement("div",{className:cnTextField("Counter")},React.createElement("button",{onFocus:Ca,onClick:function(a){return Ia(a,!0)},type:"button",className:cnTextField("CounterButton")},React.createElement(IconSelectOpen,{size:"xs"})),React.createElement("button",{onFocus:Ca,onClick:function(a){return Ia(a,!1)},type:"button",className:cnTextField("CounterButton")},React.createElement(IconSelect,{size:"xs"}))),i&&L&&"number"!==h&&React.createElement("button",{type:"button",disabled:s,onClick:Ha,className:cnTextField("ClearButton")},React.createElement(IconClose,{size:"xs",className:cnTextField("ClearButtonIcon")})),"password"===h&&i&&React.createElement("button",{className:cnTextField("ClearButton"),type:"button",onClick:ua},React.createElement(Ea,{className:cnTextField("Icon"),size:za})),wa&&"number"!==h&&"password"!==h&&React.createElement("div",{className:cnTextField("Side",{position:"right",type:ya?"string":"icon"}),title:"string"==typeof J?J:void 0},ya?J:React.createElement(wa,{className:cnTextField("Icon"),size:za}))),$&&React.createElement(FieldCaption,{className:cnTextField("Caption"),status:A||z},$)))};export var TextField=forwardRef(TextFieldRender);export*from"./types";
|
|
2
2
|
//# sourceMappingURL=TextField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.js","names":["IconClose","IconEye","IconEyeClose","IconSelect","IconSelectOpen","React","forwardRef","useCallback","useEffect","TextAreaAutoSize","useFlag","useForkRef","useMutableRef","useSortSteps","cn","getByMap","isString","usePropsHandler","FieldCaption","FieldLabel","getIncrementFlag","getTypeForRender","getValueByStep","sizeMap","textFieldPropFormDefault","textFieldPropSizeDefault","textFieldPropViewDefault","textFieldPropWidthDefault","COMPONENT_NAME","cnTextField","TextFieldRender","props","ref","textFieldRef","useRef","inputRef","className","type","value","onChange","id","name","rows","cols","minRows","maxRows","inputRefProp","maxLength","disabled","size","view","form","state","status","width","onBlur","onFocus","autoFocus","placeholder","leftSide","rightSide","autoComplete","withClearButton","incrementButtons","max","min","readOnly","required","step","tabIndex","ariaLabel","label","labelIcon","inputContainerRef","labelPosition","caption","iconSizeProp","iconSize","focused","onClick","onKeyDownProp","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","otherProps","focus","setFocus","passwordVisible","setPasswordVisuble","valueRef","onClickRef","onChangeRef","handleEyeClick","e","stopPropagation","toggle","current","LeftIcon","RightIcon","leftSideIsString","rightSideIsString","sortedSteps","handleChange","target","handleFocus","on","commonProps","handleBlur","off","toString","Eye","textareaProps","inputProps","Array","isArray","flag","preventDefault","handleClear","changeNumberValue","isIncrement","rootProps","selectionStart","length","withValue","position","TextField"],"sources":["../../../../../src/components/TextField/TextField.tsx"],"sourcesContent":["import './TextField.css';\n\nimport { IconClose } from '@consta/icons/IconClose';\nimport { IconEye } from '@consta/icons/IconEye';\nimport { IconEyeClose } from '@consta/icons/IconEyeClose';\nimport { IconSelect } from '@consta/icons/IconSelect';\nimport { IconSelectOpen } from '@consta/icons/IconSelectOpen';\nimport React, { forwardRef, useCallback, useEffect } from 'react';\nimport TextAreaAutoSize from 'react-textarea-autosize';\n\nimport { useFlag } from '../../hooks/useFlag/useFlag';\nimport { useForkRef } from '../../hooks/useForkRef/useForkRef';\nimport { useMutableRef } from '../../hooks/useMutableRef/useMutableRef';\nimport { useSortSteps } from '../../hooks/useSortSteps/useSortSteps';\nimport { cn } from '../../utils/bem';\nimport { getByMap } from '../../utils/getByMap';\nimport { isString } from '../../utils/type-guards';\nimport { usePropsHandler } from '../EventInterceptor/usePropsHandler';\nimport { FieldCaption } from '../FieldCaption/FieldCaption';\nimport { FieldLabel } from '../FieldLabel/FieldLabel';\nimport {\n getIncrementFlag,\n getTypeForRender,\n getValueByStep,\n sizeMap,\n} from './helpers';\nimport {\n TextFieldComponent,\n textFieldPropFormDefault,\n TextFieldProps,\n textFieldPropSizeDefault,\n textFieldPropViewDefault,\n textFieldPropWidthDefault,\n} from './types';\n\nexport const COMPONENT_NAME = 'TextField' as const;\nexport const cnTextField = cn(COMPONENT_NAME);\n\nexport const TextFieldRender = <TYPE extends string>(\n props: TextFieldProps<TYPE>,\n ref: React.Ref<HTMLDivElement>,\n) => {\n const textFieldRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n\n const {\n className,\n type = 'text',\n value,\n onChange,\n id,\n name,\n rows,\n cols,\n minRows,\n maxRows,\n inputRef: inputRefProp,\n maxLength,\n disabled,\n size = textFieldPropSizeDefault,\n view = textFieldPropViewDefault,\n form = textFieldPropFormDefault,\n state,\n status,\n width = textFieldPropWidthDefault,\n onBlur,\n onFocus,\n autoFocus = false,\n placeholder,\n leftSide,\n rightSide,\n autoComplete,\n withClearButton,\n incrementButtons = true,\n max,\n min,\n readOnly,\n required,\n step = 1,\n tabIndex,\n ariaLabel,\n label,\n labelIcon,\n inputContainerRef,\n labelPosition = 'top',\n caption,\n iconSize: iconSizeProp,\n focused,\n onClick,\n // onkey props\n onKeyDown: onKeyDownProp,\n onKeyDownCapture,\n onKeyPress,\n onKeyPressCapture,\n onKeyUp,\n onKeyUpCapture,\n ...otherProps\n } = usePropsHandler(COMPONENT_NAME, props, textFieldRef);\n const [focus, setFocus] = useFlag(autoFocus);\n const [passwordVisible, setPasswordVisuble] = useFlag(false);\n\n const valueRef = useMutableRef(value);\n const onClickRef = useMutableRef(onClick);\n const onChangeRef = useMutableRef(onChange);\n\n const handleEyeClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n setPasswordVisuble.toggle();\n inputRef.current?.focus();\n },\n [],\n );\n\n const textarea = type === 'textarea';\n const LeftIcon = leftSide;\n const RightIcon = rightSide;\n const leftSideIsString = isString(leftSide);\n const rightSideIsString = isString(rightSide);\n const iconSize = getByMap(sizeMap, size, iconSizeProp);\n\n const sortedSteps = useSortSteps({\n step,\n min: Number(min),\n max: Number(max),\n });\n\n const handleChange: React.ChangeEventHandler<\n HTMLInputElement | HTMLTextAreaElement\n > = useCallback(\n (e) => {\n !disabled &&\n onChangeRef.current?.({ e, id, name, value: e.target.value || null });\n },\n [id, name, disabled],\n );\n\n const handleBlur: React.FocusEventHandler<HTMLElement> = (e) => {\n setFocus.off();\n onBlur?.(e);\n };\n\n const handleFocus: React.FocusEventHandler<HTMLElement> = (e) => {\n setFocus.on();\n onFocus?.(e);\n };\n\n const commonProps = {\n 'className': cnTextField('Input'),\n 'value': value || '',\n 'onChange': handleChange,\n maxLength,\n disabled,\n 'onBlur': handleBlur,\n 'onFocus': handleFocus,\n autoFocus,\n placeholder,\n autoComplete,\n readOnly,\n tabIndex,\n name,\n onKeyDownCapture,\n onKeyPress,\n onKeyPressCapture,\n onKeyUp,\n onKeyUpCapture,\n 'id': id ? id.toString() : '',\n 'aria-label': ariaLabel,\n };\n\n const Eye = passwordVisible ? IconEyeClose : IconEye;\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const flag = getIncrementFlag(e);\n onKeyDownProp?.(e);\n if (type === 'number' && typeof flag === 'boolean' && !disabled) {\n e.preventDefault();\n onChange?.({\n e,\n value: getValueByStep(sortedSteps, value, flag, min, max),\n });\n }\n };\n\n const textareaProps = {\n rows,\n cols,\n minRows: minRows || rows,\n maxRows: maxRows || rows,\n ref: useForkRef([inputRef, inputRefProp]) as (\n node: HTMLTextAreaElement,\n ) => void,\n };\n\n const inputProps = {\n type: getTypeForRender(type, passwordVisible),\n max,\n min,\n step: !Array.isArray(sortedSteps) ? sortedSteps : 0,\n onKeyDown,\n ref: useForkRef([\n inputRef,\n inputRefProp,\n ]) as React.RefCallback<HTMLInputElement>,\n };\n\n const handleClear = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n onChangeRef.current?.({\n e,\n value: null,\n });\n }, []);\n\n const changeNumberValue = (\n e: React.MouseEvent<HTMLButtonElement>,\n isIncrement = true,\n ) => {\n onChange?.({\n e,\n value: getValueByStep(sortedSteps, value, isIncrement, min, max),\n });\n };\n\n const rootProps = {\n onClick: useCallback((e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n inputRef.current?.focus();\n onClickRef.current?.(e);\n }, []),\n };\n\n // при смене passwordVible, перемещаем курсор в конец строки\n useEffect(() => {\n if (type === 'password' && inputRef.current) {\n inputRef.current.selectionStart = valueRef.current?.length || 0;\n }\n }, [passwordVisible]);\n\n return (\n <div\n className={cnTextField({ labelPosition, size, view, width }, [className])}\n ref={useForkRef([ref, textFieldRef])}\n {...rootProps}\n {...otherProps}\n >\n {label && (\n <FieldLabel\n icon={labelIcon}\n required={required}\n className={cnTextField('Label', { labelPosition })}\n size={size}\n >\n {label}\n </FieldLabel>\n )}\n <div className={cnTextField('Body')}>\n <div\n ref={inputContainerRef}\n className={cnTextField('InputContainer', {\n view,\n form,\n status: status || state,\n disabled,\n type,\n focus: focus || focused,\n withValue: !!value,\n })}\n >\n {LeftIcon && (\n <div\n className={cnTextField('Side', {\n position: 'left',\n type: leftSideIsString ? 'string' : 'icon',\n })}\n title={typeof leftSide === 'string' ? leftSide : undefined}\n >\n {leftSideIsString ? (\n leftSide\n ) : (\n <LeftIcon className={cnTextField('Icon')} size={iconSize} />\n )}\n </div>\n )}\n {textarea ? (\n <TextAreaAutoSize {...commonProps} {...textareaProps} />\n ) : (\n <input {...commonProps} {...inputProps} />\n )}\n\n {type === 'number' && incrementButtons && (\n <div className={cnTextField('Counter')}>\n <button\n onFocus={handleFocus}\n onClick={(e) => changeNumberValue(e, true)}\n type=\"button\"\n className={cnTextField('CounterButton')}\n >\n <IconSelectOpen size=\"xs\" />\n </button>\n <button\n onFocus={handleFocus}\n onClick={(e) => changeNumberValue(e, false)}\n type=\"button\"\n className={cnTextField('CounterButton')}\n >\n <IconSelect size=\"xs\" />\n </button>\n </div>\n )}\n\n {value && withClearButton && type !== 'number' && (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={handleClear}\n className={cnTextField('ClearButton')}\n >\n <IconClose size=\"xs\" className={cnTextField('ClearButtonIcon')} />\n </button>\n )}\n\n {type === 'password' && value && (\n <button\n className={cnTextField('ClearButton')}\n type=\"button\"\n onClick={handleEyeClick}\n >\n <Eye className={cnTextField('Icon')} size={iconSize} />\n </button>\n )}\n\n {RightIcon && type !== 'number' && type !== 'password' && (\n <div\n className={cnTextField('Side', {\n position: 'right',\n type: rightSideIsString ? 'string' : 'icon',\n })}\n title={typeof rightSide === 'string' ? rightSide : undefined}\n >\n {rightSideIsString ? (\n rightSide\n ) : (\n <RightIcon className={cnTextField('Icon')} size={iconSize} />\n )}\n </div>\n )}\n </div>\n {caption && (\n <FieldCaption\n className={cnTextField('Caption')}\n status={status || state}\n >\n {caption}\n </FieldCaption>\n )}\n </div>\n </div>\n );\n};\n\nexport const TextField = forwardRef(TextFieldRender) as TextFieldComponent;\nexport * from './types';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TextField.js","names":["IconClose","IconEye","IconEyeClose","IconSelect","IconSelectOpen","React","forwardRef","useCallback","useEffect","TextAreaAutoSize","useFlag","useForkRef","useMutableRef","useSortSteps","cn","getByMap","isString","usePropsHandler","FieldCaption","FieldLabel","getIncrementFlag","getTypeForRender","getValueByStep","sizeMap","textFieldPropFormDefault","textFieldPropSizeDefault","textFieldPropViewDefault","textFieldPropWidthDefault","COMPONENT_NAME","cnTextField","TextFieldRender","props","ref","textFieldRef","useRef","inputRef","className","type","value","onChange","id","name","rows","cols","minRows","maxRows","inputRefProp","maxLength","disabled","size","view","form","state","status","width","onBlur","onFocus","autoFocus","placeholder","leftSide","rightSide","autoComplete","withClearButton","incrementButtons","max","min","readOnly","required","step","tabIndex","ariaLabel","label","labelIcon","inputContainerRef","labelPosition","caption","iconSizeProp","iconSize","focused","onClick","onKeyDownProp","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","otherProps","focus","setFocus","passwordVisible","setPasswordVisuble","valueRef","onClickRef","onChangeRef","handleEyeClick","e","stopPropagation","toggle","current","LeftIcon","RightIcon","leftSideIsString","rightSideIsString","sortedSteps","handleChange","target","handleFocus","on","commonProps","handleBlur","off","toString","Eye","textareaProps","inputProps","Array","isArray","flag","preventDefault","handleClear","changeNumberValue","isIncrement","rootProps","selectionStart","length","withValue","position","TextField"],"sources":["../../../../../src/components/TextField/TextField.tsx"],"sourcesContent":["import './TextField.css';\n\nimport { IconClose } from '@consta/icons/IconClose';\nimport { IconEye } from '@consta/icons/IconEye';\nimport { IconEyeClose } from '@consta/icons/IconEyeClose';\nimport { IconSelect } from '@consta/icons/IconSelect';\nimport { IconSelectOpen } from '@consta/icons/IconSelectOpen';\nimport React, { forwardRef, useCallback, useEffect } from 'react';\nimport TextAreaAutoSize from 'react-textarea-autosize';\n\nimport { useFlag } from '../../hooks/useFlag/useFlag';\nimport { useForkRef } from '../../hooks/useForkRef/useForkRef';\nimport { useMutableRef } from '../../hooks/useMutableRef/useMutableRef';\nimport { useSortSteps } from '../../hooks/useSortSteps/useSortSteps';\nimport { cn } from '../../utils/bem';\nimport { getByMap } from '../../utils/getByMap';\nimport { isString } from '../../utils/type-guards';\nimport { usePropsHandler } from '../EventInterceptor/usePropsHandler';\nimport { FieldCaption } from '../FieldCaption/FieldCaption';\nimport { FieldLabel } from '../FieldLabel/FieldLabel';\nimport {\n getIncrementFlag,\n getTypeForRender,\n getValueByStep,\n sizeMap,\n} from './helpers';\nimport {\n TextFieldComponent,\n textFieldPropFormDefault,\n TextFieldProps,\n textFieldPropSizeDefault,\n textFieldPropViewDefault,\n textFieldPropWidthDefault,\n} from './types';\n\nexport const COMPONENT_NAME = 'TextField' as const;\nexport const cnTextField = cn(COMPONENT_NAME);\n\nexport const TextFieldRender = <TYPE extends string>(\n props: TextFieldProps<TYPE>,\n ref: React.Ref<HTMLDivElement>,\n) => {\n const textFieldRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n\n const {\n className,\n type = 'text',\n value,\n onChange,\n id,\n name,\n rows,\n cols,\n minRows,\n maxRows,\n inputRef: inputRefProp,\n maxLength,\n disabled,\n size = textFieldPropSizeDefault,\n view = textFieldPropViewDefault,\n form = textFieldPropFormDefault,\n state,\n status,\n width = textFieldPropWidthDefault,\n onBlur,\n onFocus,\n autoFocus = false,\n placeholder,\n leftSide,\n rightSide,\n autoComplete,\n withClearButton,\n incrementButtons = true,\n max,\n min,\n readOnly,\n required,\n step = 1,\n tabIndex,\n ariaLabel,\n label,\n labelIcon,\n inputContainerRef,\n labelPosition = 'top',\n caption,\n iconSize: iconSizeProp,\n focused,\n onClick,\n // onkey props\n onKeyDown: onKeyDownProp,\n onKeyDownCapture,\n onKeyPress,\n onKeyPressCapture,\n onKeyUp,\n onKeyUpCapture,\n ...otherProps\n } = usePropsHandler(COMPONENT_NAME, props, textFieldRef);\n const [focus, setFocus] = useFlag(autoFocus);\n const [passwordVisible, setPasswordVisuble] = useFlag(false);\n\n const valueRef = useMutableRef(value);\n const onClickRef = useMutableRef(onClick);\n const onChangeRef = useMutableRef(onChange);\n\n const handleEyeClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n setPasswordVisuble.toggle();\n inputRef.current?.focus();\n },\n [],\n );\n\n const textarea = type === 'textarea';\n const LeftIcon = leftSide;\n const RightIcon = rightSide;\n const leftSideIsString = isString(leftSide);\n const rightSideIsString = isString(rightSide);\n const iconSize = getByMap(sizeMap, size, iconSizeProp);\n\n const sortedSteps = useSortSteps({\n step,\n min: Number(min),\n max: Number(max),\n });\n\n const handleChange: React.ChangeEventHandler<\n HTMLInputElement | HTMLTextAreaElement\n > = useCallback(\n (e) => {\n !disabled &&\n onChangeRef.current?.({ e, id, name, value: e.target.value || null });\n },\n [id, name, disabled],\n );\n\n const handleBlur: React.FocusEventHandler<HTMLElement> = (e) => {\n setFocus.off();\n onBlur?.(e);\n };\n\n const handleFocus: React.FocusEventHandler<HTMLElement> = (e) => {\n setFocus.on();\n onFocus?.(e);\n };\n\n const commonProps = {\n 'className': cnTextField('Input'),\n 'value': value || '',\n 'onChange': handleChange,\n maxLength,\n disabled,\n 'onBlur': handleBlur,\n 'onFocus': handleFocus,\n autoFocus,\n placeholder,\n autoComplete,\n readOnly,\n tabIndex,\n name,\n onKeyDownCapture,\n onKeyPress,\n onKeyPressCapture,\n onKeyUp,\n onKeyUpCapture,\n 'id': id ? id.toString() : '',\n 'aria-label': ariaLabel,\n };\n\n const Eye = passwordVisible ? IconEyeClose : IconEye;\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const flag = getIncrementFlag(e);\n onKeyDownProp?.(e);\n if (type === 'number' && typeof flag === 'boolean' && !disabled) {\n e.preventDefault();\n onChangeRef.current?.({\n e,\n id,\n name,\n value: getValueByStep(sortedSteps, value, flag, min, max),\n });\n }\n };\n\n const textareaProps = {\n rows,\n cols,\n minRows: minRows || rows,\n maxRows: maxRows || rows,\n ref: useForkRef([inputRef, inputRefProp]) as (\n node: HTMLTextAreaElement,\n ) => void,\n };\n\n const inputProps = {\n type: getTypeForRender(type, passwordVisible),\n max,\n min,\n step: !Array.isArray(sortedSteps) ? sortedSteps : 0,\n onKeyDown,\n ref: useForkRef([\n inputRef,\n inputRefProp,\n ]) as React.RefCallback<HTMLInputElement>,\n };\n\n const handleClear = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n onChangeRef.current?.({\n e,\n id,\n name,\n value: null,\n });\n }, []);\n\n const changeNumberValue = (\n e: React.MouseEvent<HTMLButtonElement>,\n isIncrement = true,\n ) => {\n onChangeRef.current?.({\n e,\n id,\n name,\n value: getValueByStep(sortedSteps, value, isIncrement, min, max),\n });\n };\n\n const rootProps = {\n onClick: useCallback((e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n inputRef.current?.focus();\n onClickRef.current?.(e);\n }, []),\n };\n\n // при смене passwordVible, перемещаем курсор в конец строки\n useEffect(() => {\n if (type === 'password' && inputRef.current) {\n inputRef.current.selectionStart = valueRef.current?.length || 0;\n }\n }, [passwordVisible]);\n\n return (\n <div\n className={cnTextField({ labelPosition, size, view, width }, [className])}\n ref={useForkRef([ref, textFieldRef])}\n {...rootProps}\n {...otherProps}\n >\n {label && (\n <FieldLabel\n icon={labelIcon}\n required={required}\n className={cnTextField('Label', { labelPosition })}\n size={size}\n >\n {label}\n </FieldLabel>\n )}\n <div className={cnTextField('Body')}>\n <div\n ref={inputContainerRef}\n className={cnTextField('InputContainer', {\n view,\n form,\n status: status || state,\n disabled,\n type,\n focus: focus || focused,\n withValue: !!value,\n })}\n >\n {LeftIcon && (\n <div\n className={cnTextField('Side', {\n position: 'left',\n type: leftSideIsString ? 'string' : 'icon',\n })}\n title={typeof leftSide === 'string' ? leftSide : undefined}\n >\n {leftSideIsString ? (\n leftSide\n ) : (\n <LeftIcon className={cnTextField('Icon')} size={iconSize} />\n )}\n </div>\n )}\n {textarea ? (\n <TextAreaAutoSize {...commonProps} {...textareaProps} />\n ) : (\n <input {...commonProps} {...inputProps} />\n )}\n\n {type === 'number' && incrementButtons && (\n <div className={cnTextField('Counter')}>\n <button\n onFocus={handleFocus}\n onClick={(e) => changeNumberValue(e, true)}\n type=\"button\"\n className={cnTextField('CounterButton')}\n >\n <IconSelectOpen size=\"xs\" />\n </button>\n <button\n onFocus={handleFocus}\n onClick={(e) => changeNumberValue(e, false)}\n type=\"button\"\n className={cnTextField('CounterButton')}\n >\n <IconSelect size=\"xs\" />\n </button>\n </div>\n )}\n\n {value && withClearButton && type !== 'number' && (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={handleClear}\n className={cnTextField('ClearButton')}\n >\n <IconClose size=\"xs\" className={cnTextField('ClearButtonIcon')} />\n </button>\n )}\n\n {type === 'password' && value && (\n <button\n className={cnTextField('ClearButton')}\n type=\"button\"\n onClick={handleEyeClick}\n >\n <Eye className={cnTextField('Icon')} size={iconSize} />\n </button>\n )}\n\n {RightIcon && type !== 'number' && type !== 'password' && (\n <div\n className={cnTextField('Side', {\n position: 'right',\n type: rightSideIsString ? 'string' : 'icon',\n })}\n title={typeof rightSide === 'string' ? rightSide : undefined}\n >\n {rightSideIsString ? (\n rightSide\n ) : (\n <RightIcon className={cnTextField('Icon')} size={iconSize} />\n )}\n </div>\n )}\n </div>\n {caption && (\n <FieldCaption\n className={cnTextField('Caption')}\n status={status || state}\n >\n {caption}\n </FieldCaption>\n )}\n </div>\n </div>\n );\n};\n\nexport const TextField = forwardRef(TextFieldRender) as TextFieldComponent;\nexport * from './types';\n"],"mappings":"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"}
|
|
@@ -20,5 +20,5 @@ export declare type TooltipProps = Omit<TooltipComponentProps, 'children' | 'ref
|
|
|
20
20
|
export declare type WithTooltipProps<Props> = Omit<Props, 'tooltipProps'> & {
|
|
21
21
|
tooltipProps?: TooltipProps;
|
|
22
22
|
};
|
|
23
|
-
export declare function withTooltip(hocProps?: TooltipProps): <COMPONENT_TYPE
|
|
23
|
+
export declare function withTooltip(hocProps?: TooltipProps): <COMPONENT_TYPE, COMPONENT_PROPS extends ComponentProps>(Component: COMPONENT_TYPE) => COMPONENT_TYPE | React.ComponentType<WithTooltipProps<COMPONENT_PROPS>>;
|
|
24
24
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _defineProperty from"@babel/runtime/helpers/defineProperty";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["tooltipProps"],_excluded2=["mode","content","closeOnClickOutside","appearTimeout","exitTimeout"
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _defineProperty from"@babel/runtime/helpers/defineProperty";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["tooltipProps","onClick","onMouseEnter","onMouseLeave"],_excluded2=["mode","content","closeOnClickOutside","appearTimeout","exitTimeout"];function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}import React,{useEffect,useRef}from"react";import{useFlag}from"../../hooks/useFlag";import{Tooltip}from"../../components/Tooltip/Tooltip";import{useForkRef}from"../../hooks/useForkRef/useForkRef";export var withTooltipPropMode=["mouseover","click"];export var withTooltipPropModeDefault=withTooltipPropMode[0];export var appearTimeoutDefault=400;export var exitTimeoutDefault=200;var closeFunctions=[];function clearTooltips(a,b){if(b){a.current.timer&&clearTimeout(a.current.timer);var g=closeFunctions.findIndex(function(b){return b===a});closeFunctions.splice(g,1)}else{var c,d=_createForOfIteratorHelper(closeFunctions);try{for(d.s();!(c=d.n()).done;){var h=c.value;if(a!==h){var e,f;h.current.timer&&clearTimeout(h.current.timer),null===(e=(f=h.current).closeFunction)||void 0===e?void 0:e.call(f)}}}catch(a){d.e(a)}finally{d.f()}closeFunctions.splice(0),closeFunctions.push(a)}}export function withTooltip(a){return function(b){return React.forwardRef(function(c,d){var e=c.tooltipProps,f=void 0===e?{}:e,g=c.onClick,h=c.onMouseEnter,i=c.onMouseLeave,j=_objectWithoutProperties(c,_excluded),k=_objectSpread(_objectSpread({},a),f),l=k.mode,m=void 0===l?"mouseover":l,n=k.content,o=k.closeOnClickOutside,p=k.appearTimeout,q=void 0===p?appearTimeoutDefault:p,r=k.exitTimeout,s=void 0===r?exitTimeoutDefault:r,t=_objectWithoutProperties(k,_excluded2),u=useFlag(),v=_slicedToArray(u,2),w=v[0],x=v[1],y=useRef(null),z=useRef(null),A=useRef({}),B=function(){A.current.timer&&clearTimeout(A.current.timer)},C=function(){"mouseover"===m&&w&&(A.current.timer=setTimeout(x.off,s))},D=function(){"mouseover"!==m||w||(A.current.timer=setTimeout(x.on,q))};useEffect(function(){return function(){return clearTooltips(A,!0)}},[]),useEffect(function(){w&&(A.current.closeFunction=x.off,clearTooltips(A))},[w]);return React.createElement(React.Fragment,null,React.createElement(b,Object.assign({},j,{onClick:function onClick(a){"click"===m&&x.toggle(),null===g||void 0===g?void 0:g(a)},onMouseEnter:function onMouseEnter(a){"mouseover"===m&&(B(),D()),null===h||void 0===h?void 0:h(a)},onMouseLeave:function onMouseLeave(a){B(),C(),null===i||void 0===i?void 0:i(a)},ref:useForkRef([y,d])})),w&&React.createElement(Tooltip,Object.assign({},t,{ref:z,anchorRef:y,onClickOutside:function onClickOutside(){"click"===m&&(!(void 0!==o)||o)&&x.off()},onMouseEnter:function tooltipOnMouseEnter(a){var b;B(),null===(b=t.onMouseEnter)||void 0===b?void 0:b.call(t,a)},onMouseLeave:function tooltipOnMouseLeave(a){var b;B(),C(),null===(b=t.onMouseLeave)||void 0===b?void 0:b.call(t,a)}}),n))})}}
|
|
2
2
|
//# sourceMappingURL=withTooltip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withTooltip.js","names":["React","useEffect","useRef","useState","Tooltip","useForkRef","withTooltipPropMode","withTooltipPropModeDefault","appearTimeoutDefault","exitTimeoutDefault","closeFunctions","clearTooltips","currentRef","removeCurrent","current","timer","clearTimeout","index","findIndex","ref","splice","closeFunction","push","withTooltip","hocProps","Component","forwardRef","props","tooltipProps","tooltipPropsFromComponent","componentProps","mode","content","closeOnClickOutside","appearTimeout","exitTimeout","style","otherTooltipProps","visible","setVisible","componentRef","tooltipRef","clearRef","clearTimer","setExitTimer","setTimeout","setAppearTimer","onClick","e","onMouseEnter","onMouseLeave","onClickOutside","tooltipOnMouseEnter","tooltipOnMouseLeave","zIndex"],"sources":["../../../../../src/hocs/withTooltip/withTooltip.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport {\n Tooltip,\n TooltipProps as TooltipComponentProps,\n} from '../../components/Tooltip/Tooltip';\nimport { useForkRef } from '../../hooks/useForkRef/useForkRef';\n\nexport const withTooltipPropMode = ['mouseover', 'click'] as const;\nexport const withTooltipPropModeDefault = withTooltipPropMode[0];\ntype WithTooltipPropMode = typeof withTooltipPropMode[number];\n\nexport const appearTimeoutDefault = 400;\nexport const exitTimeoutDefault = 200;\n\ntype ComponentProps = {\n onClick?: (() => void) | React.EventHandler<React.MouseEvent>;\n onMouseEnter?: (() => void) | React.MouseEventHandler;\n onMouseLeave?: (() => void) | React.MouseEventHandler;\n};\n\nexport type TooltipProps = Omit<TooltipComponentProps, 'children' | 'ref'> & {\n content?: React.ReactNode;\n mode?: WithTooltipPropMode;\n closeOnClickOutside?: boolean;\n appearTimeout?: number;\n exitTimeout?: number;\n};\n\ntype ClearTooltip = {\n closeFunction?: () => void;\n timer?: ReturnType<typeof setTimeout>;\n};\n\ntype ClearTooltipRef = React.MutableRefObject<ClearTooltip>;\n\nexport type WithTooltipProps<Props> = Omit<Props, 'tooltipProps'> & {\n tooltipProps?: TooltipProps;\n};\n\nconst closeFunctions: ClearTooltipRef[] = [];\n// функция которая закроет все тултипы на странице кроме текущего с которым взаимодействует пользователь\nfunction clearTooltips(currentRef: ClearTooltipRef, removeCurrent?: boolean) {\n if (removeCurrent) {\n // удаляем только текущую функцию закрытия, нужна если компонент размонтируется\n if (currentRef.current.timer) {\n clearTimeout(currentRef.current.timer);\n }\n const index = closeFunctions.findIndex((ref) => ref === currentRef);\n closeFunctions.splice(index, 1);\n } else {\n // закрываем все тултипы на странице кроме текущего с которым взаимодействует пользователь\n for (const ref of closeFunctions) {\n if (currentRef !== ref) {\n if (ref.current.timer) {\n clearTimeout(ref.current.timer);\n }\n if (ref.current.closeFunction) {\n ref.current.closeFunction();\n }\n }\n }\n closeFunctions.splice(0);\n closeFunctions.push(currentRef);\n }\n}\n\nexport function withTooltip(hocProps?: TooltipProps) {\n return function <\n COMPONENT_TYPE extends\n | React.ComponentType<React.PropsWithRef<ComponentProps>>\n | ((props: ComponentProps) => React.ReactElement | null),\n COMPONENT_PROPS extends ComponentProps,\n >(Component: COMPONENT_TYPE) {\n return React.forwardRef<HTMLElement, WithTooltipProps<COMPONENT_PROPS>>(\n (props, ref) => {\n const {\n tooltipProps: tooltipPropsFromComponent = {},\n ...componentProps\n } = props;\n const tooltipProps: TooltipProps = {\n ...hocProps,\n ...tooltipPropsFromComponent,\n };\n const {\n mode = 'mouseover',\n content,\n closeOnClickOutside = true,\n appearTimeout = appearTimeoutDefault,\n exitTimeout = exitTimeoutDefault,\n style,\n ...otherTooltipProps\n } = tooltipProps;\n\n const [visible, setVisible] = useState<boolean>(false);\n const componentRef = useRef<HTMLElement | null>(null);\n const tooltipRef = useRef<HTMLDivElement | null>(null);\n const clearRef = useRef<ClearTooltip>({});\n\n const clearTimer = () => {\n if (clearRef.current.timer) {\n clearTimeout(clearRef.current.timer);\n }\n };\n\n const setExitTimer = () => {\n if (mode === 'mouseover' && visible) {\n clearRef.current.timer = setTimeout(\n () => setVisible(false),\n exitTimeout,\n );\n }\n };\n\n const setAppearTimer = () => {\n if (mode === 'mouseover' && !visible) {\n clearRef.current.timer = setTimeout(\n () => setVisible(true),\n appearTimeout,\n );\n }\n };\n\n useEffect(() => {\n // очищаем ссылку в clearTooltips при размонтировании компонента\n return () => clearTooltips(clearRef, true);\n }, []);\n\n useEffect(() => {\n if (visible) {\n clearRef.current.closeFunction = () => setVisible(false);\n clearTooltips(clearRef);\n }\n }, [visible]);\n\n const onClick = (e: React.MouseEvent) => {\n if (mode === 'click') {\n setVisible(!visible);\n }\n if (props.onClick) {\n props?.onClick(e);\n }\n };\n\n const onClickOutside = () => {\n if (mode === 'click' && closeOnClickOutside) {\n setVisible(false);\n }\n };\n\n const onMouseEnter = (e: React.MouseEvent) => {\n if (mode === 'mouseover') {\n clearTimer();\n setAppearTimer();\n }\n\n if (props.onMouseEnter) {\n props.onMouseEnter(e);\n }\n };\n\n const onMouseLeave = (e: React.MouseEvent) => {\n clearTimer();\n setExitTimer();\n if (props.onMouseLeave) {\n props.onMouseLeave(e);\n }\n };\n\n const tooltipOnMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => {\n clearTimer();\n if (otherTooltipProps.onMouseEnter) {\n otherTooltipProps.onMouseEnter(e);\n }\n };\n\n const tooltipOnMouseLeave = (e: React.MouseEvent<HTMLDivElement>) => {\n clearTimer();\n setExitTimer();\n if (otherTooltipProps.onMouseLeave) {\n otherTooltipProps.onMouseLeave(e);\n }\n };\n\n const Anchor = Component as React.ComponentType<COMPONENT_PROPS>;\n\n return (\n <>\n <Anchor\n {...(componentProps as COMPONENT_PROPS)}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n ref={useForkRef([componentRef, ref])}\n style={style}\n />\n {visible && (\n <Tooltip\n {...otherTooltipProps}\n ref={tooltipRef}\n anchorRef={componentRef}\n onClickOutside={onClickOutside}\n onMouseEnter={tooltipOnMouseEnter}\n onMouseLeave={tooltipOnMouseLeave}\n style={\n typeof style?.zIndex === 'number'\n ? { zIndex: style.zIndex + 1 }\n : undefined\n }\n >\n {content}\n </Tooltip>\n )}\n </>\n );\n // привел к типам, так как прокинутый компонент может иметь джененрики и они потеряются за хоком\n },\n ) as unknown as\n | COMPONENT_TYPE\n | React.ComponentType<WithTooltipProps<COMPONENT_PROPS>>;\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"withTooltip.js","names":["React","useEffect","useRef","useFlag","Tooltip","useForkRef","withTooltipPropMode","withTooltipPropModeDefault","appearTimeoutDefault","exitTimeoutDefault","closeFunctions","clearTooltips","currentRef","removeCurrent","current","timer","clearTimeout","index","findIndex","ref","splice","closeFunction","push","withTooltip","hocProps","Component","forwardRef","props","tooltipProps","tooltipPropsFromComponent","onClickProp","onClick","onMouseEnterProp","onMouseEnter","onMouseLeaveProp","onMouseLeave","componentProps","mode","content","closeOnClickOutside","appearTimeout","exitTimeout","otherTooltipProps","visible","setVisible","componentRef","tooltipRef","clearRef","clearTimer","setExitTimer","setTimeout","off","setAppearTimer","on","e","toggle","onClickOutside","tooltipOnMouseEnter","tooltipOnMouseLeave"],"sources":["../../../../../src/hocs/withTooltip/withTooltip.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\n\nimport { useFlag } from '##/hooks/useFlag';\n\nimport {\n Tooltip,\n TooltipProps as TooltipComponentProps,\n} from '../../components/Tooltip/Tooltip';\nimport { useForkRef } from '../../hooks/useForkRef/useForkRef';\n\nexport const withTooltipPropMode = ['mouseover', 'click'] as const;\nexport const withTooltipPropModeDefault = withTooltipPropMode[0];\ntype WithTooltipPropMode = typeof withTooltipPropMode[number];\n\nexport const appearTimeoutDefault = 400;\nexport const exitTimeoutDefault = 200;\n\ntype ComponentProps = {\n onClick?: (() => void) | React.EventHandler<React.MouseEvent>;\n onMouseEnter?: (() => void) | React.MouseEventHandler;\n onMouseLeave?: (() => void) | React.MouseEventHandler;\n};\n\nexport type TooltipProps = Omit<TooltipComponentProps, 'children' | 'ref'> & {\n content?: React.ReactNode;\n mode?: WithTooltipPropMode;\n closeOnClickOutside?: boolean;\n appearTimeout?: number;\n exitTimeout?: number;\n};\n\ntype ClearTooltip = {\n closeFunction?: () => void;\n timer?: ReturnType<typeof setTimeout>;\n};\n\ntype ClearTooltipRef = React.MutableRefObject<ClearTooltip>;\n\nexport type WithTooltipProps<Props> = Omit<Props, 'tooltipProps'> & {\n tooltipProps?: TooltipProps;\n};\n\nconst closeFunctions: ClearTooltipRef[] = [];\n// функция которая закроет все тултипы на странице кроме текущего с которым взаимодействует пользователь\nfunction clearTooltips(currentRef: ClearTooltipRef, removeCurrent?: boolean) {\n if (removeCurrent) {\n // удаляем только текущую функцию закрытия, нужна если компонент размонтируется\n if (currentRef.current.timer) {\n clearTimeout(currentRef.current.timer);\n }\n const index = closeFunctions.findIndex((ref) => ref === currentRef);\n closeFunctions.splice(index, 1);\n } else {\n // закрываем все тултипы на странице кроме текущего с которым взаимодействует пользователь\n for (const ref of closeFunctions) {\n if (currentRef !== ref) {\n if (ref.current.timer) {\n clearTimeout(ref.current.timer);\n }\n ref.current.closeFunction?.();\n }\n }\n closeFunctions.splice(0);\n closeFunctions.push(currentRef);\n }\n}\n\nexport function withTooltip(hocProps?: TooltipProps) {\n return function <COMPONENT_TYPE, COMPONENT_PROPS extends ComponentProps>(\n Component: COMPONENT_TYPE,\n ) {\n return React.forwardRef<HTMLElement, WithTooltipProps<COMPONENT_PROPS>>(\n (props, ref) => {\n const {\n tooltipProps: tooltipPropsFromComponent = {},\n onClick: onClickProp,\n onMouseEnter: onMouseEnterProp,\n onMouseLeave: onMouseLeaveProp,\n ...componentProps\n } = props;\n const tooltipProps: TooltipProps = {\n ...hocProps,\n ...tooltipPropsFromComponent,\n };\n const {\n mode = 'mouseover',\n content,\n closeOnClickOutside = true,\n appearTimeout = appearTimeoutDefault,\n exitTimeout = exitTimeoutDefault,\n ...otherTooltipProps\n } = tooltipProps;\n\n const [visible, setVisible] = useFlag();\n const componentRef = useRef<HTMLElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const clearRef = useRef<ClearTooltip>({});\n\n const clearTimer = () => {\n if (clearRef.current.timer) {\n clearTimeout(clearRef.current.timer);\n }\n };\n\n const setExitTimer = () => {\n if (mode === 'mouseover' && visible) {\n clearRef.current.timer = setTimeout(setVisible.off, exitTimeout);\n }\n };\n\n const setAppearTimer = () => {\n if (mode === 'mouseover' && !visible) {\n clearRef.current.timer = setTimeout(setVisible.on, appearTimeout);\n }\n };\n\n useEffect(() => {\n // очищаем ссылку в clearTooltips при размонтировании компонента\n return () => clearTooltips(clearRef, true);\n }, []);\n\n useEffect(() => {\n if (visible) {\n clearRef.current.closeFunction = setVisible.off;\n clearTooltips(clearRef);\n }\n }, [visible]);\n\n const onClick = (e: React.MouseEvent) => {\n if (mode === 'click') {\n setVisible.toggle();\n }\n onClickProp?.(e);\n };\n\n const onClickOutside = () => {\n if (mode === 'click' && closeOnClickOutside) {\n setVisible.off();\n }\n };\n\n const onMouseEnter = (e: React.MouseEvent) => {\n if (mode === 'mouseover') {\n clearTimer();\n setAppearTimer();\n }\n onMouseEnterProp?.(e);\n };\n\n const onMouseLeave = (e: React.MouseEvent) => {\n clearTimer();\n setExitTimer();\n onMouseLeaveProp?.(e);\n };\n\n const tooltipOnMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => {\n clearTimer();\n otherTooltipProps.onMouseEnter?.(e);\n };\n\n const tooltipOnMouseLeave = (e: React.MouseEvent<HTMLDivElement>) => {\n clearTimer();\n setExitTimer();\n otherTooltipProps.onMouseLeave?.(e);\n };\n\n const Anchor =\n Component as unknown as React.ComponentType<COMPONENT_PROPS>;\n\n return (\n <>\n <Anchor\n {...(componentProps as COMPONENT_PROPS)}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n ref={useForkRef([componentRef, ref])}\n />\n {visible && (\n <Tooltip\n {...otherTooltipProps}\n ref={tooltipRef}\n anchorRef={componentRef}\n onClickOutside={onClickOutside}\n onMouseEnter={tooltipOnMouseEnter}\n onMouseLeave={tooltipOnMouseLeave}\n >\n {content}\n </Tooltip>\n )}\n </>\n );\n // привел к типам, так как прокинутый компонент может иметь джененрики и они потеряются за хоком\n },\n ) as unknown as\n | COMPONENT_TYPE\n | React.ComponentType<WithTooltipProps<COMPONENT_PROPS>>;\n };\n}\n"],"mappings":"ymEAAA,MAAOA,MAAP,EAAgBC,SAAhB,CAA2BC,MAA3B,KAAyC,OAAzC,CAEA,OAASC,OAAT,2BAEA,OACEC,OADF,wCAIA,OAASC,UAAT,yCAEA,MAAO,IAAMC,oBAAmB,CAAG,CAAC,WAAD,CAAc,OAAd,CAA5B,CACP,MAAO,IAAMC,2BAA0B,CAAGD,mBAAmB,CAAC,CAAD,CAAtD,CAGP,MAAO,IAAME,qBAAoB,CAAG,GAA7B,CACP,MAAO,IAAMC,mBAAkB,CAAG,GAA3B,CA2BP,GAAMC,eAAiC,CAAG,EAA1C,CAEA,QAASC,cAAT,CAAuBC,CAAvB,CAAoDC,CAApD,CAA6E,CAC3E,GAAIA,CAAJ,CAAmB,CAEbD,CAAU,CAACE,OAAX,CAAmBC,KAFN,EAGfC,YAAY,CAACJ,CAAU,CAACE,OAAX,CAAmBC,KAApB,CAHG,CAKjB,GAAME,EAAK,CAAGP,cAAc,CAACQ,SAAf,CAAyB,SAACC,CAAD,QAASA,EAAG,GAAKP,CAAjB,CAAzB,CAAd,CACAF,cAAc,CAACU,MAAf,CAAsBH,CAAtB,CAA6B,CAA7B,CACD,CAPD,IAOO,oCAEaP,cAFb,MAEL,2BAAkC,IAAvBS,EAAuB,SAChC,GAAIP,CAAU,GAAKO,CAAnB,CAAwB,SAClBA,CAAG,CAACL,OAAJ,CAAYC,KADM,EAEpBC,YAAY,CAACG,CAAG,CAACL,OAAJ,CAAYC,KAAb,CAFQ,WAItB,GAAAI,CAAG,CAACL,OAAJ,EAAYO,aAJU,qBAItB,SACD,CACF,CATI,+BAULX,cAAc,CAACU,MAAf,CAAsB,CAAtB,CAVK,CAWLV,cAAc,CAACY,IAAf,CAAoBV,CAApB,CACD,CACF,CAED,MAAO,SAASW,YAAT,CAAqBC,CAArB,CAA8C,CACnD,MAAO,UACLC,CADK,CAEL,CACA,MAAOzB,MAAK,CAAC0B,UAAN,CACL,SAACC,CAAD,CAAQR,CAAR,CAAgB,OAOVQ,CAPU,CAEZC,YAFY,CAEEC,CAFF,YAE8B,EAF9B,GAGHC,CAHG,CAOVH,CAPU,CAGZI,OAHY,CAIEC,CAJF,CAOVL,CAPU,CAIZM,YAJY,CAKEC,CALF,CAOVP,CAPU,CAKZQ,YALY,CAMTC,CANS,0BAOVT,CAPU,YAQRC,CAA0B,gCAC3BJ,CAD2B,EAE3BK,CAF2B,CARlB,GAmBVD,CAnBU,CAaZS,IAbY,CAaZA,CAbY,YAaL,WAbK,GAcZC,CAdY,CAmBVV,CAnBU,CAcZU,OAdY,GAmBVV,CAnBU,CAeZW,mBAfY,GAmBVX,CAnBU,CAgBZY,aAhBY,CAgBZA,CAhBY,YAgBIhC,oBAhBJ,KAmBVoB,CAnBU,CAiBZa,WAjBY,CAiBZA,CAjBY,YAiBEhC,kBAjBF,GAkBTiC,CAlBS,0BAmBVd,CAnBU,eAqBgBzB,OAAO,EArBvB,uBAqBPwC,CArBO,MAqBEC,CArBF,MAsBRC,CAAY,CAAG3C,MAAM,CAAc,IAAd,CAtBb,CAuBR4C,CAAU,CAAG5C,MAAM,CAAiB,IAAjB,CAvBX,CAwBR6C,CAAQ,CAAG7C,MAAM,CAAe,EAAf,CAxBT,CA0BR8C,CAAU,CAAG,UAAM,CACnBD,CAAQ,CAACjC,OAAT,CAAiBC,KADE,EAErBC,YAAY,CAAC+B,CAAQ,CAACjC,OAAT,CAAiBC,KAAlB,CAEf,CA9Ba,CAgCRkC,CAAY,CAAG,UAAM,CACZ,WAAT,GAAAZ,CAAI,EAAoBM,CADH,GAEvBI,CAAQ,CAACjC,OAAT,CAAiBC,KAAjB,CAAyBmC,UAAU,CAACN,CAAU,CAACO,GAAZ,CAAiBV,CAAjB,CAFZ,CAI1B,CApCa,CAsCRW,CAAc,CAAG,UAAM,CACd,WAAT,GAAAf,CAAI,EAAqBM,CADF,GAEzBI,CAAQ,CAACjC,OAAT,CAAiBC,KAAjB,CAAyBmC,UAAU,CAACN,CAAU,CAACS,EAAZ,CAAgBb,CAAhB,CAFV,CAI5B,CA1Ca,CA4CdvC,SAAS,CAAC,UAAM,CAEd,MAAO,kBAAMU,cAAa,CAACoC,CAAD,IAAnB,CACR,CAHQ,CAGN,EAHM,CA5CK,CAiDd9C,SAAS,CAAC,UAAM,CACV0C,CADU,GAEZI,CAAQ,CAACjC,OAAT,CAAiBO,aAAjB,CAAiCuB,CAAU,CAACO,GAFhC,CAGZxC,aAAa,CAACoC,CAAD,CAHD,CAKf,CALQ,CAKN,CAACJ,CAAD,CALM,CAjDK,CAiGd,MACE,yCACE,oBAJFlB,CAIE,kBACOW,CADP,EAEE,OAAO,CA7CG,QAAVL,QAAU,CAACuB,CAAD,CAAyB,CAC1B,OAAT,GAAAjB,CADmC,EAErCO,CAAU,CAACW,MAAX,EAFqC,QAIvCzB,CAJuC,WAIvCA,CAJuC,QAIvCA,CAAW,CAAGwB,CAAH,CACZ,CAsCG,CAGE,YAAY,CAjCG,QAAfrB,aAAe,CAACqB,CAAD,CAAyB,CAC/B,WAAT,GAAAjB,CADwC,GAE1CW,CAAU,EAFgC,CAG1CI,CAAc,EAH4B,SAK5CpB,CAL4C,WAK5CA,CAL4C,QAK5CA,CAAgB,CAAGsB,CAAH,CACjB,CAwBG,CAIE,YAAY,CA1BG,QAAfnB,aAAe,CAACmB,CAAD,CAAyB,CAC5CN,CAAU,EADkC,CAE5CC,CAAY,EAFgC,QAG5Cf,CAH4C,WAG5CA,CAH4C,QAG5CA,CAAgB,CAAGoB,CAAH,CACjB,CAkBG,CAKE,GAAG,CAAEjD,UAAU,CAAC,CAACwC,CAAD,CAAe1B,CAAf,CAAD,CALjB,GADF,CAQGwB,CAAO,EACN,oBAAC,OAAD,kBACMD,CADN,EAEE,GAAG,CAAEI,CAFP,CAGE,SAAS,CAAED,CAHb,CAIE,cAAc,CAhDC,QAAjBW,eAAiB,EAAM,CACd,OAAT,GAAAnB,CAAI,oBADmB,EAEzBO,CAAU,CAACO,GAAX,EAEH,CAwCK,CAKE,YAAY,CA7BQ,QAAtBM,oBAAsB,CAACH,CAAD,CAAyC,OACnEN,CAAU,EADyD,WAEnEN,CAAiB,CAACT,YAFiD,qBAEnE,OAAAS,CAAiB,CAAgBY,CAAhB,CAClB,CAqBK,CAME,YAAY,CAzBQ,QAAtBI,oBAAsB,CAACJ,CAAD,CAAyC,OACnEN,CAAU,EADyD,CAEnEC,CAAY,EAFuD,WAGnEP,CAAiB,CAACP,YAHiD,qBAGnE,OAAAO,CAAiB,CAAgBY,CAAhB,CAClB,CAeK,GAQGhB,CARH,CATJ,CAuBH,CA1HI,CA8HR,CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getElementSize.js","names":["defaultSize","width","height","getElementSize","el","getBoundingClientRect"],"sources":["../../../../../src/hooks/useComponentSize/getElementSize.ts"],"sourcesContent":["import { ComponentSize } from './types';\n\nconst defaultSize: ComponentSize = { width: 0, height: 0 };\n\nexport const getElementSize = (\n el: HTMLElement | SVGGraphicsElement | null,\n): ComponentSize => {\n if (!el) {\n return defaultSize;\n }\n\n const { width, height } = el.getBoundingClientRect();\n\n return {\n width,\n height,\n };\n};\n"],"mappings":"AAEA,GAAMA,YAA0B,CAAG,CAAEC,KAAK,CAAE,CAAT,CAAYC,MAAM,CAAE,CAApB,CAAnC,CAEA,MAAO,IAAMC,eAAc,CAAG,SAC5BC,CAD4B,CAEV,CAClB,GAAI,CAACA,CAAL,CACE,MAAOJ,YAAP,CAGF,MAA0BI,CAAE,CAACC,qBAAH,EAA1B,CAAQJ,CAAR,GAAQA,KAAR,CAAeC,CAAf,GAAeA,MAAf,CAEA,MAAO,CACLD,KAAK,CAALA,CADK,CAELC,MAAM,CAANA,CAFK,CAIR,CAbM"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export*from"./useComponentSize";
|
|
1
|
+
export*from"./useComponentSize";export*from"./getElementSize";export*from"./types";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/hooks/useComponentSize/index.ts"],"sourcesContent":["export * from './useComponentSize';\n"],"mappings":"AAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/hooks/useComponentSize/index.ts"],"sourcesContent":["export * from './useComponentSize';\nexport * from './getElementSize';\nexport * from './types';\n"],"mappings":"AAAA,gCACA,8BACA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/hooks/useComponentSize/types.ts"],"sourcesContent":["export type ComponentSize = {\n width: number;\n height: number;\n};\n"],"mappings":""}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
3
|
-
width: number;
|
|
4
|
-
height: number;
|
|
5
|
-
};
|
|
6
|
-
export declare const getElementSize: (el: HTMLElement | SVGGraphicsElement | null) => ComponentSize;
|
|
2
|
+
import { ComponentSize } from './types';
|
|
7
3
|
export declare function useComponentSize(ref: React.RefObject<HTMLElement | SVGGraphicsElement>): ComponentSize;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import{useMemo}from"react";import{useResizeObserved}from"../useResizeObserved";import{getElementSize}from"./getElementSize";export function useComponentSize(a){var b=useMemo(function(){return[a]},[a.current]);return useResizeObserved(b,getElementSize)[0]}
|
|
2
2
|
//# sourceMappingURL=useComponentSize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useComponentSize.js","names":["useMemo","useResizeObserved","getElementSize","
|
|
1
|
+
{"version":3,"file":"useComponentSize.js","names":["useMemo","useResizeObserved","getElementSize","useComponentSize","ref","refs","current"],"sources":["../../../../../src/hooks/useComponentSize/useComponentSize.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useResizeObserved } from '##/hooks/useResizeObserved';\n\nimport { getElementSize } from './getElementSize';\nimport { ComponentSize } from './types';\n\nexport function useComponentSize(\n ref: React.RefObject<HTMLElement | SVGGraphicsElement>,\n): ComponentSize {\n const refs = useMemo(\n () => [ref],\n // Если реф начал указывать на другой элемент, нужно обновить подписки\n [ref.current],\n );\n return useResizeObserved(refs, getElementSize)[0];\n}\n"],"mappings":"AAAA,OAASA,OAAT,KAAwB,OAAxB,CAEA,OAASC,iBAAT,4BAEA,OAASC,cAAT,wBAGA,MAAO,SAASC,iBAAT,CACLC,CADK,CAEU,CACf,GAAMC,EAAI,CAAGL,OAAO,CAClB,iBAAM,CAACI,CAAD,CAAN,CADkB,CAGlB,CAACA,CAAG,CAACE,OAAL,CAHkB,CAApB,CAKA,MAAOL,kBAAiB,CAACI,CAAD,CAAOH,cAAP,CAAjB,CAAwC,CAAxC,CACR"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}import React
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}import React,{useLayoutEffect}from"react";export var useResizeObserved=function(a,b){var c=React.useState(function(){return a.map(function(a){return b(a.current)})}),d=_slicedToArray(c,2),e=d[0],f=d[1],g=React.useRef(b);return useLayoutEffect(function(){g.current=b},[b]),useLayoutEffect(function(){var b,c=new ResizeObserver(function(){f(a.map(function(a){return g.current(a.current)}))}),d=_createForOfIteratorHelper(a);try{for(d.s();!(b=d.n()).done;){var e=b.value;e.current&&c.observe(e.current)}}catch(a){d.e(a)}finally{d.f()}return function(){c.disconnect()}},[a]),e};
|
|
2
2
|
//# sourceMappingURL=useResizeObserved.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResizeObserved.js","names":["React","useResizeObserved","refs","mapper","useState","map","ref","current","dimensions","setDimensions","mapperRef","useRef","
|
|
1
|
+
{"version":3,"file":"useResizeObserved.js","names":["React","useLayoutEffect","useResizeObserved","refs","mapper","useState","map","ref","current","dimensions","setDimensions","mapperRef","useRef","resizeObserver","ResizeObserver","observe","disconnect"],"sources":["../../../../../src/hooks/useResizeObserved/useResizeObserved.ts"],"sourcesContent":["import React, { RefObject, useLayoutEffect } from 'react';\n\nexport const useResizeObserved = <\n ELEMENT extends HTMLElement | SVGGraphicsElement,\n RETURN_TYPE,\n>(\n refs: Array<RefObject<ELEMENT>>,\n mapper: (el: ELEMENT | null) => RETURN_TYPE,\n): RETURN_TYPE[] => {\n const [dimensions, setDimensions] = React.useState<RETURN_TYPE[]>(() =>\n refs.map((ref) => mapper(ref.current)),\n );\n\n // Храним маппер в рефке, чтобы если его передадут инлайн-функцией, это не вызвало бесконечные перерендеры\n const mapperRef = React.useRef(mapper);\n useLayoutEffect(() => {\n mapperRef.current = mapper;\n }, [mapper]);\n\n useLayoutEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n setDimensions(refs.map((ref) => mapperRef.current(ref.current)));\n });\n\n for (const ref of refs) {\n ref.current && resizeObserver.observe(ref.current);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [refs]);\n\n return dimensions;\n};\n"],"mappings":"stCAAA,MAAOA,MAAP,EAA2BC,eAA3B,KAAkD,OAAlD,CAEA,MAAO,IAAMC,kBAAiB,CAAG,SAI/BC,CAJ+B,CAK/BC,CAL+B,CAMb,OACkBJ,KAAK,CAACK,QAAN,CAA8B,iBAChEF,EAAI,CAACG,GAAL,CAAS,SAACC,CAAD,QAASH,EAAM,CAACG,CAAG,CAACC,OAAL,CAAf,CAAT,CADgE,CAA9B,CADlB,uBACXC,CADW,MACCC,CADD,MAMZC,CAAS,CAAGX,KAAK,CAACY,MAAN,CAAaR,CAAb,CANA,CAyBlB,MAlBAH,gBAAe,CAAC,UAAM,CACpBU,CAAS,CAACH,OAAV,CAAoBJ,CACrB,CAFc,CAEZ,CAACA,CAAD,CAFY,CAkBf,CAdAH,eAAe,CAAC,UAAM,OACdY,CAAc,CAAG,GAAIC,eAAJ,CAAmB,UAAM,CAC9CJ,CAAa,CAACP,CAAI,CAACG,GAAL,CAAS,SAACC,CAAD,QAASI,EAAS,CAACH,OAAV,CAAkBD,CAAG,CAACC,OAAtB,CAAT,CAAT,CAAD,CACd,CAFsB,CADH,8BAKFL,CALE,MAKpB,2BAAwB,IAAbI,EAAa,SACtBA,CAAG,CAACC,OAAJ,EAAeK,CAAc,CAACE,OAAf,CAAuBR,CAAG,CAACC,OAA3B,CAChB,CAPmB,+BASpB,MAAO,WAAM,CACXK,CAAc,CAACG,UAAf,EACD,CACF,CAZc,CAYZ,CAACb,CAAD,CAZY,CAcf,CAAOM,CACR,CAhCM"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
export declare const defaultItemsCalculationCount = 5;
|
|
3
|
+
export declare const useScroll: (ref: RefObject<HTMLElement>, fn: () => void, isActive: boolean) => void;
|
|
4
|
+
export declare const getElementHeight: (el: HTMLElement | SVGGraphicsElement | null) => number;
|
|
5
|
+
export declare const getVisiblePosition: (top: number, height: number) => [number, number];
|
|
6
|
+
export declare const calculateSavedSizes: (savedSizes: number[], sizes: number[]) => number[];
|
|
7
|
+
export declare const useCalculateVisiblePosition: (scrollElement: HTMLElement | null, set: (value: React.SetStateAction<[number, number]>) => void) => () => void;
|
|
8
|
+
export declare const calculateBounds: (savedSize: number[], size: number[], visiblePosition: [number, number], length: number) => [number, number][];
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import{useCallback,useEffect}from"react";import{getElementSize}from"../useComponentSize";export var defaultItemsCalculationCount=5;var visualGap=200;export var useScroll=function(a,b,c){useEffect(function(){return c?b():void 0},[a.current,b,c]),useEffect(function(){if(c){var d;null===(d=a.current)||void 0===d?void 0:d.addEventListener("scroll",b)}return function(){var c;null===(c=a.current)||void 0===c?void 0:c.removeEventListener("scroll",b)}},[a.current,b,c])};export var getElementHeight=function(a){return getElementSize(a).height};var roundPositionByGap=function(a,b){return 0>=a?0:Math.ceil(a/b)*b};export var getVisiblePosition=function(a,b){var c=Math.ceil(roundPositionByGap(0>a-b?0:a-b,b)-visualGap);return[0>=c?0:c,Math.ceil(roundPositionByGap(0===a?b:a,b)+b+visualGap)]};export var calculateSavedSizes=function(a,b){for(var c,d=_toConsumableArray(a),e=0;e<b.length;e++)c=b[e],0<c&&(d[e]=c);return d};export var useCalculateVisiblePosition=function(a,b){return useCallback(function(){if(a){var c=getVisiblePosition(a.scrollTop,getElementHeight(a));b(function(a){return c[0]!==a[0]||c[1]!==a[1]?c:a})}},[a,b])};var addCount=function(a,b,c){for(var d=c.slice(-50),e=d.reduce(function(c,a){return c+a},0)/d.length,f=defaultItemsCalculationCount;b[1]>a[1]+f*e;)f+=defaultItemsCalculationCount;return f};export var calculateBounds=function(a,b,c,d){for(var e=[0,0],f=[0,0],g=0;g<a.length;g++)c[0]>e[0]&&(e[0]+=a[g],f[0]=g),c[1]>e[1]&&(e[1]+=a[g],f[1]=g);return 0===f[0]&&0===f[1]&&(f[1]=defaultItemsCalculationCount),a.length-1>=f[1]&&b.length!==a.length&&(f[1]+=addCount(e,c,a)),f[1]-1>d&&(f[1]=d-1),[e,f]};
|
|
2
|
+
//# sourceMappingURL=hellpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hellpers.js","names":["useCallback","useEffect","getElementSize","defaultItemsCalculationCount","visualGap","useScroll","ref","fn","isActive","current","addEventListener","removeEventListener","getElementHeight","el","height","roundPositionByGap","position","gap","Math","ceil","getVisiblePosition","top","first","calculateSavedSizes","savedSizes","sizes","element","newSavedSizes","index","length","useCalculateVisiblePosition","scrollElement","set","visiblePosition","scrollTop","state","addCount","pxs","savedSize","lastSavedSize","slice","average","reduce","a","b","add","calculateBounds","size","indexs"],"sources":["../../../../../src/hooks/useVirtualScrollCanary/hellpers.ts"],"sourcesContent":["import { RefObject, useCallback, useEffect } from 'react';\n\nimport { getElementSize } from '##/hooks/useComponentSize';\n\nexport const defaultItemsCalculationCount = 5;\nconst visualGap = 200;\n\nexport const useScroll = (\n ref: RefObject<HTMLElement>,\n fn: () => void,\n isActive: boolean,\n) => {\n useEffect(() => (isActive ? fn() : undefined), [ref.current, fn, isActive]);\n useEffect(() => {\n if (isActive) {\n ref.current?.addEventListener('scroll', fn);\n }\n\n return () => {\n ref.current?.removeEventListener('scroll', fn);\n };\n }, [ref.current, fn, isActive]);\n};\n\nexport const getElementHeight = (el: HTMLElement | SVGGraphicsElement | null) =>\n getElementSize(el).height;\n\nconst roundPositionByGap = (position: number, gap: number) => {\n if (position <= 0) {\n return 0;\n }\n return Math.ceil(position / gap) * gap;\n};\n\nexport const getVisiblePosition = (\n top: number,\n height: number,\n): [number, number] => {\n const first = Math.ceil(\n roundPositionByGap(top - height < 0 ? 0 : top - height, height) - visualGap,\n );\n\n return [\n first <= 0 ? 0 : first,\n Math.ceil(\n roundPositionByGap(top === 0 ? height : top, height) + height + visualGap,\n ),\n ];\n};\n\nexport const calculateSavedSizes = (savedSizes: number[], sizes: number[]) => {\n const newSavedSizes = [...savedSizes];\n for (let index = 0; index < sizes.length; index++) {\n const element = sizes[index];\n if (element > 0) {\n newSavedSizes[index] = element;\n }\n }\n return newSavedSizes;\n};\n\nexport const useCalculateVisiblePosition = (\n scrollElement: HTMLElement | null,\n set: (value: React.SetStateAction<[number, number]>) => void,\n) =>\n useCallback(() => {\n if (!scrollElement) {\n return;\n }\n\n const visiblePosition = getVisiblePosition(\n scrollElement.scrollTop,\n getElementHeight(scrollElement),\n );\n\n set((state) => {\n if (visiblePosition[0] !== state[0] || visiblePosition[1] !== state[1]) {\n return visiblePosition;\n }\n\n return state;\n });\n }, [scrollElement, set]);\n\nconst addCount = (\n pxs: [number, number],\n visiblePosition: [number, number],\n savedSize: number[],\n) => {\n const lastSavedSize = savedSize.slice(-50);\n const average =\n lastSavedSize.reduce((a, b) => a + b, 0) / lastSavedSize.length;\n\n let add = defaultItemsCalculationCount;\n\n while (visiblePosition[1] > pxs[1] + add * average) {\n add += defaultItemsCalculationCount;\n }\n\n return add;\n};\n\nexport const calculateBounds = (\n savedSize: number[],\n size: number[],\n visiblePosition: [number, number],\n length: number,\n) => {\n const pxs: [number, number] = [0, 0];\n const indexs: [number, number] = [0, 0];\n\n for (let index = 0; index < savedSize.length; index++) {\n if (visiblePosition[0] > pxs[0]) {\n pxs[0] += savedSize[index];\n indexs[0] = index;\n }\n\n if (visiblePosition[1] > pxs[1]) {\n pxs[1] += savedSize[index];\n indexs[1] = index;\n }\n }\n\n if (indexs[0] === 0 && indexs[1] === 0) {\n indexs[1] = defaultItemsCalculationCount;\n }\n\n if (savedSize.length - 1 >= indexs[1] && size.length !== savedSize.length) {\n indexs[1] += addCount(pxs, visiblePosition, savedSize);\n }\n\n if (indexs[1] - 1 > length) {\n indexs[1] = length - 1;\n }\n\n return [pxs, indexs];\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useVirtualScrollCanary';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/hooks/useVirtualScrollCanary/index.ts"],"sourcesContent":["export * from './useVirtualScrollCanary';\n"],"mappings":"AAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare type UseVirtualScrollProps = {
|
|
3
|
+
length: number;
|
|
4
|
+
isActive?: boolean;
|
|
5
|
+
onScrollToBottom?: (index: number) => void;
|
|
6
|
+
};
|
|
7
|
+
declare type UseVirtualScrollReturn<ITEM_ELEMENT, SCROLL_ELEMENT> = {
|
|
8
|
+
listRefs: React.RefObject<ITEM_ELEMENT>[];
|
|
9
|
+
scrollElementRef: React.RefObject<SCROLL_ELEMENT>;
|
|
10
|
+
slice: [number, number];
|
|
11
|
+
spaceTop: number;
|
|
12
|
+
};
|
|
13
|
+
export declare const useVirtualScroll: <ITEM_ELEMENT extends HTMLElement = HTMLDivElement, SCROLL_ELEMENT extends HTMLElement = HTMLDivElement>({ length, onScrollToBottom, isActive, }: UseVirtualScrollProps) => UseVirtualScrollReturn<ITEM_ELEMENT, SCROLL_ELEMENT>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{useEffect,useRef,useState}from"react";import{useMutableRef}from"../useMutableRef";import{useRefs}from"../useRefs";import{useResizeObserved}from"../useResizeObserved";import{calculateBounds,calculateSavedSizes,defaultItemsCalculationCount,getElementHeight,useCalculateVisiblePosition,useScroll}from"./hellpers";export var useVirtualScroll=function(a){var b=a.length,c=a.onScrollToBottom,d=a.isActive,e=void 0!==d&&d,f=useState([0,0]),g=_slicedToArray(f,2),h=g[0],i=g[1],j=useState([[0,0],[0,e?defaultItemsCalculationCount:b]]),k=_slicedToArray(j,2),l=k[0],m=k[1],n=useRefs(b,h),o=useRef(null),p=useResizeObserved(n,getElementHeight),q=useRef(calculateSavedSizes([],p)),r=useMutableRef(c);return useScroll(o,useCalculateVisiblePosition(o.current,i),e),useEffect(function(){e?(q.current=calculateSavedSizes(q.current,p),m(calculateBounds(q.current,p,h,b))):m([[0,0],[0,b]])},[].concat(_toConsumableArray(h),[p,b,e])),useEffect(function(){r.current&&e&&l[1][1]+1>=b&&r.current(b)},[l[1][1],b,e]),{listRefs:n,scrollElementRef:o,slice:[0===l[1][0]?0:l[1][0]+1,0===l[1][1]?0:l[1][1]+1],spaceTop:l[0][0]}};
|
|
2
|
+
//# sourceMappingURL=useVirtualScrollCanary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVirtualScrollCanary.js","names":["useEffect","useRef","useState","useMutableRef","useRefs","useResizeObserved","calculateBounds","calculateSavedSizes","defaultItemsCalculationCount","getElementHeight","useCalculateVisiblePosition","useScroll","useVirtualScroll","length","onScrollToBottom","isActive","visiblePosition","setVisiblePosition","bounds","setBounds","listRefs","scrollElementRef","sizes","savedSizesRef","onScrollToBottomRef","current","slice","spaceTop"],"sources":["../../../../../src/hooks/useVirtualScrollCanary/useVirtualScrollCanary.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { useMutableRef } from '##/hooks/useMutableRef';\nimport { useRefs } from '##/hooks/useRefs';\nimport { useResizeObserved } from '##/hooks/useResizeObserved';\n\nimport {\n calculateBounds,\n calculateSavedSizes,\n defaultItemsCalculationCount,\n getElementHeight,\n useCalculateVisiblePosition,\n useScroll,\n} from './hellpers';\n\ntype UseVirtualScrollProps = {\n length: number;\n isActive?: boolean;\n onScrollToBottom?: (index: number) => void;\n};\n\ntype UseVirtualScrollReturn<ITEM_ELEMENT, SCROLL_ELEMENT> = {\n listRefs: React.RefObject<ITEM_ELEMENT>[];\n scrollElementRef: React.RefObject<SCROLL_ELEMENT>;\n slice: [number, number];\n spaceTop: number;\n};\n\nexport const useVirtualScroll = <\n ITEM_ELEMENT extends HTMLElement = HTMLDivElement,\n SCROLL_ELEMENT extends HTMLElement = HTMLDivElement,\n>({\n length,\n onScrollToBottom,\n isActive = false,\n}: UseVirtualScrollProps): UseVirtualScrollReturn<\n ITEM_ELEMENT,\n SCROLL_ELEMENT\n> => {\n const [visiblePosition, setVisiblePosition] = useState<[number, number]>([\n 0, 0,\n ]);\n const [bounds, setBounds] = useState<number[][]>([\n [0, 0],\n [0, isActive ? defaultItemsCalculationCount : length],\n ]);\n const listRefs = useRefs<ITEM_ELEMENT>(length, visiblePosition);\n const scrollElementRef = useRef<SCROLL_ELEMENT>(null);\n const sizes = useResizeObserved(listRefs, getElementHeight);\n const savedSizesRef = useRef(calculateSavedSizes([], sizes));\n const onScrollToBottomRef = useMutableRef(onScrollToBottom);\n\n useScroll(\n scrollElementRef,\n useCalculateVisiblePosition(scrollElementRef.current, setVisiblePosition),\n isActive,\n );\n\n useEffect(() => {\n if (isActive) {\n savedSizesRef.current = calculateSavedSizes(savedSizesRef.current, sizes);\n setBounds(\n calculateBounds(savedSizesRef.current, sizes, visiblePosition, length),\n );\n } else {\n setBounds([\n [0, 0],\n [0, length],\n ]);\n }\n }, [...visiblePosition, sizes, length, isActive]);\n\n useEffect(() => {\n if (onScrollToBottomRef.current && isActive && bounds[1][1] + 1 >= length) {\n onScrollToBottomRef.current(length);\n }\n }, [bounds[1][1], length, isActive]);\n\n return {\n listRefs,\n scrollElementRef,\n slice: [\n bounds[1][0] === 0 ? 0 : bounds[1][0] + 1,\n bounds[1][1] === 0 ? 0 : bounds[1][1] + 1,\n ],\n spaceTop: bounds[0][0],\n };\n};\n"],"mappings":"0IAAA,OAASA,SAAT,CAAoBC,MAApB,CAA4BC,QAA5B,KAA4C,OAA5C,CAEA,OAASC,aAAT,wBACA,OAASC,OAAT,kBACA,OAASC,iBAAT,4BAEA,OACEC,eADF,CAEEC,mBAFF,CAGEC,4BAHF,CAIEC,gBAJF,CAKEC,2BALF,CAMEC,SANF,kBAsBA,MAAO,IAAMC,iBAAgB,CAAG,WAU3B,IANHC,EAMG,GANHA,MAMG,CALHC,CAKG,GALHA,gBAKG,KAJHC,QAIG,CAJHA,CAIG,iBAC2Cb,QAAQ,CAAmB,CACvE,CADuE,CACpE,CADoE,CAAnB,CADnD,uBACIc,CADJ,MACqBC,CADrB,QAIyBf,QAAQ,CAAa,CAC/C,CAAC,CAAD,CAAI,CAAJ,CAD+C,CAE/C,CAAC,CAAD,CAAIa,CAAQ,CAAGP,4BAAH,CAAkCK,CAA9C,CAF+C,CAAb,CAJjC,uBAIIK,CAJJ,MAIYC,CAJZ,MAQGC,CAAQ,CAAGhB,OAAO,CAAeS,CAAf,CAAuBG,CAAvB,CARrB,CASGK,CAAgB,CAAGpB,MAAM,CAAiB,IAAjB,CAT5B,CAUGqB,CAAK,CAAGjB,iBAAiB,CAACe,CAAD,CAAWX,gBAAX,CAV5B,CAWGc,CAAa,CAAGtB,MAAM,CAACM,mBAAmB,CAAC,EAAD,CAAKe,CAAL,CAApB,CAXzB,CAYGE,CAAmB,CAAGrB,aAAa,CAACW,CAAD,CAZtC,CAwCH,MA1BAH,UAAS,CACPU,CADO,CAEPX,2BAA2B,CAACW,CAAgB,CAACI,OAAlB,CAA2BR,CAA3B,CAFpB,CAGPF,CAHO,CA0BT,CApBAf,SAAS,CAAC,UAAM,CACVe,CADU,EAEZQ,CAAa,CAACE,OAAd,CAAwBlB,mBAAmB,CAACgB,CAAa,CAACE,OAAf,CAAwBH,CAAxB,CAF/B,CAGZH,CAAS,CACPb,eAAe,CAACiB,CAAa,CAACE,OAAf,CAAwBH,CAAxB,CAA+BN,CAA/B,CAAgDH,CAAhD,CADR,CAHG,EAOZM,CAAS,CAAC,CACR,CAAC,CAAD,CAAI,CAAJ,CADQ,CAER,CAAC,CAAD,CAAIN,CAAJ,CAFQ,CAAD,CAKZ,CAZQ,8BAYFG,CAZE,GAYeM,CAZf,CAYsBT,CAZtB,CAY8BE,CAZ9B,GAoBT,CANAf,SAAS,CAAC,UAAM,CACVwB,CAAmB,CAACC,OAApB,EAA+BV,CAA/B,EAA2CG,CAAM,CAAC,CAAD,CAAN,CAAU,CAAV,EAAe,CAAf,EAAoBL,CADrD,EAEZW,CAAmB,CAACC,OAApB,CAA4BZ,CAA5B,CAEH,CAJQ,CAIN,CAACK,CAAM,CAAC,CAAD,CAAN,CAAU,CAAV,CAAD,CAAeL,CAAf,CAAuBE,CAAvB,CAJM,CAMT,CAAO,CACLK,QAAQ,CAARA,CADK,CAELC,gBAAgB,CAAhBA,CAFK,CAGLK,KAAK,CAAE,CACY,CAAjB,GAAAR,CAAM,CAAC,CAAD,CAAN,CAAU,CAAV,EAAqB,CAArB,CAAyBA,CAAM,CAAC,CAAD,CAAN,CAAU,CAAV,EAAe,CADnC,CAEY,CAAjB,GAAAA,CAAM,CAAC,CAAD,CAAN,CAAU,CAAV,EAAqB,CAArB,CAAyBA,CAAM,CAAC,CAAD,CAAN,CAAU,CAAV,EAAe,CAFnC,CAHF,CAOLS,QAAQ,CAAET,CAAM,CAAC,CAAD,CAAN,CAAU,CAAV,CAPL,CASR,CA3DM"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@consta/uikit",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.21.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"ui-kit",
|
|
6
6
|
"design-system",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@bem-react/classname": "^1.5.12",
|
|
18
18
|
"@bem-react/classnames": "^1.3.10",
|
|
19
|
-
"@consta/icons": "^0.
|
|
19
|
+
"@consta/icons": "^0.5.2",
|
|
20
20
|
"compute-scroll-into-view": "^1.0.17",
|
|
21
21
|
"date-fns": "^2.29.1",
|
|
22
22
|
"focus-trap-react": "8.7.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../__internal__/src/hooks/useVirtualScrollCanary";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../__internal__/src/hooks/useVirtualScrollCanary";
|