@hh.ru/magritte-ui-textarea 3.3.60 → 3.3.62

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/TextArea.js CHANGED
@@ -19,7 +19,7 @@ import './types.js';
19
19
  import './TextAreaGrowLimiter.js';
20
20
  import '@hh.ru/magritte-common-func-utils';
21
21
 
22
- var styles = {"textarea":"magritte-textarea___ugvor_3-3-60","textarea-elevated":"magritte-textarea-elevated___S0jk-_3-3-60","textareaElevated":"magritte-textarea-elevated___S0jk-_3-3-60","textarea-small":"magritte-textarea-small___Q-tsg_3-3-60","textareaSmall":"magritte-textarea-small___Q-tsg_3-3-60","textarea-medium":"magritte-textarea-medium___GNzAm_3-3-60","textareaMedium":"magritte-textarea-medium___GNzAm_3-3-60","textarea-large":"magritte-textarea-large___ugT-5_3-3-60","textareaLarge":"magritte-textarea-large___ugT-5_3-3-60","has-grip":"magritte-has-grip___ATMYQ_3-3-60","hasGrip":"magritte-has-grip___ATMYQ_3-3-60","textarea-limited":"magritte-textarea-limited___cU1Rg_3-3-60","textareaLimited":"magritte-textarea-limited___cU1Rg_3-3-60","maxed-height":"magritte-maxed-height___v1wYG_3-3-60","maxedHeight":"magritte-maxed-height___v1wYG_3-3-60","textarea-focused":"magritte-textarea-focused___eiGyC_3-3-60","textareaFocused":"magritte-textarea-focused___eiGyC_3-3-60","textarea-invalid":"magritte-textarea-invalid___iKOPh_3-3-60","textareaInvalid":"magritte-textarea-invalid___iKOPh_3-3-60","textarea-disabled":"magritte-textarea-disabled___XN0cg_3-3-60","textareaDisabled":"magritte-textarea-disabled___XN0cg_3-3-60","textarea-position-container-wrapper":"magritte-textarea-position-container-wrapper___4Dsui_3-3-60","textareaPositionContainerWrapper":"magritte-textarea-position-container-wrapper___4Dsui_3-3-60","textarea-position-container":"magritte-textarea-position-container___cEpbv_3-3-60","textareaPositionContainer":"magritte-textarea-position-container___cEpbv_3-3-60","native-element":"magritte-native-element___a0RAE_3-3-60","nativeElement":"magritte-native-element___a0RAE_3-3-60","textarea-label":"magritte-textarea-label___sgTIH_3-3-60","textareaLabel":"magritte-textarea-label___sgTIH_3-3-60","textarea-label-elevated":"magritte-textarea-label-elevated___0lxOI_3-3-60","textareaLabelElevated":"magritte-textarea-label-elevated___0lxOI_3-3-60","textarea-limit":"magritte-textarea-limit___IjPJy_3-3-60","textareaLimit":"magritte-textarea-limit___IjPJy_3-3-60","textarea-limit-error":"magritte-textarea-limit-error___vLvZU_3-3-60","textareaLimitError":"magritte-textarea-limit-error___vLvZU_3-3-60","textarea-layout-fill-both":"magritte-textarea-layout-fill-both___ERS-q_3-3-60","textareaLayoutFillBoth":"magritte-textarea-layout-fill-both___ERS-q_3-3-60","textarea-layout-fill-vertical":"magritte-textarea-layout-fill-vertical___HmNtp_3-3-60","textareaLayoutFillVertical":"magritte-textarea-layout-fill-vertical___HmNtp_3-3-60","textarea-layout-fill-horizontal":"magritte-textarea-layout-fill-horizontal___imBH2_3-3-60","textareaLayoutFillHorizontal":"magritte-textarea-layout-fill-horizontal___imBH2_3-3-60","textarea-layout-hug":"magritte-textarea-layout-hug___tdCMY_3-3-60","textareaLayoutHug":"magritte-textarea-layout-hug___tdCMY_3-3-60","textarea-wrapper":"magritte-textarea-wrapper___yD7G6_3-3-60","textareaWrapper":"magritte-textarea-wrapper___yD7G6_3-3-60","value-clone-wrapper":"magritte-value-clone-wrapper___2ZZvS_3-3-60","valueCloneWrapper":"magritte-value-clone-wrapper___2ZZvS_3-3-60","value-clone-container":"magritte-value-clone-container___PVM97_3-3-60","valueCloneContainer":"magritte-value-clone-container___PVM97_3-3-60","side-padding":"magritte-side-padding___O-HUP_3-3-60","sidePadding":"magritte-side-padding___O-HUP_3-3-60","textarea-animation-timeout":"magritte-textarea-animation-timeout___zudbr_3-3-60","textareaAnimationTimeout":"magritte-textarea-animation-timeout___zudbr_3-3-60","textarea-rigging-container":"magritte-textarea-rigging-container___-1S6i_3-3-60","textareaRiggingContainer":"magritte-textarea-rigging-container___-1S6i_3-3-60","label-no-wrap":"magritte-label-no-wrap___RxZ3A_3-3-60","labelNoWrap":"magritte-label-no-wrap___RxZ3A_3-3-60","textarea-grip":"magritte-textarea-grip___iL7lq_3-3-60","textareaGrip":"magritte-textarea-grip___iL7lq_3-3-60","textarea-grip-icon":"magritte-textarea-grip-icon___YK-9w_3-3-60","textareaGripIcon":"magritte-textarea-grip-icon___YK-9w_3-3-60","textarea-limit-enter":"magritte-textarea-limit-enter___CygGz_3-3-60","textareaLimitEnter":"magritte-textarea-limit-enter___CygGz_3-3-60","textarea-limit-exit":"magritte-textarea-limit-exit___RMp-R_3-3-60","textareaLimitExit":"magritte-textarea-limit-exit___RMp-R_3-3-60","textarea-limit-enter-active":"magritte-textarea-limit-enter-active___8vN-t_3-3-60","textareaLimitEnterActive":"magritte-textarea-limit-enter-active___8vN-t_3-3-60","textarea-limit-exit-active":"magritte-textarea-limit-exit-active___a5kBr_3-3-60","textareaLimitExitActive":"magritte-textarea-limit-exit-active___a5kBr_3-3-60"};
22
+ var styles = {"textarea":"magritte-textarea___ugvor_3-3-62","textarea-elevated":"magritte-textarea-elevated___S0jk-_3-3-62","textareaElevated":"magritte-textarea-elevated___S0jk-_3-3-62","textarea-small":"magritte-textarea-small___Q-tsg_3-3-62","textareaSmall":"magritte-textarea-small___Q-tsg_3-3-62","textarea-medium":"magritte-textarea-medium___GNzAm_3-3-62","textareaMedium":"magritte-textarea-medium___GNzAm_3-3-62","textarea-large":"magritte-textarea-large___ugT-5_3-3-62","textareaLarge":"magritte-textarea-large___ugT-5_3-3-62","has-grip":"magritte-has-grip___ATMYQ_3-3-62","hasGrip":"magritte-has-grip___ATMYQ_3-3-62","textarea-limited":"magritte-textarea-limited___cU1Rg_3-3-62","textareaLimited":"magritte-textarea-limited___cU1Rg_3-3-62","maxed-height":"magritte-maxed-height___v1wYG_3-3-62","maxedHeight":"magritte-maxed-height___v1wYG_3-3-62","textarea-focused":"magritte-textarea-focused___eiGyC_3-3-62","textareaFocused":"magritte-textarea-focused___eiGyC_3-3-62","textarea-invalid":"magritte-textarea-invalid___iKOPh_3-3-62","textareaInvalid":"magritte-textarea-invalid___iKOPh_3-3-62","textarea-disabled":"magritte-textarea-disabled___XN0cg_3-3-62","textareaDisabled":"magritte-textarea-disabled___XN0cg_3-3-62","textarea-position-container-wrapper":"magritte-textarea-position-container-wrapper___4Dsui_3-3-62","textareaPositionContainerWrapper":"magritte-textarea-position-container-wrapper___4Dsui_3-3-62","textarea-position-container":"magritte-textarea-position-container___cEpbv_3-3-62","textareaPositionContainer":"magritte-textarea-position-container___cEpbv_3-3-62","native-element":"magritte-native-element___a0RAE_3-3-62","nativeElement":"magritte-native-element___a0RAE_3-3-62","textarea-label":"magritte-textarea-label___sgTIH_3-3-62","textareaLabel":"magritte-textarea-label___sgTIH_3-3-62","textarea-label-elevated":"magritte-textarea-label-elevated___0lxOI_3-3-62","textareaLabelElevated":"magritte-textarea-label-elevated___0lxOI_3-3-62","textarea-limit":"magritte-textarea-limit___IjPJy_3-3-62","textareaLimit":"magritte-textarea-limit___IjPJy_3-3-62","textarea-limit-error":"magritte-textarea-limit-error___vLvZU_3-3-62","textareaLimitError":"magritte-textarea-limit-error___vLvZU_3-3-62","textarea-layout-fill-both":"magritte-textarea-layout-fill-both___ERS-q_3-3-62","textareaLayoutFillBoth":"magritte-textarea-layout-fill-both___ERS-q_3-3-62","textarea-layout-fill-vertical":"magritte-textarea-layout-fill-vertical___HmNtp_3-3-62","textareaLayoutFillVertical":"magritte-textarea-layout-fill-vertical___HmNtp_3-3-62","textarea-layout-fill-horizontal":"magritte-textarea-layout-fill-horizontal___imBH2_3-3-62","textareaLayoutFillHorizontal":"magritte-textarea-layout-fill-horizontal___imBH2_3-3-62","textarea-layout-hug":"magritte-textarea-layout-hug___tdCMY_3-3-62","textareaLayoutHug":"magritte-textarea-layout-hug___tdCMY_3-3-62","textarea-wrapper":"magritte-textarea-wrapper___yD7G6_3-3-62","textareaWrapper":"magritte-textarea-wrapper___yD7G6_3-3-62","value-clone-wrapper":"magritte-value-clone-wrapper___2ZZvS_3-3-62","valueCloneWrapper":"magritte-value-clone-wrapper___2ZZvS_3-3-62","value-clone-container":"magritte-value-clone-container___PVM97_3-3-62","valueCloneContainer":"magritte-value-clone-container___PVM97_3-3-62","side-padding":"magritte-side-padding___O-HUP_3-3-62","sidePadding":"magritte-side-padding___O-HUP_3-3-62","textarea-animation-timeout":"magritte-textarea-animation-timeout___zudbr_3-3-62","textareaAnimationTimeout":"magritte-textarea-animation-timeout___zudbr_3-3-62","textarea-rigging-container":"magritte-textarea-rigging-container___-1S6i_3-3-62","textareaRiggingContainer":"magritte-textarea-rigging-container___-1S6i_3-3-62","label-no-wrap":"magritte-label-no-wrap___RxZ3A_3-3-62","labelNoWrap":"magritte-label-no-wrap___RxZ3A_3-3-62","textarea-grip":"magritte-textarea-grip___iL7lq_3-3-62","textareaGrip":"magritte-textarea-grip___iL7lq_3-3-62","textarea-grip-icon":"magritte-textarea-grip-icon___YK-9w_3-3-62","textareaGripIcon":"magritte-textarea-grip-icon___YK-9w_3-3-62","textarea-limit-enter":"magritte-textarea-limit-enter___CygGz_3-3-62","textareaLimitEnter":"magritte-textarea-limit-enter___CygGz_3-3-62","textarea-limit-exit":"magritte-textarea-limit-exit___RMp-R_3-3-62","textareaLimitExit":"magritte-textarea-limit-exit___RMp-R_3-3-62","textarea-limit-enter-active":"magritte-textarea-limit-enter-active___8vN-t_3-3-62","textareaLimitEnterActive":"magritte-textarea-limit-enter-active___8vN-t_3-3-62","textarea-limit-exit-active":"magritte-textarea-limit-exit-active___a5kBr_3-3-62","textareaLimitExitActive":"magritte-textarea-limit-exit-active___a5kBr_3-3-62"};
23
23
 
24
24
  const ZERO_WIDTH_SPACE = "\u200B";
25
25
  const TextAreaComponent = ({
@@ -79,7 +79,8 @@ const TextAreaComponent = ({
79
79
  contentCloneWrapperRef,
80
80
  textAreaRef,
81
81
  resizableDivRef,
82
- minHeight
82
+ minHeight,
83
+ maxedHeight
83
84
  });
84
85
  const trlOf = useTranslation("TextArea", "of");
85
86
  useEffect(() => {
package/TextArea.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.js","sources":["src/TextArea.tsx"],"sourcesContent":["import {\n forwardRef,\n ReactElement,\n useEffect,\n useId,\n useRef,\n useState,\n type TextareaHTMLAttributes,\n type ForwardedRef,\n type CSSProperties,\n} from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useTranslation } from '@hh.ru/magritte-common-use-translation';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { FormHelper } from '@hh.ru/magritte-ui-form-helper';\nimport { GripSize24 } from '@hh.ru/magritte-ui-icon/private';\nimport { useInputAriaProps } from '@hh.ru/magritte-ui-input/useInputAriaProps';\nimport { Scrollbar, useScrollbar } from '@hh.ru/magritte-ui-scrollbar';\nimport { type TextAreaLayout, type ControlledTextAreaProps } from '@hh.ru/magritte-ui-textarea/types';\nimport { useFocus } from '@hh.ru/magritte-ui-textarea/useFocus';\nimport { useHeightObserver } from '@hh.ru/magritte-ui-textarea/useHeightObserver';\nimport { useLimitGrow } from '@hh.ru/magritte-ui-textarea/useLimitGrow';\nimport { Text } from '@hh.ru/magritte-ui-typography';\n\nimport styles from './textarea.less';\n\nconst ZERO_WIDTH_SPACE = '\\u200B';\n\nconst TextAreaComponent = <Layout extends TextAreaLayout>(\n {\n onChange,\n onFocus,\n onBlur,\n onValidate,\n value,\n placeholder,\n disabled = false,\n elevatePlaceholder = false,\n invalid = false,\n invalidLimit = false,\n maxLength,\n description,\n errorMessage,\n resize = 'none',\n layout = 'fixed' as Layout,\n size = 'large',\n minHeight: _minHeight,\n maxHeight,\n 'aria-describedby': ariaDescribedBy,\n ...restProps\n }: ControlledTextAreaProps<Layout> &\n Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, keyof ControlledTextAreaProps<'fixed'>>,\n ref: ForwardedRef<HTMLTextAreaElement>\n) => {\n const { isMobile } = useBreakpoint();\n const forceDisabled = useDisabled();\n const isComponentDisabled = forceDisabled || !!disabled;\n const [internalInvalid, setInternalInvalid] = useState(false);\n const [isFocusVisible, setFocusVisible] = useState(false);\n const limitRef = useRef<HTMLDivElement>(null);\n const previousInvalid = useRef(internalInvalid);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const resizableDivRef = useRef<HTMLDivElement>(null);\n const resizableDivSizes = useRef<{ width?: number; height?: number } | null>(null);\n const resizableDivWasResized = useRef(false);\n const { hasVerticalScroll, verticalScrollbarProps, ...scrollbar } = useScrollbar({\n axis: isComponentDisabled ? 'none' : 'vertical',\n });\n const textAreaRefCallback = useMultipleRefs(ref, textAreaRef, scrollbar.scrollContainerRef);\n const descriptionId = useId();\n const labelId = useId();\n const [animationTimeout, setAnimationTimeout] = useState(100);\n const currentResizeValue = isMobile ? 'none' : resize;\n const isResizable = currentResizeValue !== 'none';\n const contentCloneRef = useRef<HTMLPreElement>(null);\n const contentCloneWrapperRef = useRef<HTMLDivElement>(null);\n const { minHeight, maxedHeight } = useHeightObserver({\n size,\n minHeight: _minHeight,\n layout,\n contentCloneRef,\n onHeightChange: () => scrollbar.resizeCallbackRef.current?.(),\n });\n const { maxHeightRef, allowScrollRef } = useLimitGrow({\n layout,\n contentCloneRef,\n contentCloneWrapperRef,\n textAreaRef,\n resizableDivRef,\n minHeight,\n });\n const trlOf = useTranslation('TextArea', 'of');\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles.textareaAnimationTimeout);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n const animationTimeout = parseInt(style.getPropertyValue(`--animation-duration`), 10);\n if (Number.isInteger(animationTimeout)) {\n setAnimationTimeout(animationTimeout);\n }\n document.body.removeChild(animationTimeoutElement);\n }, []);\n\n const { focusHandler, blurHandler, isFocused } = useFocus<HTMLTextAreaElement>(onFocus, onBlur);\n\n const handleClick = () => {\n if (resizableDivWasResized.current) {\n resizableDivWasResized.current = false;\n return;\n }\n textAreaRef.current?.focus();\n };\n\n const handleMouseUp = () => {\n if (\n resizableDivRef.current?.offsetWidth !== resizableDivSizes.current?.width ||\n resizableDivRef.current?.offsetHeight !== resizableDivSizes.current?.height\n ) {\n resizableDivWasResized.current = true;\n }\n };\n\n const handleMouseDown = () => {\n resizableDivSizes.current = {\n width: resizableDivRef.current?.offsetWidth,\n height: resizableDivRef.current?.offsetHeight,\n };\n };\n\n useEffect(() => {\n if (maxLength) {\n const invalid = !isFocused && value.length > maxLength;\n setInternalInvalid(invalid);\n\n if (previousInvalid.current !== invalid) {\n onValidate?.({ invalidLimit: invalid });\n }\n previousInvalid.current = invalid;\n }\n }, [onValidate, value, internalInvalid, maxLength, isFocused]);\n\n useEffect(() => {\n if (textAreaRef.current) {\n setFocusVisible(isFocused && textAreaRef.current.classList.contains('focus-visible'));\n }\n }, [isFocused]);\n\n useEffect(() => {\n // для layout === 'hug' resizeCallback вызывается в useHeightObserver, т.к. нужно ожидать перерисовку оберток\n if (layout !== 'hug') {\n scrollbar.resizeCallbackRef.current?.();\n }\n }, [layout, scrollbar.resizeCallbackRef, value]);\n\n const placeholderIsElevated = !!elevatePlaceholder && !!placeholder && size === 'large';\n const showLabel = placeholderIsElevated || value === '';\n\n const invalidState = invalid || invalidLimit;\n const ariaProps = useInputAriaProps({\n invalid: invalidState || internalInvalid,\n hasDescription: !!description || !!errorMessage || !!ariaDescribedBy,\n hasPlaceholder: !!placeholder,\n descriptionId: ariaDescribedBy || `input-description-${descriptionId}`,\n labelId,\n });\n\n const hasElevatedPlaceholderClass = (isFocused || value !== '') && placeholderIsElevated;\n\n return (\n <div\n data-qa=\"textarea-wrapper\"\n data-interactive={true}\n className={classnames(styles.textarea, styles[`textarea-${size}`], {\n [styles.textareaFocused]: isFocused,\n [styles.textareaDisabled]: isComponentDisabled,\n [styles.textareaInvalid]: !!(invalidState || internalInvalid),\n [styles.textareaLimitError]:\n invalidLimit || internalInvalid || (maxLength ? value.length > maxLength : false),\n [styles.textareaLimited]: !!maxLength && maxedHeight,\n [styles.textareaLayoutFillBoth]: layout === 'fill-both',\n [styles.textareaLayoutFillVertical]: layout === 'fill-vertical',\n [styles.textareaLayoutFillHorizontal]: layout === 'fill-horizontal',\n [styles.textareaLayoutHug]: layout === 'hug',\n [styles.textareaElevated]: placeholderIsElevated,\n [styles.hasGrip]: isResizable,\n [styles.maxedHeight]: size === 'large' && maxedHeight,\n })}\n >\n <div\n className={classnames(styles.textareaPositionContainerWrapper, scrollbar.hoverContainerCssClass, {\n 'focus-visible': isFocusVisible,\n })}\n >\n <div\n className={classnames(styles.textareaPositionContainer)}\n onClick={handleClick}\n onMouseDown={isResizable ? handleMouseDown : undefined}\n onMouseUp={isResizable ? handleMouseUp : undefined}\n style={\n {\n height: maxHeightRef.current || (maxedHeight ? 'auto' : minHeight),\n minHeight,\n '--magritte-textarea-max-height': maxHeight\n ? `${Math.max(maxHeight, minHeight)}px`\n : 'auto',\n resize: currentResizeValue,\n } as CSSProperties\n }\n ref={resizableDivRef}\n >\n <div className={styles.textareaWrapper} data-qa=\"textarea-native-wrapper\">\n <textarea\n {...restProps}\n {...ariaProps}\n disabled={isComponentDisabled}\n suppressHydrationWarning\n className={classnames(styles.nativeElement, styles.sidePadding)}\n value={value}\n onChange={onChange}\n onFocus={focusHandler}\n onBlur={blurHandler}\n style={{ overflowY: layout !== 'hug' || allowScrollRef.current ? 'auto' : 'hidden' }}\n ref={textAreaRefCallback}\n />\n {layout === 'hug' && (\n <div\n className={classnames(styles.valueCloneWrapper, styles.sidePadding)}\n ref={contentCloneWrapperRef}\n >\n <pre className={styles.valueCloneContainer} ref={contentCloneRef}>\n {`${value}${ZERO_WIDTH_SPACE}`}\n </pre>\n </div>\n )}\n {showLabel && (\n <div className={classnames(styles.textareaRiggingContainer, styles.sidePadding)}>\n <label\n className={classnames(styles.textareaLabel, {\n [styles.labelNoWrap]: elevatePlaceholder,\n [styles.textareaLabelElevated]: hasElevatedPlaceholderClass,\n })}\n id={ariaProps['aria-labelledby']}\n >\n {placeholder}\n </label>\n </div>\n )}\n </div>\n {hasVerticalScroll && <Scrollbar {...verticalScrollbarProps} />}\n </div>\n {!!maxLength && maxedHeight && (\n <CSSTransition\n in={isFocused || value.length > maxLength}\n timeout={animationTimeout}\n classNames={{\n enter: styles.textareaLimitEnter,\n enterActive: styles.textareaLimitEnterActive,\n exit: styles.textareaLimitExit,\n exitActive: styles.textareaLimitExitActive,\n }}\n unmountOnExit\n nodeRef={limitRef}\n >\n <div className={styles.textareaLimit} ref={limitRef}>\n <Text typography=\"label-3-regular\">\n {value.length}\n {trlOf}\n {maxLength}\n </Text>\n </div>\n </CSSTransition>\n )}\n {isResizable && (\n <div className={styles.textareaGrip}>\n <div className={styles.textareaGripIcon}>\n <GripSize24 />\n </div>\n </div>\n )}\n </div>\n <FormHelper\n description={description}\n errorMessage={errorMessage}\n descriptionId={ariaProps['aria-describedby']}\n disabled={isComponentDisabled}\n invalid={invalidState}\n data-qa=\"textarea-hint-container\"\n />\n </div>\n );\n};\n\nconst TextArea = forwardRef(TextAreaComponent) as (<Layout extends TextAreaLayout>(\n props: ControlledTextAreaProps<Layout> &\n Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, keyof ControlledTextAreaProps<'fixed'>> & {\n ref?: React.ForwardedRef<HTMLTextAreaElement>;\n }\n) => ReactElement | null) & { displayName: string };\n\nTextArea.displayName = 'TextArea';\n\nexport { TextArea };\n"],"names":["animationTimeout","invalid"],"mappings":"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"}
1
+ {"version":3,"file":"TextArea.js","sources":["src/TextArea.tsx"],"sourcesContent":["import {\n forwardRef,\n ReactElement,\n useEffect,\n useId,\n useRef,\n useState,\n type TextareaHTMLAttributes,\n type ForwardedRef,\n type CSSProperties,\n} from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useTranslation } from '@hh.ru/magritte-common-use-translation';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { FormHelper } from '@hh.ru/magritte-ui-form-helper';\nimport { GripSize24 } from '@hh.ru/magritte-ui-icon/private';\nimport { useInputAriaProps } from '@hh.ru/magritte-ui-input/useInputAriaProps';\nimport { Scrollbar, useScrollbar } from '@hh.ru/magritte-ui-scrollbar';\nimport { type TextAreaLayout, type ControlledTextAreaProps } from '@hh.ru/magritte-ui-textarea/types';\nimport { useFocus } from '@hh.ru/magritte-ui-textarea/useFocus';\nimport { useHeightObserver } from '@hh.ru/magritte-ui-textarea/useHeightObserver';\nimport { useLimitGrow } from '@hh.ru/magritte-ui-textarea/useLimitGrow';\nimport { Text } from '@hh.ru/magritte-ui-typography';\n\nimport styles from './textarea.less';\n\nconst ZERO_WIDTH_SPACE = '\\u200B';\n\nconst TextAreaComponent = <Layout extends TextAreaLayout>(\n {\n onChange,\n onFocus,\n onBlur,\n onValidate,\n value,\n placeholder,\n disabled = false,\n elevatePlaceholder = false,\n invalid = false,\n invalidLimit = false,\n maxLength,\n description,\n errorMessage,\n resize = 'none',\n layout = 'fixed' as Layout,\n size = 'large',\n minHeight: _minHeight,\n maxHeight,\n 'aria-describedby': ariaDescribedBy,\n ...restProps\n }: ControlledTextAreaProps<Layout> &\n Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, keyof ControlledTextAreaProps<'fixed'>>,\n ref: ForwardedRef<HTMLTextAreaElement>\n) => {\n const { isMobile } = useBreakpoint();\n const forceDisabled = useDisabled();\n const isComponentDisabled = forceDisabled || !!disabled;\n const [internalInvalid, setInternalInvalid] = useState(false);\n const [isFocusVisible, setFocusVisible] = useState(false);\n const limitRef = useRef<HTMLDivElement>(null);\n const previousInvalid = useRef(internalInvalid);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const resizableDivRef = useRef<HTMLDivElement>(null);\n const resizableDivSizes = useRef<{ width?: number; height?: number } | null>(null);\n const resizableDivWasResized = useRef(false);\n const { hasVerticalScroll, verticalScrollbarProps, ...scrollbar } = useScrollbar({\n axis: isComponentDisabled ? 'none' : 'vertical',\n });\n const textAreaRefCallback = useMultipleRefs(ref, textAreaRef, scrollbar.scrollContainerRef);\n const descriptionId = useId();\n const labelId = useId();\n const [animationTimeout, setAnimationTimeout] = useState(100);\n const currentResizeValue = isMobile ? 'none' : resize;\n const isResizable = currentResizeValue !== 'none';\n const contentCloneRef = useRef<HTMLPreElement>(null);\n const contentCloneWrapperRef = useRef<HTMLDivElement>(null);\n const { minHeight, maxedHeight } = useHeightObserver({\n size,\n minHeight: _minHeight,\n layout,\n contentCloneRef,\n onHeightChange: () => scrollbar.resizeCallbackRef.current?.(),\n });\n const { maxHeightRef, allowScrollRef } = useLimitGrow({\n layout,\n contentCloneRef,\n contentCloneWrapperRef,\n textAreaRef,\n resizableDivRef,\n minHeight,\n maxedHeight,\n });\n const trlOf = useTranslation('TextArea', 'of');\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles.textareaAnimationTimeout);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n const animationTimeout = parseInt(style.getPropertyValue(`--animation-duration`), 10);\n if (Number.isInteger(animationTimeout)) {\n setAnimationTimeout(animationTimeout);\n }\n document.body.removeChild(animationTimeoutElement);\n }, []);\n\n const { focusHandler, blurHandler, isFocused } = useFocus<HTMLTextAreaElement>(onFocus, onBlur);\n\n const handleClick = () => {\n if (resizableDivWasResized.current) {\n resizableDivWasResized.current = false;\n return;\n }\n textAreaRef.current?.focus();\n };\n\n const handleMouseUp = () => {\n if (\n resizableDivRef.current?.offsetWidth !== resizableDivSizes.current?.width ||\n resizableDivRef.current?.offsetHeight !== resizableDivSizes.current?.height\n ) {\n resizableDivWasResized.current = true;\n }\n };\n\n const handleMouseDown = () => {\n resizableDivSizes.current = {\n width: resizableDivRef.current?.offsetWidth,\n height: resizableDivRef.current?.offsetHeight,\n };\n };\n\n useEffect(() => {\n if (maxLength) {\n const invalid = !isFocused && value.length > maxLength;\n setInternalInvalid(invalid);\n\n if (previousInvalid.current !== invalid) {\n onValidate?.({ invalidLimit: invalid });\n }\n previousInvalid.current = invalid;\n }\n }, [onValidate, value, internalInvalid, maxLength, isFocused]);\n\n useEffect(() => {\n if (textAreaRef.current) {\n setFocusVisible(isFocused && textAreaRef.current.classList.contains('focus-visible'));\n }\n }, [isFocused]);\n\n useEffect(() => {\n // для layout === 'hug' resizeCallback вызывается в useHeightObserver, т.к. нужно ожидать перерисовку оберток\n if (layout !== 'hug') {\n scrollbar.resizeCallbackRef.current?.();\n }\n }, [layout, scrollbar.resizeCallbackRef, value]);\n\n const placeholderIsElevated = !!elevatePlaceholder && !!placeholder && size === 'large';\n const showLabel = placeholderIsElevated || value === '';\n\n const invalidState = invalid || invalidLimit;\n const ariaProps = useInputAriaProps({\n invalid: invalidState || internalInvalid,\n hasDescription: !!description || !!errorMessage || !!ariaDescribedBy,\n hasPlaceholder: !!placeholder,\n descriptionId: ariaDescribedBy || `input-description-${descriptionId}`,\n labelId,\n });\n\n const hasElevatedPlaceholderClass = (isFocused || value !== '') && placeholderIsElevated;\n\n return (\n <div\n data-qa=\"textarea-wrapper\"\n data-interactive={true}\n className={classnames(styles.textarea, styles[`textarea-${size}`], {\n [styles.textareaFocused]: isFocused,\n [styles.textareaDisabled]: isComponentDisabled,\n [styles.textareaInvalid]: !!(invalidState || internalInvalid),\n [styles.textareaLimitError]:\n invalidLimit || internalInvalid || (maxLength ? value.length > maxLength : false),\n [styles.textareaLimited]: !!maxLength && maxedHeight,\n [styles.textareaLayoutFillBoth]: layout === 'fill-both',\n [styles.textareaLayoutFillVertical]: layout === 'fill-vertical',\n [styles.textareaLayoutFillHorizontal]: layout === 'fill-horizontal',\n [styles.textareaLayoutHug]: layout === 'hug',\n [styles.textareaElevated]: placeholderIsElevated,\n [styles.hasGrip]: isResizable,\n [styles.maxedHeight]: size === 'large' && maxedHeight,\n })}\n >\n <div\n className={classnames(styles.textareaPositionContainerWrapper, scrollbar.hoverContainerCssClass, {\n 'focus-visible': isFocusVisible,\n })}\n >\n <div\n className={classnames(styles.textareaPositionContainer)}\n onClick={handleClick}\n onMouseDown={isResizable ? handleMouseDown : undefined}\n onMouseUp={isResizable ? handleMouseUp : undefined}\n style={\n {\n height: maxHeightRef.current || (maxedHeight ? 'auto' : minHeight),\n minHeight,\n '--magritte-textarea-max-height': maxHeight\n ? `${Math.max(maxHeight, minHeight)}px`\n : 'auto',\n resize: currentResizeValue,\n } as CSSProperties\n }\n ref={resizableDivRef}\n >\n <div className={styles.textareaWrapper} data-qa=\"textarea-native-wrapper\">\n <textarea\n {...restProps}\n {...ariaProps}\n disabled={isComponentDisabled}\n suppressHydrationWarning\n className={classnames(styles.nativeElement, styles.sidePadding)}\n value={value}\n onChange={onChange}\n onFocus={focusHandler}\n onBlur={blurHandler}\n style={{ overflowY: layout !== 'hug' || allowScrollRef.current ? 'auto' : 'hidden' }}\n ref={textAreaRefCallback}\n />\n {layout === 'hug' && (\n <div\n className={classnames(styles.valueCloneWrapper, styles.sidePadding)}\n ref={contentCloneWrapperRef}\n >\n <pre className={styles.valueCloneContainer} ref={contentCloneRef}>\n {`${value}${ZERO_WIDTH_SPACE}`}\n </pre>\n </div>\n )}\n {showLabel && (\n <div className={classnames(styles.textareaRiggingContainer, styles.sidePadding)}>\n <label\n className={classnames(styles.textareaLabel, {\n [styles.labelNoWrap]: elevatePlaceholder,\n [styles.textareaLabelElevated]: hasElevatedPlaceholderClass,\n })}\n id={ariaProps['aria-labelledby']}\n >\n {placeholder}\n </label>\n </div>\n )}\n </div>\n {hasVerticalScroll && <Scrollbar {...verticalScrollbarProps} />}\n </div>\n {!!maxLength && maxedHeight && (\n <CSSTransition\n in={isFocused || value.length > maxLength}\n timeout={animationTimeout}\n classNames={{\n enter: styles.textareaLimitEnter,\n enterActive: styles.textareaLimitEnterActive,\n exit: styles.textareaLimitExit,\n exitActive: styles.textareaLimitExitActive,\n }}\n unmountOnExit\n nodeRef={limitRef}\n >\n <div className={styles.textareaLimit} ref={limitRef}>\n <Text typography=\"label-3-regular\">\n {value.length}\n {trlOf}\n {maxLength}\n </Text>\n </div>\n </CSSTransition>\n )}\n {isResizable && (\n <div className={styles.textareaGrip}>\n <div className={styles.textareaGripIcon}>\n <GripSize24 />\n </div>\n </div>\n )}\n </div>\n <FormHelper\n description={description}\n errorMessage={errorMessage}\n descriptionId={ariaProps['aria-describedby']}\n disabled={isComponentDisabled}\n invalid={invalidState}\n data-qa=\"textarea-hint-container\"\n />\n </div>\n );\n};\n\nconst TextArea = forwardRef(TextAreaComponent) as (<Layout extends TextAreaLayout>(\n props: ControlledTextAreaProps<Layout> &\n Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, keyof ControlledTextAreaProps<'fixed'>> & {\n ref?: React.ForwardedRef<HTMLTextAreaElement>;\n }\n) => ReactElement | null) & { displayName: string };\n\nTextArea.displayName = 'TextArea';\n\nexport { TextArea };\n"],"names":["animationTimeout","invalid"],"mappings":"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"}
@@ -11,6 +11,7 @@ export declare const TextAreaGrowLimiter: import("react").ForwardRefExoticCompon
11
11
  debounce?: boolean;
12
12
  preMeasurement?: VoidFunction;
13
13
  postMeasurement?: VoidFunction;
14
+ disabled?: boolean;
14
15
  style?: import("react").HTMLAttributes<HTMLDivElement>['style'];
15
16
  className?: import("react").HTMLAttributes<HTMLDivElement>['className'];
16
17
  } & {
@@ -4,21 +4,25 @@ import { createContext, forwardRef, useRef, useState, useMemo, useEffect } from
4
4
  import { debounce } from '@hh.ru/magritte-common-func-utils';
5
5
  import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
6
6
 
7
- const GrowLimiterContext = createContext({
7
+ const DEFAULT_GROW_LIMITER_CONTEXT_VALUE = {
8
8
  getHeightDiff: () => 0,
9
9
  onHeightChange: () => void 0,
10
10
  offHeightChange: () => void 0,
11
11
  heightUpdated: () => void 0,
12
12
  hasLimit: false
13
- });
13
+ };
14
+ const GrowLimiterContext = createContext(DEFAULT_GROW_LIMITER_CONTEXT_VALUE);
14
15
  const TextAreaGrowLimiter = forwardRef(
15
- ({ children, containerRef, preMeasurement, postMeasurement, debounce: debounce$1 = false, ...rest }, ref) => {
16
+ ({ children, containerRef, preMeasurement, postMeasurement, debounce: debounce$1 = false, disabled = false, ...rest }, ref) => {
16
17
  const wrapperRef = useRef(null);
17
18
  const refMultiplexer = useMultipleRefs(ref, wrapperRef);
18
19
  const [heightChangeHandlers, _] = useState(() => /* @__PURE__ */ new Set());
19
20
  const heightDiffCache = useRef(null);
20
- const contextValue = useMemo(
21
- () => ({
21
+ const contextValue = useMemo(() => {
22
+ if (disabled) {
23
+ return DEFAULT_GROW_LIMITER_CONTEXT_VALUE;
24
+ }
25
+ return {
22
26
  getHeightDiff: () => {
23
27
  if (heightDiffCache.current === null) {
24
28
  const currentContainer = containerRef?.current || wrapperRef?.current?.parentElement;
@@ -42,13 +46,13 @@ const TextAreaGrowLimiter = forwardRef(
42
46
  offHeightChange: (callback) => heightChangeHandlers.delete(callback),
43
47
  heightUpdated: () => heightDiffCache.current = null,
44
48
  hasLimit: true
45
- }),
46
- [heightChangeHandlers, containerRef, wrapperRef, preMeasurement, postMeasurement]
47
- );
49
+ };
50
+ }, [disabled, heightChangeHandlers, containerRef, wrapperRef, preMeasurement, postMeasurement]);
48
51
  useEffect(
49
52
  () => {
53
+ heightDiffCache.current = null;
50
54
  const currentContainer = containerRef?.current || wrapperRef?.current?.parentElement;
51
- if (!wrapperRef.current || !currentContainer) {
55
+ if (disabled || !wrapperRef.current || !currentContainer) {
52
56
  return void 0;
53
57
  }
54
58
  const observerCallback = () => {
@@ -69,14 +73,14 @@ const TextAreaGrowLimiter = forwardRef(
69
73
  // eslint считает что containerRef?.current лишняя зависимость, но эффект должен реагировать если
70
74
  // значение в рефе изменилось, т.к. обзервер должен переподписаться на другой элемент
71
75
  // eslint-disable-next-line react-hooks/exhaustive-deps
72
- [heightChangeHandlers, containerRef, containerRef?.current, wrapperRef]
76
+ [disabled, heightChangeHandlers, containerRef, containerRef?.current, wrapperRef]
73
77
  );
74
78
  return /* @__PURE__ */ jsx(
75
79
  "div",
76
80
  {
77
81
  ref: refMultiplexer,
78
82
  ...rest,
79
- style: {
83
+ style: disabled ? rest.style : {
80
84
  ...rest.style || {},
81
85
  borderBottomStyle: "solid",
82
86
  borderBottomColor: "transparent"
@@ -1 +1 @@
1
- {"version":3,"file":"TextAreaGrowLimiter.js","sources":["src/TextAreaGrowLimiter.tsx"],"sourcesContent":["import { createContext, useRef, forwardRef, useEffect, useState, useMemo } from 'react';\n\nimport { debounce as debounceFunc } from '@hh.ru/magritte-common-func-utils';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport type { TextAreaGrowLimiterProps } from '@hh.ru/magritte-ui-textarea/types';\n\nexport interface GrowLimiterContextValue {\n getHeightDiff: () => number;\n onHeightChange: (callback: VoidFunction) => void;\n offHeightChange: (callback: VoidFunction) => void;\n heightUpdated: VoidFunction;\n hasLimit: boolean;\n}\n\nexport const GrowLimiterContext = createContext<GrowLimiterContextValue>({\n getHeightDiff: () => 0,\n onHeightChange: () => void 0,\n offHeightChange: () => void 0,\n heightUpdated: () => void 0,\n hasLimit: false,\n});\n\nexport const TextAreaGrowLimiter = forwardRef<HTMLDivElement, TextAreaGrowLimiterProps>(\n ({ children, containerRef, preMeasurement, postMeasurement, debounce = false, ...rest }, ref) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const refMultiplexer = useMultipleRefs(ref, wrapperRef);\n const [heightChangeHandlers, _] = useState(() => new Set<VoidFunction>());\n const heightDiffCache = useRef<number | null>(null);\n\n const contextValue = useMemo<GrowLimiterContextValue>(\n () => ({\n getHeightDiff: () => {\n if (heightDiffCache.current === null) {\n const currentContainer = containerRef?.current || wrapperRef?.current?.parentElement;\n\n if (!wrapperRef.current || !currentContainer) {\n return 0;\n }\n\n // запоминаем позицию скролла в контейнере, отключаем скролл, вызываем preMeasurement если задан\n // в BottomSheet например он отключает ограничение height на внешнем контейнере, чтобы была\n // возможность узнать реальный максимальный размер контейнера\n const scrollTop = currentContainer.scrollTop;\n const overflow = currentContainer.style.overflowY;\n currentContainer.style.overflowY = 'hidden';\n preMeasurement?.();\n\n // Устанавливаем толщину нижней рамки равно 20000 пикселей, чтобы размер обертки гарантированно\n // превысил размер контейнера. После этого сравниваем offsetHeight и scrollHeight контейнера\n // чтобы вычислить сколько доступно свободного пространства до появления в контейнере скролла\n wrapperRef.current.style.borderBottomWidth = '20000px';\n heightDiffCache.current = currentContainer.clientHeight - currentContainer.scrollHeight + 20000;\n // Вызываем postMeasurement если задан, в BottomSheet он возвращает ограничение height к\n // изначальному значению\n postMeasurement?.();\n\n // Возвращаем настройки контейнера и обретки к изначальным значениям\n currentContainer.style.overflowY = overflow;\n wrapperRef.current.style.borderBottomWidth = '0';\n currentContainer.scrollTop = scrollTop;\n }\n return heightDiffCache.current;\n },\n onHeightChange: (callback) => heightChangeHandlers.add(callback),\n offHeightChange: (callback) => heightChangeHandlers.delete(callback),\n heightUpdated: () => (heightDiffCache.current = null),\n hasLimit: true,\n }),\n [heightChangeHandlers, containerRef, wrapperRef, preMeasurement, postMeasurement]\n );\n\n useEffect(\n () => {\n const currentContainer = containerRef?.current || wrapperRef?.current?.parentElement;\n\n if (!wrapperRef.current || !currentContainer) {\n return void 0;\n }\n\n const observerCallback = () => {\n heightDiffCache.current = null;\n heightChangeHandlers.forEach((callback) => callback());\n };\n\n const observer = new ResizeObserver(\n debounce ? debounceFunc(observerCallback, 17 /* ~= 1000ms / 60fps */) : observerCallback\n );\n observer.observe(wrapperRef.current, { box: 'content-box' });\n observer.observe(currentContainer, { box: 'content-box' });\n\n return () => observer.disconnect();\n },\n // eslint считает что containerRef?.current лишняя зависимость, но эффект должен реагировать если\n // значение в рефе изменилось, т.к. обзервер должен переподписаться на другой элемент\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [heightChangeHandlers, containerRef, containerRef?.current, wrapperRef]\n );\n\n return (\n <div\n ref={refMultiplexer}\n {...rest}\n style={{\n ...(rest.style || {}),\n borderBottomStyle: 'solid',\n borderBottomColor: 'transparent',\n }}\n >\n <GrowLimiterContext.Provider value={contextValue}>{children}</GrowLimiterContext.Provider>\n </div>\n );\n }\n);\n\nTextAreaGrowLimiter.displayName = 'TextAreaGrowLimiter';\n"],"names":["debounce","debounceFunc"],"mappings":"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"}
1
+ {"version":3,"file":"TextAreaGrowLimiter.js","sources":["src/TextAreaGrowLimiter.tsx"],"sourcesContent":["import { createContext, useRef, forwardRef, useEffect, useState, useMemo } from 'react';\n\nimport { debounce as debounceFunc } from '@hh.ru/magritte-common-func-utils';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport type { TextAreaGrowLimiterProps } from '@hh.ru/magritte-ui-textarea/types';\n\nexport interface GrowLimiterContextValue {\n getHeightDiff: () => number;\n onHeightChange: (callback: VoidFunction) => void;\n offHeightChange: (callback: VoidFunction) => void;\n heightUpdated: VoidFunction;\n hasLimit: boolean;\n}\n\nconst DEFAULT_GROW_LIMITER_CONTEXT_VALUE: GrowLimiterContextValue = {\n getHeightDiff: () => 0,\n onHeightChange: () => void 0,\n offHeightChange: () => void 0,\n heightUpdated: () => void 0,\n hasLimit: false,\n};\n\nexport const GrowLimiterContext = createContext<GrowLimiterContextValue>(DEFAULT_GROW_LIMITER_CONTEXT_VALUE);\n\nexport const TextAreaGrowLimiter = forwardRef<HTMLDivElement, TextAreaGrowLimiterProps>(\n ({ children, containerRef, preMeasurement, postMeasurement, debounce = false, disabled = false, ...rest }, ref) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const refMultiplexer = useMultipleRefs(ref, wrapperRef);\n const [heightChangeHandlers, _] = useState(() => new Set<VoidFunction>());\n const heightDiffCache = useRef<number | null>(null);\n\n const contextValue = useMemo<GrowLimiterContextValue>(() => {\n if (disabled) {\n return DEFAULT_GROW_LIMITER_CONTEXT_VALUE;\n }\n\n return {\n getHeightDiff: () => {\n if (heightDiffCache.current === null) {\n const currentContainer = containerRef?.current || wrapperRef?.current?.parentElement;\n\n if (!wrapperRef.current || !currentContainer) {\n return 0;\n }\n\n // запоминаем позицию скролла в контейнере, отключаем скролл, вызываем preMeasurement если задан\n // в BottomSheet например он отключает ограничение height на внешнем контейнере, чтобы была\n // возможность узнать реальный максимальный размер контейнера\n const scrollTop = currentContainer.scrollTop;\n const overflow = currentContainer.style.overflowY;\n currentContainer.style.overflowY = 'hidden';\n preMeasurement?.();\n\n // Устанавливаем толщину нижней рамки равно 20000 пикселей, чтобы размер обертки гарантированно\n // превысил размер контейнера. После этого сравниваем offsetHeight и scrollHeight контейнера\n // чтобы вычислить сколько доступно свободного пространства до появления в контейнере скролла\n wrapperRef.current.style.borderBottomWidth = '20000px';\n heightDiffCache.current = currentContainer.clientHeight - currentContainer.scrollHeight + 20000;\n // Вызываем postMeasurement если задан, в BottomSheet он возвращает ограничение height к\n // изначальному значению\n postMeasurement?.();\n\n // Возвращаем настройки контейнера и обретки к изначальным значениям\n currentContainer.style.overflowY = overflow;\n wrapperRef.current.style.borderBottomWidth = '0';\n currentContainer.scrollTop = scrollTop;\n }\n return heightDiffCache.current;\n },\n onHeightChange: (callback) => heightChangeHandlers.add(callback),\n offHeightChange: (callback) => heightChangeHandlers.delete(callback),\n heightUpdated: () => (heightDiffCache.current = null),\n hasLimit: true,\n };\n }, [disabled, heightChangeHandlers, containerRef, wrapperRef, preMeasurement, postMeasurement]);\n\n useEffect(\n () => {\n // в выключенном состоянии ничего не измеряем и не наблюдаем, кеш сбрасываем, чтобы после включения\n // не использовать устаревшее значение\n heightDiffCache.current = null;\n\n const currentContainer = containerRef?.current || wrapperRef?.current?.parentElement;\n\n if (disabled || !wrapperRef.current || !currentContainer) {\n return void 0;\n }\n\n const observerCallback = () => {\n heightDiffCache.current = null;\n heightChangeHandlers.forEach((callback) => callback());\n };\n\n const observer = new ResizeObserver(\n debounce ? debounceFunc(observerCallback, 17 /* ~= 1000ms / 60fps */) : observerCallback\n );\n observer.observe(wrapperRef.current, { box: 'content-box' });\n observer.observe(currentContainer, { box: 'content-box' });\n\n return () => observer.disconnect();\n },\n // eslint считает что containerRef?.current лишняя зависимость, но эффект должен реагировать если\n // значение в рефе изменилось, т.к. обзервер должен переподписаться на другой элемент\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled, heightChangeHandlers, containerRef, containerRef?.current, wrapperRef]\n );\n\n return (\n <div\n ref={refMultiplexer}\n {...rest}\n style={\n disabled\n ? rest.style\n : {\n ...(rest.style || {}),\n borderBottomStyle: 'solid',\n borderBottomColor: 'transparent',\n }\n }\n >\n <GrowLimiterContext.Provider value={contextValue}>{children}</GrowLimiterContext.Provider>\n </div>\n );\n }\n);\n\nTextAreaGrowLimiter.displayName = 'TextAreaGrowLimiter';\n"],"names":["debounce","debounceFunc"],"mappings":"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"}
package/index.css CHANGED
@@ -84,7 +84,7 @@
84
84
  .magritte-zp-day-theme{
85
85
  --magritte-color-component-input-stroke-state-field-focused-v26-0-2:#7195AF;
86
86
  }
87
- .magritte-textarea___ugvor_3-3-60{
87
+ .magritte-textarea___ugvor_3-3-62{
88
88
  display:inline-flex;
89
89
  flex-flow:column;
90
90
  --magritte-ui-textarea-vertical-offset:0px;
@@ -92,229 +92,229 @@
92
92
  --animation-100-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v26-0-2);
93
93
  --animation-300-duration:var(--magritte-semantic-animation-ease-in-out-300-duration-v26-0-2);
94
94
  }
95
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-elevated___S0jk-_3-3-60{
95
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-elevated___S0jk-_3-3-62{
96
96
  --magritte-ui-textarea-vertical-offset:calc(18px * 0.5);
97
97
  }
98
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-small___Q-tsg_3-3-60{
98
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-small___Q-tsg_3-3-62{
99
99
  --magritte-ui-textarea-vertical-padding:10px;
100
100
  }
101
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-medium___GNzAm_3-3-60{
101
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-medium___GNzAm_3-3-62{
102
102
  --magritte-ui-textarea-vertical-padding:12px;
103
103
  }
104
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-large___ugT-5_3-3-60{
104
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-large___ugT-5_3-3-62{
105
105
  --magritte-ui-textarea-vertical-padding:16px;
106
106
  }
107
- .magritte-textarea___ugvor_3-3-60.magritte-has-grip___ATMYQ_3-3-60{
107
+ .magritte-textarea___ugvor_3-3-62.magritte-has-grip___ATMYQ_3-3-62{
108
108
  --magritte-ui-textarea-additional-bottom-padding:18px;
109
109
  }
110
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-limited___cU1Rg_3-3-60{
110
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-limited___cU1Rg_3-3-62{
111
111
  --magritte-ui-textarea-additional-bottom-padding:20px + 8px;
112
112
  }
113
- .magritte-textarea___ugvor_3-3-60.magritte-maxed-height___v1wYG_3-3-60.magritte-textarea-elevated___S0jk-_3-3-60{
113
+ .magritte-textarea___ugvor_3-3-62.magritte-maxed-height___v1wYG_3-3-62.magritte-textarea-elevated___S0jk-_3-3-62{
114
114
  --magritte-ui-textarea-bottom-padding:calc(12px + var(--magritte-ui-textarea-vertical-offset));
115
115
  }
116
116
  @media (min-width: 1020px){
117
- body.magritte-old-layout .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover{
117
+ body.magritte-old-layout .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover{
118
118
  --magritte-ui-form-helper-description-color-override:var(--magritte-color-component-input-text-state-description-hovered-v26-0-2);
119
119
  }
120
- body.magritte-old-layout .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after{
120
+ body.magritte-old-layout .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after{
121
121
  border-bottom-color:var(--magritte-color-component-input-stroke-state-field-hovered-v26-0-2);
122
122
  border-right-color:var(--magritte-color-component-input-stroke-state-field-hovered-v26-0-2);
123
123
  border-width:1px;
124
124
  background-color:var(--magritte-color-component-input-background-state-field-hovered-v26-0-2);
125
125
  }
126
- body.magritte-old-layout .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-position-container___cEpbv_3-3-60{
126
+ body.magritte-old-layout .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-position-container___cEpbv_3-3-62{
127
127
  box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-hovered-v26-0-2);
128
128
  background-color:var(--magritte-color-component-input-background-state-field-hovered-v26-0-2);
129
129
  }
130
- body.magritte-old-layout .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-native-element___a0RAE_3-3-60{
130
+ body.magritte-old-layout .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-native-element___a0RAE_3-3-62{
131
131
  color:var(--magritte-color-component-input-text-state-content-hovered-v26-0-2);
132
132
  -webkit-text-fill-color:var(--magritte-color-component-input-text-state-content-hovered-v26-0-2);
133
133
  opacity:1;
134
134
  }
135
- body.magritte-old-layout .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-label___sgTIH_3-3-60{
135
+ body.magritte-old-layout .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-label___sgTIH_3-3-62{
136
136
  color:var(--magritte-color-component-input-text-state-placeholder-hovered-v26-0-2);
137
137
  }
138
- body.magritte-old-layout .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-label-elevated___0lxOI_3-3-60{
138
+ body.magritte-old-layout .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-label-elevated___0lxOI_3-3-62{
139
139
  color:var(--magritte-color-component-input-text-state-label-hovered-v26-0-2);
140
140
  }
141
- body.magritte-old-layout .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-limit___IjPJy_3-3-60{
141
+ body.magritte-old-layout .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-limit___IjPJy_3-3-62{
142
142
  background-color:var(--magritte-color-component-input-background-state-field-hovered-v26-0-2);
143
143
  }
144
- body.magritte-old-layout .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-limit___IjPJy_3-3-60{
144
+ body.magritte-old-layout .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-limit___IjPJy_3-3-62{
145
145
  --magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-limit-hovered-v26-0-2);
146
146
  }
147
147
  }
148
148
  @media (min-width: 1024px){
149
- body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover{
149
+ body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover{
150
150
  --magritte-ui-form-helper-description-color-override:var(--magritte-color-component-input-text-state-description-hovered-v26-0-2);
151
151
  }
152
- body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after{
152
+ body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after{
153
153
  border-bottom-color:var(--magritte-color-component-input-stroke-state-field-hovered-v26-0-2);
154
154
  border-right-color:var(--magritte-color-component-input-stroke-state-field-hovered-v26-0-2);
155
155
  border-width:1px;
156
156
  background-color:var(--magritte-color-component-input-background-state-field-hovered-v26-0-2);
157
157
  }
158
- body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-position-container___cEpbv_3-3-60{
158
+ body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-position-container___cEpbv_3-3-62{
159
159
  box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-hovered-v26-0-2);
160
160
  background-color:var(--magritte-color-component-input-background-state-field-hovered-v26-0-2);
161
161
  }
162
- body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-native-element___a0RAE_3-3-60{
162
+ body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-native-element___a0RAE_3-3-62{
163
163
  color:var(--magritte-color-component-input-text-state-content-hovered-v26-0-2);
164
164
  -webkit-text-fill-color:var(--magritte-color-component-input-text-state-content-hovered-v26-0-2);
165
165
  opacity:1;
166
166
  }
167
- body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-label___sgTIH_3-3-60{
167
+ body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-label___sgTIH_3-3-62{
168
168
  color:var(--magritte-color-component-input-text-state-placeholder-hovered-v26-0-2);
169
169
  }
170
- body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-label-elevated___0lxOI_3-3-60{
170
+ body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-label-elevated___0lxOI_3-3-62{
171
171
  color:var(--magritte-color-component-input-text-state-label-hovered-v26-0-2);
172
172
  }
173
- body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-limit___IjPJy_3-3-60{
173
+ body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-limit___IjPJy_3-3-62{
174
174
  background-color:var(--magritte-color-component-input-background-state-field-hovered-v26-0-2);
175
175
  }
176
- body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-60:not(.magritte-textarea-focused___eiGyC_3-3-60):not(.magritte-textarea-invalid___iKOPh_3-3-60):not(.magritte-textarea-disabled___XN0cg_3-3-60):hover .magritte-textarea-limit___IjPJy_3-3-60{
176
+ body:not(.magritte-old-layout) .magritte-textarea___ugvor_3-3-62:not(.magritte-textarea-focused___eiGyC_3-3-62):not(.magritte-textarea-invalid___iKOPh_3-3-62):not(.magritte-textarea-disabled___XN0cg_3-3-62):hover .magritte-textarea-limit___IjPJy_3-3-62{
177
177
  --magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-limit-hovered-v26-0-2);
178
178
  }
179
179
  }
180
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60{
180
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62{
181
181
  --magritte-ui-form-helper-description-color-override:var(--magritte-color-component-input-text-state-description-focused-v26-0-2);
182
182
  }
183
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after{
183
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after{
184
184
  border-bottom-color:var(--magritte-color-component-input-stroke-state-field-focused-v26-0-2);
185
185
  border-right-color:var(--magritte-color-component-input-stroke-state-field-focused-v26-0-2);
186
186
  border-width:2px;
187
187
  background-color:var(--magritte-color-component-input-background-state-field-focused-v26-0-2);
188
188
  }
189
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60 .magritte-textarea-position-container___cEpbv_3-3-60{
189
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62 .magritte-textarea-position-container___cEpbv_3-3-62{
190
190
  box-shadow:inset 0 0 0 2px var(--magritte-color-component-input-stroke-state-field-focused-v26-0-2);
191
191
  background-color:var(--magritte-color-component-input-background-state-field-focused-v26-0-2);
192
192
  }
193
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60 .magritte-native-element___a0RAE_3-3-60{
193
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62 .magritte-native-element___a0RAE_3-3-62{
194
194
  color:var(--magritte-color-component-input-text-state-content-focused-v26-0-2);
195
195
  -webkit-text-fill-color:var(--magritte-color-component-input-text-state-content-focused-v26-0-2);
196
196
  opacity:1;
197
197
  }
198
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60 .magritte-textarea-label___sgTIH_3-3-60{
198
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62 .magritte-textarea-label___sgTIH_3-3-62{
199
199
  color:var(--magritte-color-component-input-text-state-placeholder-focused-v26-0-2);
200
200
  }
201
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60 .magritte-textarea-label-elevated___0lxOI_3-3-60{
201
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62 .magritte-textarea-label-elevated___0lxOI_3-3-62{
202
202
  color:var(--magritte-color-component-input-text-state-label-focused-v26-0-2);
203
203
  }
204
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60{
204
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62{
205
205
  background-color:var(--magritte-color-component-input-background-state-field-focused-v26-0-2);
206
206
  }
207
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60{
207
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62{
208
208
  --magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-limit-focused-v26-0-2);
209
209
  }
210
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60,
211
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60{
210
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62,
211
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62{
212
212
  --magritte-ui-form-helper-error-color-override:var(--magritte-color-component-input-text-state-description-invalid-v26-0-2);
213
213
  }
214
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after,
215
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after{
214
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after,
215
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after{
216
216
  border-bottom-color:var(--magritte-color-component-input-stroke-state-field-invalid-v26-0-2);
217
217
  border-right-color:var(--magritte-color-component-input-stroke-state-field-invalid-v26-0-2);
218
218
  border-width:2px;
219
219
  background-color:var(--magritte-color-component-input-background-state-field-invalid-v26-0-2);
220
220
  }
221
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-textarea-position-container___cEpbv_3-3-60,
222
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-position-container___cEpbv_3-3-60{
221
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-textarea-position-container___cEpbv_3-3-62,
222
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-position-container___cEpbv_3-3-62{
223
223
  box-shadow:inset 0 0 0 2px var(--magritte-color-component-input-stroke-state-field-invalid-v26-0-2);
224
224
  background-color:var(--magritte-color-component-input-background-state-field-invalid-v26-0-2);
225
225
  }
226
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-native-element___a0RAE_3-3-60,
227
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-native-element___a0RAE_3-3-60{
226
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-native-element___a0RAE_3-3-62,
227
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-native-element___a0RAE_3-3-62{
228
228
  color:var(--magritte-color-component-input-text-state-content-invalid-v26-0-2);
229
229
  -webkit-text-fill-color:var(--magritte-color-component-input-text-state-content-invalid-v26-0-2);
230
230
  opacity:1;
231
231
  }
232
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-textarea-label___sgTIH_3-3-60,
233
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-label___sgTIH_3-3-60{
232
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-textarea-label___sgTIH_3-3-62,
233
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-label___sgTIH_3-3-62{
234
234
  color:var(--magritte-color-component-input-text-state-placeholder-invalid-v26-0-2);
235
235
  }
236
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-textarea-label-elevated___0lxOI_3-3-60,
237
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-label-elevated___0lxOI_3-3-60{
236
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-textarea-label-elevated___0lxOI_3-3-62,
237
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-label-elevated___0lxOI_3-3-62{
238
238
  color:var(--magritte-color-component-input-text-state-label-invalid-v26-0-2);
239
239
  }
240
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60,
241
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60{
240
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62,
241
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62{
242
242
  background-color:var(--magritte-color-component-input-background-state-field-invalid-v26-0-2);
243
243
  }
244
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-focused___eiGyC_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60{
244
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-focused___eiGyC_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62{
245
245
  --magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-limit-invalid-v26-0-2);
246
246
  }
247
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60{
247
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62{
248
248
  --magritte-ui-form-helper-error-color-override:var(--magritte-color-component-input-text-state-description-invalid-v26-0-2);
249
249
  }
250
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after{
250
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after{
251
251
  border-bottom-color:var(--magritte-color-component-input-stroke-state-field-invalid-v26-0-2);
252
252
  border-right-color:var(--magritte-color-component-input-stroke-state-field-invalid-v26-0-2);
253
253
  border-width:1px;
254
254
  background-color:var(--magritte-color-component-input-background-state-field-invalid-v26-0-2);
255
255
  }
256
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-position-container___cEpbv_3-3-60{
256
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-position-container___cEpbv_3-3-62{
257
257
  box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-invalid-v26-0-2);
258
258
  background-color:var(--magritte-color-component-input-background-state-field-invalid-v26-0-2);
259
259
  }
260
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-native-element___a0RAE_3-3-60{
260
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-native-element___a0RAE_3-3-62{
261
261
  color:var(--magritte-color-component-input-text-state-content-invalid-v26-0-2);
262
262
  -webkit-text-fill-color:var(--magritte-color-component-input-text-state-content-invalid-v26-0-2);
263
263
  opacity:1;
264
264
  }
265
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-label___sgTIH_3-3-60{
265
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-label___sgTIH_3-3-62{
266
266
  color:var(--magritte-color-component-input-text-state-placeholder-invalid-v26-0-2);
267
267
  }
268
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-label-elevated___0lxOI_3-3-60{
268
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-label-elevated___0lxOI_3-3-62{
269
269
  color:var(--magritte-color-component-input-text-state-label-invalid-v26-0-2);
270
270
  }
271
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60{
271
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62{
272
272
  background-color:var(--magritte-color-component-input-background-state-field-invalid-v26-0-2);
273
273
  }
274
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60{
274
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62{
275
275
  --magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-limit-invalid-v26-0-2);
276
276
  }
277
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60{
277
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62{
278
278
  --magritte-ui-form-helper-description-color-override:var(--magritte-color-component-input-text-state-description-disabled-v26-0-2);
279
279
  }
280
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after{
280
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after{
281
281
  border-bottom-color:var(--magritte-color-component-input-stroke-state-field-disabled-v26-0-2);
282
282
  border-right-color:var(--magritte-color-component-input-stroke-state-field-disabled-v26-0-2);
283
283
  border-width:1px;
284
284
  background-color:var(--magritte-color-component-input-background-state-field-disabled-v26-0-2);
285
285
  }
286
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-textarea-position-container___cEpbv_3-3-60{
286
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-textarea-position-container___cEpbv_3-3-62{
287
287
  box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-disabled-v26-0-2);
288
288
  background-color:var(--magritte-color-component-input-background-state-field-disabled-v26-0-2);
289
289
  }
290
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-native-element___a0RAE_3-3-60{
290
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-native-element___a0RAE_3-3-62{
291
291
  color:var(--magritte-color-component-input-text-state-content-disabled-v26-0-2);
292
292
  -webkit-text-fill-color:var(--magritte-color-component-input-text-state-content-disabled-v26-0-2);
293
293
  opacity:1;
294
294
  }
295
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-textarea-label___sgTIH_3-3-60{
295
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-textarea-label___sgTIH_3-3-62{
296
296
  color:var(--magritte-color-component-input-text-state-placeholder-disabled-v26-0-2);
297
297
  }
298
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-textarea-label-elevated___0lxOI_3-3-60{
298
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-textarea-label-elevated___0lxOI_3-3-62{
299
299
  color:var(--magritte-color-component-input-text-state-label-disabled-v26-0-2);
300
300
  }
301
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60{
301
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62{
302
302
  background-color:var(--magritte-color-component-input-background-state-field-disabled-v26-0-2);
303
303
  }
304
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-textarea-limit___IjPJy_3-3-60{
304
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-textarea-limit___IjPJy_3-3-62{
305
305
  --magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-limit-disabled-v26-0-2);
306
306
  }
307
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-textarea-position-container___cEpbv_3-3-60,
308
- .magritte-textarea___ugvor_3-3-60.magritte-textarea-disabled___XN0cg_3-3-60 .magritte-native-element___a0RAE_3-3-60{
307
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-textarea-position-container___cEpbv_3-3-62,
308
+ .magritte-textarea___ugvor_3-3-62.magritte-textarea-disabled___XN0cg_3-3-62 .magritte-native-element___a0RAE_3-3-62{
309
309
  cursor:not-allowed;
310
310
  }
311
311
  @media (prefers-reduced-motion){
312
- .magritte-textarea___ugvor_3-3-60{
312
+ .magritte-textarea___ugvor_3-3-62{
313
313
  --animation-100-duration:1ms;
314
314
  --animation-300-duration:1ms;
315
315
  }
316
316
  }
317
- .magritte-textarea-position-container-wrapper___4Dsui_3-3-60{
317
+ .magritte-textarea-position-container-wrapper___4Dsui_3-3-62{
318
318
  display:inline-flex;
319
319
  position:relative;
320
320
  overflow:hidden;
@@ -322,14 +322,14 @@
322
322
  border-radius:12px;
323
323
  --magritte-ui-scrollbar-border-radius:12px;
324
324
  }
325
- .magritte-textarea-position-container-wrapper___4Dsui_3-3-60.focus-visible{
325
+ .magritte-textarea-position-container-wrapper___4Dsui_3-3-62.focus-visible{
326
326
  outline:var(--magritte-color-component-input-stroke-state-accent-focused-accessible-v26-0-2) solid 4px;
327
327
  }
328
- .magritte-textarea-invalid___iKOPh_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60.focus-visible,
329
- .magritte-textarea-limit-error___vLvZU_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60.focus-visible{
328
+ .magritte-textarea-invalid___iKOPh_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62.focus-visible,
329
+ .magritte-textarea-limit-error___vLvZU_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62.focus-visible{
330
330
  outline-color:var(--magritte-color-component-input-stroke-state-negative-focused-accessible-v26-0-2);
331
331
  }
332
- .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after{
332
+ .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after{
333
333
  display:none;
334
334
  pointer-events:none;
335
335
  user-select:none;
@@ -344,10 +344,10 @@
344
344
  border-bottom:1px solid var(--magritte-color-component-input-stroke-field-v26-0-2);
345
345
  border-right:1px solid var(--magritte-color-component-input-stroke-field-v26-0-2);
346
346
  }
347
- .magritte-has-grip___ATMYQ_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60::after{
347
+ .magritte-has-grip___ATMYQ_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62::after{
348
348
  display:block;
349
349
  }
350
- .magritte-native-element___a0RAE_3-3-60{
350
+ .magritte-native-element___a0RAE_3-3-62{
351
351
  box-sizing:border-box;
352
352
  border:0;
353
353
  width:100%;
@@ -375,11 +375,11 @@
375
375
  background:none;
376
376
  appearance:none;
377
377
  }
378
- .magritte-native-element___a0RAE_3-3-60::-webkit-scrollbar{
378
+ .magritte-native-element___a0RAE_3-3-62::-webkit-scrollbar{
379
379
  display:none;
380
380
  }
381
- .magritte-textarea-medium___GNzAm_3-3-60 .magritte-native-element___a0RAE_3-3-60,
382
- .magritte-textarea-large___ugT-5_3-3-60 .magritte-native-element___a0RAE_3-3-60{
381
+ .magritte-textarea-medium___GNzAm_3-3-62 .magritte-native-element___a0RAE_3-3-62,
382
+ .magritte-textarea-large___ugT-5_3-3-62 .magritte-native-element___a0RAE_3-3-62{
383
383
  font-family:"hh sans";
384
384
  font-weight:400;
385
385
  line-height:22px;
@@ -389,45 +389,45 @@
389
389
  text-transform:none;
390
390
  text-decoration:none;
391
391
  }
392
- .magritte-native-element___a0RAE_3-3-60:focus{
392
+ .magritte-native-element___a0RAE_3-3-62:focus{
393
393
  outline:none;
394
394
  }
395
- .magritte-textarea-layout-fill-both___ERS-q_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60,
396
- .magritte-textarea-layout-fill-vertical___HmNtp_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60,
397
- .magritte-textarea-layout-fill-horizontal___imBH2_3-3-60 .magritte-textarea-position-container-wrapper___4Dsui_3-3-60{
395
+ .magritte-textarea-layout-fill-both___ERS-q_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62,
396
+ .magritte-textarea-layout-fill-vertical___HmNtp_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62,
397
+ .magritte-textarea-layout-fill-horizontal___imBH2_3-3-62 .magritte-textarea-position-container-wrapper___4Dsui_3-3-62{
398
398
  flex:1;
399
399
  }
400
- .magritte-textarea-layout-fill-both___ERS-q_3-3-60{
400
+ .magritte-textarea-layout-fill-both___ERS-q_3-3-62{
401
401
  width:100%;
402
402
  height:100%;
403
403
  }
404
- .magritte-textarea-layout-fill-vertical___HmNtp_3-3-60{
404
+ .magritte-textarea-layout-fill-vertical___HmNtp_3-3-62{
405
405
  height:100%;
406
406
  }
407
- .magritte-textarea-layout-fill-horizontal___imBH2_3-3-60,
408
- .magritte-textarea-layout-hug___tdCMY_3-3-60{
407
+ .magritte-textarea-layout-fill-horizontal___imBH2_3-3-62,
408
+ .magritte-textarea-layout-hug___tdCMY_3-3-62{
409
409
  width:100%;
410
410
  }
411
411
  @media (min-width: 1020px){
412
- body.magritte-old-layout .magritte-textarea-layout-hug___tdCMY_3-3-60 .magritte-textarea-position-container___cEpbv_3-3-60{
412
+ body.magritte-old-layout .magritte-textarea-layout-hug___tdCMY_3-3-62 .magritte-textarea-position-container___cEpbv_3-3-62{
413
413
  max-height:var(--magritte-textarea-max-height, auto);
414
414
  }
415
415
  }
416
416
  @media (min-width: 1024px){
417
- body:not(.magritte-old-layout) .magritte-textarea-layout-hug___tdCMY_3-3-60 .magritte-textarea-position-container___cEpbv_3-3-60{
417
+ body:not(.magritte-old-layout) .magritte-textarea-layout-hug___tdCMY_3-3-62 .magritte-textarea-position-container___cEpbv_3-3-62{
418
418
  max-height:var(--magritte-textarea-max-height, auto);
419
419
  }
420
420
  }
421
- .magritte-textarea-wrapper___yD7G6_3-3-60{
421
+ .magritte-textarea-wrapper___yD7G6_3-3-62{
422
422
  display:grid;
423
423
  width:100%;
424
424
  }
425
- .magritte-value-clone-wrapper___2ZZvS_3-3-60{
425
+ .magritte-value-clone-wrapper___2ZZvS_3-3-62{
426
426
  grid-area:1 / 1 / 2 / 2;
427
427
  min-height:0;
428
428
  overflow:hidden;
429
429
  }
430
- .magritte-value-clone-container___PVM97_3-3-60{
430
+ .magritte-value-clone-container___PVM97_3-3-62{
431
431
  margin:0;
432
432
  box-sizing:border-box;
433
433
  border:0;
@@ -455,11 +455,11 @@
455
455
  visibility:hidden;
456
456
  pointer-events:none;
457
457
  }
458
- .magritte-value-clone-container___PVM97_3-3-60::-webkit-scrollbar{
458
+ .magritte-value-clone-container___PVM97_3-3-62::-webkit-scrollbar{
459
459
  display:none;
460
460
  }
461
- .magritte-textarea-medium___GNzAm_3-3-60 .magritte-value-clone-container___PVM97_3-3-60,
462
- .magritte-textarea-large___ugT-5_3-3-60 .magritte-value-clone-container___PVM97_3-3-60{
461
+ .magritte-textarea-medium___GNzAm_3-3-62 .magritte-value-clone-container___PVM97_3-3-62,
462
+ .magritte-textarea-large___ugT-5_3-3-62 .magritte-value-clone-container___PVM97_3-3-62{
463
463
  font-family:"hh sans";
464
464
  font-weight:400;
465
465
  line-height:22px;
@@ -469,16 +469,16 @@
469
469
  text-transform:none;
470
470
  text-decoration:none;
471
471
  }
472
- .magritte-textarea-small___Q-tsg_3-3-60 .magritte-side-padding___O-HUP_3-3-60{
472
+ .magritte-textarea-small___Q-tsg_3-3-62 .magritte-side-padding___O-HUP_3-3-62{
473
473
  padding:0 calc(12px - 2px);
474
474
  }
475
- .magritte-textarea-medium___GNzAm_3-3-60 .magritte-side-padding___O-HUP_3-3-60{
475
+ .magritte-textarea-medium___GNzAm_3-3-62 .magritte-side-padding___O-HUP_3-3-62{
476
476
  padding:0 calc(16px - 2px);
477
477
  }
478
- .magritte-textarea-large___ugT-5_3-3-60 .magritte-side-padding___O-HUP_3-3-60{
478
+ .magritte-textarea-large___ugT-5_3-3-62 .magritte-side-padding___O-HUP_3-3-62{
479
479
  padding:0 calc(16px - 2px);
480
480
  }
481
- .magritte-textarea-position-container___cEpbv_3-3-60{
481
+ .magritte-textarea-position-container___cEpbv_3-3-62{
482
482
  display:inline-flex;
483
483
  overflow:hidden;
484
484
  position:relative;
@@ -490,19 +490,19 @@
490
490
  box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-field-v26-0-2);
491
491
  padding:var(--magritte-ui-textarea-vertical-padding) 2px var(--magritte-ui-textarea-bottom-padding, var(--magritte-ui-textarea-vertical-padding));
492
492
  }
493
- .magritte-textarea-animation-timeout___zudbr_3-3-60,
494
- .magritte-textarea-position-container___cEpbv_3-3-60{
493
+ .magritte-textarea-animation-timeout___zudbr_3-3-62,
494
+ .magritte-textarea-position-container___cEpbv_3-3-62{
495
495
  transition-property:transform, color, font-size, letter-spacing;
496
496
  transition-duration:var(--animation-100-duration);
497
497
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-timing-function-v26-0-2);
498
498
  --animation-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v26-0-2);
499
499
  }
500
- .magritte-textarea-rigging-container___-1S6i_3-3-60{
500
+ .magritte-textarea-rigging-container___-1S6i_3-3-62{
501
501
  position:relative;
502
502
  pointer-events:none;
503
503
  grid-area:1 / 1 / 2 / 2;
504
504
  }
505
- .magritte-textarea-label___sgTIH_3-3-60{
505
+ .magritte-textarea-label___sgTIH_3-3-62{
506
506
  font-family:"hh sans";
507
507
  font-weight:400;
508
508
  line-height:22px;
@@ -520,10 +520,10 @@
520
520
  transition-duration:var(--animation-100-duration);
521
521
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-timing-function-v26-0-2);
522
522
  }
523
- .magritte-label-no-wrap___RxZ3A_3-3-60{
523
+ .magritte-label-no-wrap___RxZ3A_3-3-62{
524
524
  white-space:nowrap;
525
525
  }
526
- .magritte-textarea-label-elevated___0lxOI_3-3-60{
526
+ .magritte-textarea-label-elevated___0lxOI_3-3-62{
527
527
  font-family:"hh sans";
528
528
  font-weight:400;
529
529
  line-height:18px;
@@ -535,7 +535,7 @@
535
535
  color:var(--magritte-color-component-input-text-label-v26-0-2);
536
536
  transform:translateY(calc(18px * -0.5));
537
537
  }
538
- .magritte-textarea-limit___IjPJy_3-3-60{
538
+ .magritte-textarea-limit___IjPJy_3-3-62{
539
539
  position:absolute;
540
540
  bottom:8px;
541
541
  right:12px;
@@ -546,7 +546,7 @@
546
546
  z-index:1;
547
547
  --magritte-ui-text-color-override:var(--magritte-color-component-input-text-limit-v26-0-2);
548
548
  }
549
- .magritte-textarea-grip___iL7lq_3-3-60{
549
+ .magritte-textarea-grip___iL7lq_3-3-62{
550
550
  position:absolute;
551
551
  pointer-events:none;
552
552
  display:inline-flex;
@@ -555,25 +555,25 @@
555
555
  border-bottom-right-radius:12px;
556
556
  --magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-grip-v26-0-2);
557
557
  }
558
- .magritte-textarea-grip-icon___YK-9w_3-3-60{
558
+ .magritte-textarea-grip-icon___YK-9w_3-3-62{
559
559
  display:inline-flex;
560
560
  z-index:1;
561
561
  }
562
562
  @media (prefers-reduced-motion: no-preference){
563
- .magritte-textarea-limit-enter___CygGz_3-3-60{
563
+ .magritte-textarea-limit-enter___CygGz_3-3-62{
564
564
  opacity:0;
565
565
  }
566
- .magritte-textarea-limit-exit___RMp-R_3-3-60,
567
- .magritte-textarea-limit-enter-active___8vN-t_3-3-60{
566
+ .magritte-textarea-limit-exit___RMp-R_3-3-62,
567
+ .magritte-textarea-limit-enter-active___8vN-t_3-3-62{
568
568
  opacity:1;
569
569
  }
570
- .magritte-textarea-limit-enter-active___8vN-t_3-3-60{
570
+ .magritte-textarea-limit-enter-active___8vN-t_3-3-62{
571
571
  transition-property:opacity;
572
572
  transition-duration:var(--magritte-semantic-animation-ease-in-out-300-duration-v26-0-2);
573
573
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v26-0-2);
574
574
  --animation-duration:var(--magritte-semantic-animation-ease-in-out-300-duration-v26-0-2);
575
575
  }
576
- .magritte-textarea-limit-exit-active___a5kBr_3-3-60{
576
+ .magritte-textarea-limit-exit-active___a5kBr_3-3-62{
577
577
  opacity:0;
578
578
  transition-property:opacity;
579
579
  transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v26-0-2);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hh.ru/magritte-ui-textarea",
3
- "version": "3.3.60",
3
+ "version": "3.3.62",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "sideEffects": [
@@ -27,12 +27,12 @@
27
27
  "@hh.ru/magritte-common-func-utils": "1.3.17",
28
28
  "@hh.ru/magritte-common-use-disabled": "1.0.17",
29
29
  "@hh.ru/magritte-common-use-multiple-refs": "1.1.13",
30
- "@hh.ru/magritte-common-use-translation": "3.7.0",
30
+ "@hh.ru/magritte-common-use-translation": "3.8.0",
31
31
  "@hh.ru/magritte-design-tokens": "26.0.2",
32
32
  "@hh.ru/magritte-ui-breakpoint": "6.1.3",
33
33
  "@hh.ru/magritte-ui-form-helper": "2.1.27",
34
34
  "@hh.ru/magritte-ui-icon": "15.1.6",
35
- "@hh.ru/magritte-ui-input": "9.4.56",
35
+ "@hh.ru/magritte-ui-input": "9.4.57",
36
36
  "@hh.ru/magritte-ui-scrollbar": "1.0.40",
37
37
  "@hh.ru/magritte-ui-typography": "5.3.17"
38
38
  },
@@ -44,5 +44,5 @@
44
44
  "publishConfig": {
45
45
  "access": "public"
46
46
  },
47
- "gitHead": "b2ad93b0a58b9d2cf766f456b91b54168494de89"
47
+ "gitHead": "d3182e9c5671dcf62e80e756b6701ec9f72cd7d0"
48
48
  }
package/types.d.ts CHANGED
@@ -21,6 +21,12 @@ export type TextAreaGrowLimiterProps = PropsWithChildren<{
21
21
  * Функция вызываемая после снятия метрик с контейнера.
22
22
  */
23
23
  postMeasurement?: VoidFunction;
24
+ /**
25
+ * Отключает ограничение роста: обертка остается в DOM, но не измеряет контейнер и не ограничивает высоту
26
+ * вложенных `TextArea`. Позволяет не перемонтировать содержимое, когда ограничение нужно только в части случаев.
27
+ * @default false
28
+ */
29
+ disabled?: boolean;
24
30
  style?: HTMLAttributes<HTMLDivElement>['style'];
25
31
  className?: HTMLAttributes<HTMLDivElement>['className'];
26
32
  }> & HTMLAttributes<HTMLDivElement>;
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["src/types.ts"],"sourcesContent":["import type {\n ReactNode,\n FocusEventHandler,\n ChangeEventHandler,\n PropsWithChildren,\n RefObject,\n HTMLAttributes,\n} from 'react';\n\nexport type TextAreaGrowLimiterProps = PropsWithChildren<{\n /**\n * Ссылка на контейнер, который должен ограничивать высоту TextArea.\n * Если не указан, то используется непосредственный родитель компонента в DOM\n * */\n containerRef?: RefObject<HTMLElement>;\n /**\n * Применять ли дебаунс при пересчете размера TextArea.\n * Если вы ожидаете, что для изменения размера контента или контейнера будет использоваться анимация, то имеет\n * смысл использовать дебаунс для вызова перерасчета. В случае если анимации нет дебаунс можно не использовать.\n */\n debounce?: boolean;\n /**\n * Функция вызываемая перед снятием метрик с контейнера. Может понадобиться при наличии кастомной логики на\n * контейнере. Например если контейнер фиксирует свой размер, но при изменении размера контента подстраивает свой\n * размер под него. В этом случае перед съемом метрик может понадобиться убрать фиксированный размер на контейнере.\n */\n preMeasurement?: VoidFunction;\n /**\n * Функция вызываемая после снятия метрик с контейнера.\n */\n postMeasurement?: VoidFunction;\n style?: HTMLAttributes<HTMLDivElement>['style'];\n className?: HTMLAttributes<HTMLDivElement>['className'];\n}> &\n HTMLAttributes<HTMLDivElement>;\n\nexport type TextAreaSize = 'small' | 'medium' | 'large';\nexport type TextAreaLayout = 'fixed' | 'hug' | 'fill-vertical' | 'fill-horizontal' | 'fill-both';\n\nexport type BaseTextAreaProps<Layout extends TextAreaLayout> = {\n /** Текст плейсхолдера */\n placeholder?: ReactNode;\n /** Обработчик события получения фокуса */\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n /** Обработчик события потери фокуса */\n onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n /** Текст подсказки под textarea */\n description?: ReactNode;\n /** Текст сообщения об ошибке */\n errorMessage?: ReactNode;\n /** Флаг отключения textarea */\n disabled?: boolean;\n /** Признак невалидности */\n invalid?: boolean;\n /** Признак невалидности по лимиту */\n invalidLimit?: boolean;\n /** Флаг управляющий режимом отображения полейсхолдера */\n elevatePlaceholder?: boolean;\n /** Определяет отступы и типографику компонента */\n size?: TextAreaSize;\n /** Лимит на количество символов, отображает текущее состояние и лимит */\n maxLength?: number;\n /** Функция для связывания внешней валидации с внутренней */\n onValidate?: (invalidState: { invalidLimit: boolean }) => void;\n /** Позволяет задать в каком направлении допустимо ручное изменение размера. Доступно только с `layout=\"fixed\"` */\n resize?: Layout extends 'fixed' ? 'none' | 'both' | 'horizontal' | 'vertical' : 'none';\n layout?: Layout;\n /** Позволяет задать максимальную высоту при `layout=\"hug\"`. Если значение равно 0 высота не ограничена. */\n maxHeight?: Layout extends 'hug' ? number : never;\n} & TextAreaSizes<Layout>;\n\ntype TextAreaSizes<\n Layout extends TextAreaLayout = 'fixed',\n AllowBothHeight extends boolean = Layout extends 'hug' ? true : false,\n> =\n | { size: 'small'; minHeight?: AllowBothHeight extends true ? 40 | 80 : 80 }\n | { size: 'medium'; minHeight?: AllowBothHeight extends true ? 48 | 96 : 96 }\n | { size?: 'large'; minHeight?: AllowBothHeight extends true ? 56 | 112 : 112 };\n\nexport interface ControlledProps {\n /** Обработчик события изменения */\n onChange: ChangeEventHandler<HTMLTextAreaElement>;\n /** Значение textarea */\n value: string;\n}\n\nexport type UncontrolledTextAreaProps<Layout extends TextAreaLayout> = Partial<ControlledProps> &\n BaseTextAreaProps<Layout>;\n\nexport type ControlledTextAreaProps<Layout extends TextAreaLayout> = BaseTextAreaProps<Layout> & ControlledProps;\n\nexport const MIN_HEIGHT_BY_SIZE = {\n small: [40, 80],\n medium: [48, 96],\n large: [56, 112],\n} as const;\n"],"names":[],"mappings":"AA2FO,MAAM,kBAAqB,GAAA;AAAA,EAC9B,KAAA,EAAO,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,EACd,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,EACf,KAAA,EAAO,CAAC,EAAA,EAAI,GAAG,CAAA;AACnB;;;;"}
1
+ {"version":3,"file":"types.js","sources":["src/types.ts"],"sourcesContent":["import type {\n ReactNode,\n FocusEventHandler,\n ChangeEventHandler,\n PropsWithChildren,\n RefObject,\n HTMLAttributes,\n} from 'react';\n\nexport type TextAreaGrowLimiterProps = PropsWithChildren<{\n /**\n * Ссылка на контейнер, который должен ограничивать высоту TextArea.\n * Если не указан, то используется непосредственный родитель компонента в DOM\n * */\n containerRef?: RefObject<HTMLElement>;\n /**\n * Применять ли дебаунс при пересчете размера TextArea.\n * Если вы ожидаете, что для изменения размера контента или контейнера будет использоваться анимация, то имеет\n * смысл использовать дебаунс для вызова перерасчета. В случае если анимации нет дебаунс можно не использовать.\n */\n debounce?: boolean;\n /**\n * Функция вызываемая перед снятием метрик с контейнера. Может понадобиться при наличии кастомной логики на\n * контейнере. Например если контейнер фиксирует свой размер, но при изменении размера контента подстраивает свой\n * размер под него. В этом случае перед съемом метрик может понадобиться убрать фиксированный размер на контейнере.\n */\n preMeasurement?: VoidFunction;\n /**\n * Функция вызываемая после снятия метрик с контейнера.\n */\n postMeasurement?: VoidFunction;\n /**\n * Отключает ограничение роста: обертка остается в DOM, но не измеряет контейнер и не ограничивает высоту\n * вложенных `TextArea`. Позволяет не перемонтировать содержимое, когда ограничение нужно только в части случаев.\n * @default false\n */\n disabled?: boolean;\n style?: HTMLAttributes<HTMLDivElement>['style'];\n className?: HTMLAttributes<HTMLDivElement>['className'];\n}> &\n HTMLAttributes<HTMLDivElement>;\n\nexport type TextAreaSize = 'small' | 'medium' | 'large';\nexport type TextAreaLayout = 'fixed' | 'hug' | 'fill-vertical' | 'fill-horizontal' | 'fill-both';\n\nexport type BaseTextAreaProps<Layout extends TextAreaLayout> = {\n /** Текст плейсхолдера */\n placeholder?: ReactNode;\n /** Обработчик события получения фокуса */\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n /** Обработчик события потери фокуса */\n onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n /** Текст подсказки под textarea */\n description?: ReactNode;\n /** Текст сообщения об ошибке */\n errorMessage?: ReactNode;\n /** Флаг отключения textarea */\n disabled?: boolean;\n /** Признак невалидности */\n invalid?: boolean;\n /** Признак невалидности по лимиту */\n invalidLimit?: boolean;\n /** Флаг управляющий режимом отображения полейсхолдера */\n elevatePlaceholder?: boolean;\n /** Определяет отступы и типографику компонента */\n size?: TextAreaSize;\n /** Лимит на количество символов, отображает текущее состояние и лимит */\n maxLength?: number;\n /** Функция для связывания внешней валидации с внутренней */\n onValidate?: (invalidState: { invalidLimit: boolean }) => void;\n /** Позволяет задать в каком направлении допустимо ручное изменение размера. Доступно только с `layout=\"fixed\"` */\n resize?: Layout extends 'fixed' ? 'none' | 'both' | 'horizontal' | 'vertical' : 'none';\n layout?: Layout;\n /** Позволяет задать максимальную высоту при `layout=\"hug\"`. Если значение равно 0 высота не ограничена. */\n maxHeight?: Layout extends 'hug' ? number : never;\n} & TextAreaSizes<Layout>;\n\ntype TextAreaSizes<\n Layout extends TextAreaLayout = 'fixed',\n AllowBothHeight extends boolean = Layout extends 'hug' ? true : false,\n> =\n | { size: 'small'; minHeight?: AllowBothHeight extends true ? 40 | 80 : 80 }\n | { size: 'medium'; minHeight?: AllowBothHeight extends true ? 48 | 96 : 96 }\n | { size?: 'large'; minHeight?: AllowBothHeight extends true ? 56 | 112 : 112 };\n\nexport interface ControlledProps {\n /** Обработчик события изменения */\n onChange: ChangeEventHandler<HTMLTextAreaElement>;\n /** Значение textarea */\n value: string;\n}\n\nexport type UncontrolledTextAreaProps<Layout extends TextAreaLayout> = Partial<ControlledProps> &\n BaseTextAreaProps<Layout>;\n\nexport type ControlledTextAreaProps<Layout extends TextAreaLayout> = BaseTextAreaProps<Layout> & ControlledProps;\n\nexport const MIN_HEIGHT_BY_SIZE = {\n small: [40, 80],\n medium: [48, 96],\n large: [56, 112],\n} as const;\n"],"names":[],"mappings":"AAiGO,MAAM,kBAAqB,GAAA;AAAA,EAC9B,KAAA,EAAO,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,EACd,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,EACf,KAAA,EAAO,CAAC,EAAA,EAAI,GAAG,CAAA;AACnB;;;;"}
package/useLimitGrow.d.ts CHANGED
@@ -7,8 +7,9 @@ type UseLimitGrowArgs = {
7
7
  resizableDivRef: RefObject<HTMLElement>;
8
8
  textAreaRef: RefObject<HTMLTextAreaElement>;
9
9
  minHeight: number;
10
+ maxedHeight: boolean;
10
11
  };
11
- export declare const useLimitGrow: ({ layout, contentCloneRef, contentCloneWrapperRef, resizableDivRef, textAreaRef, minHeight, }: UseLimitGrowArgs) => {
12
+ export declare const useLimitGrow: ({ layout, contentCloneRef, contentCloneWrapperRef, resizableDivRef, textAreaRef, minHeight, maxedHeight, }: UseLimitGrowArgs) => {
12
13
  maxHeightRef: RefObject<string>;
13
14
  allowScrollRef: RefObject<boolean>;
14
15
  };
package/useLimitGrow.js CHANGED
@@ -11,17 +11,24 @@ const useLimitGrow = ({
11
11
  contentCloneWrapperRef,
12
12
  resizableDivRef,
13
13
  textAreaRef,
14
- minHeight
14
+ minHeight,
15
+ maxedHeight
15
16
  }) => {
16
17
  const growLimiterContext = useContext(GrowLimiterContext);
17
18
  const allowScrollRef = useRef(false);
18
19
  const maxHeightRef = useRef(null);
20
+ const limitAppliedRef = useRef(false);
19
21
  if (layout !== "hug" || !growLimiterContext.hasLimit) {
20
22
  maxHeightRef.current = null;
21
23
  allowScrollRef.current = true;
22
24
  }
23
25
  useLayoutEffect(() => {
24
26
  if (layout !== "hug" || !contentCloneRef.current || !growLimiterContext.hasLimit) {
27
+ if (limitAppliedRef.current) {
28
+ limitAppliedRef.current = false;
29
+ textAreaRef.current && (textAreaRef.current.style.overflowY = "auto");
30
+ resizableDivRef.current && (resizableDivRef.current.style.height = maxedHeight ? "auto" : `${minHeight}px`);
31
+ }
25
32
  return void 0;
26
33
  }
27
34
  const applyHeightLimit = () => {
@@ -38,6 +45,7 @@ const useLimitGrow = ({
38
45
  textAreaRef.current.style.overflowY = allowScrollRef.current ? "auto" : "hidden";
39
46
  resizableDivRef.current.style.height = `${appliedHeight}px`;
40
47
  maxHeightRef.current = `${appliedHeight}px`;
48
+ limitAppliedRef.current = true;
41
49
  if (appliedHeight !== height) {
42
50
  growLimiterContext.heightUpdated();
43
51
  }
@@ -51,7 +59,16 @@ const useLimitGrow = ({
51
59
  observer.disconnect();
52
60
  context.offHeightChange(applyHeightLimit);
53
61
  };
54
- }, [layout, growLimiterContext, contentCloneRef, contentCloneWrapperRef, resizableDivRef, minHeight, textAreaRef]);
62
+ }, [
63
+ layout,
64
+ growLimiterContext,
65
+ contentCloneRef,
66
+ contentCloneWrapperRef,
67
+ resizableDivRef,
68
+ minHeight,
69
+ maxedHeight,
70
+ textAreaRef
71
+ ]);
55
72
  return { maxHeightRef, allowScrollRef };
56
73
  };
57
74
 
@@ -1 +1 @@
1
- {"version":3,"file":"useLimitGrow.js","sources":["src/useLimitGrow.ts"],"sourcesContent":["import { useRef, useContext, useLayoutEffect, type RefObject } from 'react';\n\nimport { GrowLimiterContext } from '@hh.ru/magritte-ui-textarea/TextAreaGrowLimiter';\nimport type { TextAreaLayout } from '@hh.ru/magritte-ui-textarea/types';\n\ntype UseLimitGrowArgs = {\n layout: TextAreaLayout;\n contentCloneRef: RefObject<HTMLElement>;\n contentCloneWrapperRef: RefObject<HTMLElement>;\n resizableDivRef: RefObject<HTMLElement>;\n textAreaRef: RefObject<HTMLTextAreaElement>;\n minHeight: number;\n};\n\nexport const useLimitGrow = ({\n layout,\n contentCloneRef,\n contentCloneWrapperRef,\n resizableDivRef,\n textAreaRef,\n minHeight,\n}: UseLimitGrowArgs): { maxHeightRef: RefObject<string>; allowScrollRef: RefObject<boolean> } => {\n const growLimiterContext = useContext(GrowLimiterContext);\n const allowScrollRef = useRef(false);\n const maxHeightRef = useRef<string | null>(null);\n\n if (layout !== 'hug' || !growLimiterContext.hasLimit) {\n maxHeightRef.current = null;\n allowScrollRef.current = true;\n }\n\n useLayoutEffect(() => {\n if (layout !== 'hug' || !contentCloneRef.current || !growLimiterContext.hasLimit) {\n return void 0;\n }\n\n const applyHeightLimit = () => {\n if (\n !resizableDivRef.current ||\n !contentCloneWrapperRef.current ||\n !contentCloneRef.current ||\n !textAreaRef.current\n ) {\n return;\n }\n\n // Сравниваем высоту контейнера содержащего клон контента текстарии и его обертки. Контейнер может свободно\n // менять высоту чтобы уместить весь контент. Обертка может только свободно уменьшаться, при увеличении\n // размера контента размер обертки не меняется. Вычитая одно из другого получаем положительное число равное\n // изменению размера контента если контент стал больше, и 0 если он уменьшился.\n const contentCloneHeight = contentCloneRef.current.offsetHeight;\n const contentCloneWrapperHeight = contentCloneWrapperRef.current.offsetHeight;\n const contentHeightDelta = contentCloneHeight - contentCloneWrapperHeight;\n // Размер внешнего контейнера текстарии\n const height = resizableDivRef.current.offsetHeight;\n\n // Получаем количество свободного пространства в контейнере которое можем занять до получения скролла\n // Число может быть отрицательным если в контейнере уже присутствует скролл, тогда это количество пикселей\n // на которое нужно уменьшить высоту контента чтобы скролл исчез.\n const heightDiff = growLimiterContext.getHeightDiff();\n // Вычисляем новую высоту внешнего контейнера как сумму его текущей высоты и дельты высоты контента.\n // Убеждаемся что добавляем к высоте текстарии не больше пикселей, чем доступно в контейнере до появления\n // скролла. В результате размер текстарии может уменьшиться, если в контейнере доступно отрицательное\n // количество пикселей до появления скролла (в случае если скролл уже появился из-за добавления другого\n // контента например).\n // Убеждаемся, что высота не стала меньше минимальной допустимой\n const appliedHeight = Math.max(height + Math.min(contentHeightDelta, heightDiff), minHeight);\n allowScrollRef.current = contentHeightDelta > heightDiff || heightDiff < 0;\n textAreaRef.current.style.overflowY = allowScrollRef.current ? 'auto' : 'hidden';\n resizableDivRef.current.style.height = `${appliedHeight}px`;\n maxHeightRef.current = `${appliedHeight}px`;\n if (appliedHeight !== height) {\n // При тестировании в хроме с 20x slowdown сброс кеша в height diff контексте не успевал сработать за\n // период дебаунса, из-за этого если зажать enter компонент мог стать больше по высоте чем контейнер\n // и ограничение срабатывало только после отпускания клавиши,поэтому добавил принудительный сброс кеша\n // при изменении размера компонента\n growLimiterContext.heightUpdated();\n }\n };\n\n const observer = new ResizeObserver(applyHeightLimit);\n // Запускаем процесс пересчета максимальной высоты текстарии каждый раз\n // когда вертикальный размер контента меняется\n observer.observe(contentCloneRef.current, { box: 'border-box' });\n const context = growLimiterContext;\n // Так же запускаем его когда меняется размер контейнера скролла в котором мы пытаемся избежать.\n // Или размер обертки которую создает TextAreaGrowLimiter, например вследствие добавления или удаления\n // контента рядом с текстарией.\n context.onHeightChange(applyHeightLimit);\n applyHeightLimit();\n\n return () => {\n observer.disconnect();\n context.offHeightChange(applyHeightLimit);\n };\n }, [layout, growLimiterContext, contentCloneRef, contentCloneWrapperRef, resizableDivRef, minHeight, textAreaRef]);\n\n return { maxHeightRef, allowScrollRef };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useLimitGrow.js","sources":["src/useLimitGrow.ts"],"sourcesContent":["import { useRef, useContext, useLayoutEffect, type RefObject } from 'react';\n\nimport { GrowLimiterContext } from '@hh.ru/magritte-ui-textarea/TextAreaGrowLimiter';\nimport type { TextAreaLayout } from '@hh.ru/magritte-ui-textarea/types';\n\ntype UseLimitGrowArgs = {\n layout: TextAreaLayout;\n contentCloneRef: RefObject<HTMLElement>;\n contentCloneWrapperRef: RefObject<HTMLElement>;\n resizableDivRef: RefObject<HTMLElement>;\n textAreaRef: RefObject<HTMLTextAreaElement>;\n minHeight: number;\n maxedHeight: boolean;\n};\n\nexport const useLimitGrow = ({\n layout,\n contentCloneRef,\n contentCloneWrapperRef,\n resizableDivRef,\n textAreaRef,\n minHeight,\n maxedHeight,\n}: UseLimitGrowArgs): { maxHeightRef: RefObject<string>; allowScrollRef: RefObject<boolean> } => {\n const growLimiterContext = useContext(GrowLimiterContext);\n const allowScrollRef = useRef(false);\n const maxHeightRef = useRef<string | null>(null);\n const limitAppliedRef = useRef(false);\n\n if (layout !== 'hug' || !growLimiterContext.hasLimit) {\n maxHeightRef.current = null;\n allowScrollRef.current = true;\n }\n\n useLayoutEffect(() => {\n if (layout !== 'hug' || !contentCloneRef.current || !growLimiterContext.hasLimit) {\n if (limitAppliedRef.current) {\n // Ограничение сняли на лету (например, TextAreaGrowLimiter выключили пропом disabled). React\n // перезаписывает style только при изменении пропа, поэтому значения, выставленные вручную в\n // applyHeightLimit, возвращаем к тем, что компонент рендерит без ограничения.\n limitAppliedRef.current = false;\n textAreaRef.current && (textAreaRef.current.style.overflowY = 'auto');\n resizableDivRef.current &&\n (resizableDivRef.current.style.height = maxedHeight ? 'auto' : `${minHeight}px`);\n }\n return void 0;\n }\n\n const applyHeightLimit = () => {\n if (\n !resizableDivRef.current ||\n !contentCloneWrapperRef.current ||\n !contentCloneRef.current ||\n !textAreaRef.current\n ) {\n return;\n }\n\n // Сравниваем высоту контейнера содержащего клон контента текстарии и его обертки. Контейнер может свободно\n // менять высоту чтобы уместить весь контент. Обертка может только свободно уменьшаться, при увеличении\n // размера контента размер обертки не меняется. Вычитая одно из другого получаем положительное число равное\n // изменению размера контента если контент стал больше, и 0 если он уменьшился.\n const contentCloneHeight = contentCloneRef.current.offsetHeight;\n const contentCloneWrapperHeight = contentCloneWrapperRef.current.offsetHeight;\n const contentHeightDelta = contentCloneHeight - contentCloneWrapperHeight;\n // Размер внешнего контейнера текстарии\n const height = resizableDivRef.current.offsetHeight;\n\n // Получаем количество свободного пространства в контейнере которое можем занять до получения скролла\n // Число может быть отрицательным если в контейнере уже присутствует скролл, тогда это количество пикселей\n // на которое нужно уменьшить высоту контента чтобы скролл исчез.\n const heightDiff = growLimiterContext.getHeightDiff();\n // Вычисляем новую высоту внешнего контейнера как сумму его текущей высоты и дельты высоты контента.\n // Убеждаемся что добавляем к высоте текстарии не больше пикселей, чем доступно в контейнере до появления\n // скролла. В результате размер текстарии может уменьшиться, если в контейнере доступно отрицательное\n // количество пикселей до появления скролла (в случае если скролл уже появился из-за добавления другого\n // контента например).\n // Убеждаемся, что высота не стала меньше минимальной допустимой\n const appliedHeight = Math.max(height + Math.min(contentHeightDelta, heightDiff), minHeight);\n allowScrollRef.current = contentHeightDelta > heightDiff || heightDiff < 0;\n textAreaRef.current.style.overflowY = allowScrollRef.current ? 'auto' : 'hidden';\n resizableDivRef.current.style.height = `${appliedHeight}px`;\n maxHeightRef.current = `${appliedHeight}px`;\n limitAppliedRef.current = true;\n if (appliedHeight !== height) {\n // При тестировании в хроме с 20x slowdown сброс кеша в height diff контексте не успевал сработать за\n // период дебаунса, из-за этого если зажать enter компонент мог стать больше по высоте чем контейнер\n // и ограничение срабатывало только после отпускания клавиши,поэтому добавил принудительный сброс кеша\n // при изменении размера компонента\n growLimiterContext.heightUpdated();\n }\n };\n\n const observer = new ResizeObserver(applyHeightLimit);\n // Запускаем процесс пересчета максимальной высоты текстарии каждый раз\n // когда вертикальный размер контента меняется\n observer.observe(contentCloneRef.current, { box: 'border-box' });\n const context = growLimiterContext;\n // Так же запускаем его когда меняется размер контейнера скролла в котором мы пытаемся избежать.\n // Или размер обертки которую создает TextAreaGrowLimiter, например вследствие добавления или удаления\n // контента рядом с текстарией.\n context.onHeightChange(applyHeightLimit);\n applyHeightLimit();\n\n return () => {\n observer.disconnect();\n context.offHeightChange(applyHeightLimit);\n };\n }, [\n layout,\n growLimiterContext,\n contentCloneRef,\n contentCloneWrapperRef,\n resizableDivRef,\n minHeight,\n maxedHeight,\n textAreaRef,\n ]);\n\n return { maxHeightRef, allowScrollRef };\n};\n"],"names":[],"mappings":"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"}