@semcore/bulk-textarea 17.0.0-prerelease.30 → 17.0.0-prerelease.31
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/CHANGELOG.md +5 -1
- package/lib/cjs/components/InputField/InputField.js +11 -0
- package/lib/cjs/components/InputField/InputField.js.map +1 -1
- package/lib/es6/components/InputField/InputField.js +11 -0
- package/lib/es6/components/InputField/InputField.js.map +1 -1
- package/lib/esm/components/InputField/InputField.mjs +8 -0
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
-
## [17.0.0] - 2026-03-
|
|
5
|
+
## [17.0.0] - 2026-03-27
|
|
6
6
|
|
|
7
7
|
### BREAK
|
|
8
8
|
|
|
9
9
|
- New major version.
|
|
10
10
|
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added `autoFocus` prop for `BulkTextarea.InputField`
|
|
14
|
+
|
|
11
15
|
### Fixed
|
|
12
16
|
|
|
13
17
|
- Fixed types for `Bulktextarea.InputField`.
|
|
@@ -80,6 +80,11 @@ class InputField extends _core.Component {
|
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
82
|
componentDidMount() {
|
|
83
|
+
const {
|
|
84
|
+
autoFocus,
|
|
85
|
+
disabled,
|
|
86
|
+
readonly
|
|
87
|
+
} = this.asProps;
|
|
83
88
|
this.containerRef.current?.append(this.textarea);
|
|
84
89
|
this.handleValueOutChange();
|
|
85
90
|
const config = {
|
|
@@ -90,6 +95,12 @@ class InputField extends _core.Component {
|
|
|
90
95
|
if (this.props.onImmediatelyChange) {
|
|
91
96
|
this.observer.observe(this.textarea, config);
|
|
92
97
|
}
|
|
98
|
+
if (autoFocus && !disabled) {
|
|
99
|
+
/* Safari & Firefox may silently ignore programmatic focus calls with very short
|
|
100
|
+
delays (<10ms). Using 10ms as a safe threshold based on observed behavior.
|
|
101
|
+
*/
|
|
102
|
+
setTimeout(() => this.textarea.focus(), 10);
|
|
103
|
+
}
|
|
93
104
|
}
|
|
94
105
|
componentDidUpdate(prevProps, prevState) {
|
|
95
106
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputField.js","names":["_core","require","_baseComponents","_ariaProps","_uniqueID","_interopRequireDefault","_tooltip","_dompurify","_react","style","sstyled","insert","InputField","Component","constructor","props","_defineProperty2","default","React","createRef","visibleErrorPopper","keyboardLineIndex","mouseLineIndex","handlePaste","bind","handleChange","handleFocus","handleBlur","handleKeyDown","handleMouseDown","handleMouseMove","handleMouseLeave","handleScroll","handleSelectAll","textarea","createContentEditableElement","observer","MutationObserver","mutationsList","mutation","type","onImmediatelyChange","getValues","textContent","uncontrolledProps","value","linesCount","errorIndex","componentDidMount","containerRef","current","append","handleValueOutChange","config","childList","characterData","subtree","observe","componentDidUpdate","prevProps","prevState","errors","showErrors","disabled","readonly","highlightErrorIndex","lineProcessing","ariaDescribedby","currentValue","join","delimiter","errorsMap","Map","forEach","error","set","lineIndex","childNodes","node","index","HTMLParagraphElement","errorItem","get","setAttribute","dataset","errormessage","errorMessage","removeAttribute","undefined","toggleAriaInvalid","length","handleChangeErrorIndex","isDisabled","removeEventListeners","addEventListeners","state","lines","newValue","newValueTextNode","document","createTextNode","paragraph","item","innerHTML","emptyLineValue","replaceChild","validateLine","setTimeout","newNode","setErrorIndex","recalculateErrors","recalculateLinesCount","asProps","onChangeLineIndex","componentWillUnmount","disconnect","Boolean","popperDescribedId","uid","commonErrorMessage","prevError","currentLineIndex","errorByInteraction","find","e","isCommonError","createElement","id","placeholder","extractedAriaProps","extractAriaProps","key","ariaProp","addEventListener","onChangeLinesCount","listOfNodes","prepareNodesForPaste","replaceChildren","scrollingTimeout","clearTimeout","isScrolling","window","event","element","target","HTMLElement","toggleErrorsPopper","isFocusing","getAttribute","setState","changeTriggerTimeout","rowNode","getNodeFromSelection","preventDefault","validateOn","clipboardData","getData","selection","getSelection","anchorNode","focusNode","anchorOffset","focusOffset","documentPosition","compareDocumentPosition","direction","getSelectionDirection","anchorElement","focusElement","fromOffset","toOffset","Text","parentElement","textNode","position","lastNodeToInsert","before","substring","after","noEmptyLineBefore","trim","noEmptyLineAfter","deleteFromDocument","removeChild","firstNodeToInsert","splice","setSelection","parentNode","console","warn","includes","HTMLDivElement","InputEvent","nodes","firstNode","secondNode","nodeText","firstRow","text","replaceWith","setPosition","HTMLBRElement","maxDeep","offset","firstSymbol","at","lastSymbol","getEmptyParagraph","inputType","isValid","trigger","lineNode","popper","elements","reference","shouldChangePopperTrigger","setPopperTrigger","nodeIndex","emptyParagraph","emptyBr","toggleErrorsPopperByKeyboard","onBlur","valueToChange","linesDelimiters","currentNode","currentRowValue","selectionNode","selectionOffset","newRowValue","row","previousSibling","handleCursorMovement","isDeleteKey","isRangeSelection","prevNode","anchorParagraph","focusParagraph","paragraphs","Array","from","children","isCleaning","ctrlKey","metaKey","render","_ref","_ref2","SInputField","Box","styles","visibleErrorTooltip","__excludeProps","Fragment","cn","boundary","tether","setTrigger","Popper","assignProps","pasteProps","line","trimmedLine","skipEmptyLines","isArray","split","preparedLine","allSpacesRegExp","RegExp","DOMPurify","sanitize","replace","spaceLineValue","push","onErrorsChange","linesCountTimeout","maxLines","overMaxRows","values","timer","toggleErrorsPopperTimeout","targetElement","isInvalidRow","indexOf","newState","forceUpdate","errorsLength","lineValidation","start","end","scrollType","range","createRange","setStart","setEnd","removeAllRanges","addRange","nodeToScroll","scrollIntoView","block","inline","behavior","nextNode","nextSibling","nodeToSetSelection","currentOffset","nodeToCompare","filter","Element","findIndex","handlers","removeEventListener","Node","DOCUMENT_POSITION_PRECEDING","exports","uniqueIDEnhancement","defaultValue","size","minRows","maxRows","defaultShowErrors","defaultErrorIndex","defaultLinesCount"],"sources":["../../../../src/components/InputField/InputField.tsx"],"sourcesContent":["import { Box } from '@semcore/base-components';\nimport type { PopperContext } from '@semcore/base-components';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { extractAriaProps } from '@semcore/core/lib/utils/ariaProps';\nimport uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';\nimport Tooltip from '@semcore/tooltip';\nimport DOMPurify from 'dompurify';\nimport React from 'react';\n\nimport style from './inputField.shadow.css';\nimport type { InputFieldProps, ErrorItem } from './InputField.types';\n\ntype IndexKeys = 'keyboardLineIndex' | 'mouseLineIndex';\n\ntype State = {\n [key in IndexKeys]: number;\n} & {\n visibleErrorPopper: boolean;\n};\n\nclass InputField<T extends string | string[]> extends Component<\n InputFieldProps<T>,\n typeof InputField.enhance,\n {\n value: null;\n linesCount: null;\n errorIndex: null;\n },\n {},\n State\n> {\n static displayName = 'Textarea';\n static style = style;\n\n static enhance = [uniqueIDEnhancement()] as const;\n\n static defaultProps = {\n defaultValue: '',\n size: 'm',\n state: 'normal',\n minRows: 2,\n maxRows: 10,\n defaultShowErrors: false,\n defaultErrorIndex: -1,\n defaultLinesCount: 0,\n };\n\n delimiter = '\\n';\n skipEmptyLines = true;\n emptyLineValue = '';\n spaceLineValue = ' ';\n\n containerRef = React.createRef<HTMLDivElement>();\n textarea: HTMLDivElement;\n\n popper: PopperContext['popper'] | null = null;\n setPopperTrigger: PopperContext['setTrigger'] | null = null;\n\n errorByInteraction: 'keyboard' | 'mouse' | null = null;\n\n changeTriggerTimeout = 0;\n isScrolling = false;\n scrollingTimeout = 0;\n\n toggleErrorsPopperTimeout = 0;\n\n isFocusing = false;\n\n linesCountTimeout = 0;\n\n observer: MutationObserver;\n\n state = {\n visibleErrorPopper: false,\n keyboardLineIndex: -1,\n mouseLineIndex: -1,\n };\n\n constructor(props: InputFieldProps<T>) {\n super(props);\n\n this.handlePaste = this.handlePaste.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelectAll = this.handleSelectAll.bind(this);\n\n this.textarea = this.createContentEditableElement(props);\n\n this.observer = new MutationObserver((mutationsList, observer) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'characterData' || mutation.type === 'childList') {\n this.props.onImmediatelyChange?.(this.getValues(), this.textarea.textContent ?? '');\n }\n }\n });\n }\n\n uncontrolledProps() {\n return {\n value: null,\n linesCount: null,\n errorIndex: null,\n };\n }\n\n componentDidMount() {\n this.containerRef.current?.append(this.textarea);\n\n this.handleValueOutChange();\n\n const config = {\n childList: true,\n characterData: true,\n subtree: true,\n };\n\n if (this.props.onImmediatelyChange) {\n this.observer.observe(this.textarea, config);\n }\n }\n\n componentDidUpdate(prevProps: InputFieldProps<T>, prevState: State): void {\n const {\n value,\n errors,\n errorIndex,\n showErrors,\n disabled,\n readonly,\n highlightErrorIndex,\n lineProcessing,\n ['aria-describedby']: ariaDescribedby = '',\n } = this.props;\n\n if (prevProps.value !== value) {\n const currentValue = this.getValues().join(this.delimiter);\n if (\n typeof value === 'string'\n ? value !== currentValue\n : value.join(this.delimiter) !== currentValue\n ) {\n this.handleValueOutChange();\n }\n }\n\n if (prevProps.showErrors !== showErrors || prevProps.errors !== errors) {\n if (showErrors) {\n const errorsMap = new Map<number, ErrorItem>();\n errors.forEach((error: ErrorItem) => {\n errorsMap.set(error.lineIndex, error);\n });\n\n this.textarea.childNodes.forEach((node, index) => {\n if (node instanceof HTMLParagraphElement) {\n const errorItem = errorsMap.get(index);\n if (errorItem) {\n node.setAttribute('aria-invalid', 'true');\n node.dataset.errormessage = errorItem.errorMessage;\n } else {\n node.removeAttribute('aria-invalid');\n node.dataset.errormessage = undefined;\n }\n }\n });\n }\n\n this.toggleAriaInvalid(showErrors, errors.length);\n\n if (showErrors === false) {\n this.textarea.setAttribute('aria-describedby', ariaDescribedby);\n }\n }\n\n if (prevProps.errorIndex !== errorIndex && highlightErrorIndex) {\n this.handleChangeErrorIndex(errorIndex);\n }\n\n if (prevProps.disabled !== disabled || prevProps.readonly !== readonly) {\n if (this.isDisabled) {\n this.textarea.setAttribute('contenteditable', 'false');\n this.removeEventListeners(this.textarea);\n } else {\n this.textarea.setAttribute('contenteditable', 'true');\n this.addEventListeners(this.textarea);\n }\n\n if (disabled) {\n this.textarea.setAttribute('tabindex', '-1');\n } else {\n this.textarea.setAttribute('tabindex', '0');\n }\n }\n\n const { keyboardLineIndex } = this.state;\n\n if (prevState.keyboardLineIndex !== -1 && prevState.keyboardLineIndex !== keyboardLineIndex) {\n if (lineProcessing) {\n const lines = this.getValues();\n const newValue = lineProcessing(lines[prevState.keyboardLineIndex] ?? '', lines);\n const newValueTextNode = document.createTextNode(newValue);\n const paragraph = this.textarea.childNodes.item(prevState.keyboardLineIndex);\n\n if (paragraph instanceof HTMLParagraphElement) {\n if (newValue === '') {\n paragraph.innerHTML = this.emptyLineValue;\n } else {\n paragraph.replaceChild(newValueTextNode, paragraph.childNodes.item(0));\n }\n }\n\n this.validateLine(paragraph);\n\n setTimeout(() => {\n const newNode = this.textarea.childNodes.item(keyboardLineIndex);\n if (newNode) {\n this.setErrorIndex(newNode);\n }\n }, 0); // need this timeout to update errorIndex to the new (usually empty) line\n }\n\n if (!showErrors) {\n this.recalculateErrors();\n }\n this.recalculateLinesCount();\n this.asProps.onChangeLineIndex(keyboardLineIndex);\n }\n }\n\n componentWillUnmount() {\n this.removeEventListeners(this.textarea);\n\n this.observer.disconnect();\n }\n\n get isDisabled(): boolean {\n const { disabled, readonly } = this.asProps;\n\n return Boolean(disabled || readonly);\n }\n\n get popperDescribedId() {\n const { uid } = this.asProps;\n return `bulk-textarea-${uid}-popper-describedby`;\n }\n\n get errorMessage() {\n const { errors, errorIndex, commonErrorMessage, prevError } = this.asProps;\n const { mouseLineIndex, keyboardLineIndex } = this.state;\n const currentLineIndex =\n this.errorByInteraction === 'keyboard'\n ? keyboardLineIndex\n : this.errorByInteraction === 'mouse'\n ? mouseLineIndex\n : -1;\n let errorItem: ErrorItem | undefined = errors[errorIndex];\n\n if (currentLineIndex !== -1) {\n errorItem = errors.find((e) => e?.lineIndex === currentLineIndex);\n }\n\n const errorMessage =\n errors.length === 0 && !prevError // show any errors only if there are at least one error\n ? null\n : errorItem?.errorMessage ??\n (commonErrorMessage === '' || errors.length === 0\n ? prevError?.errorMessage\n : commonErrorMessage);\n const isCommonError =\n !errorItem?.errorMessage &&\n (commonErrorMessage === '' || errors.length === 0 ? !prevError?.errorMessage : true);\n\n return {\n errorMessage,\n isCommonError,\n };\n }\n\n createContentEditableElement(props: InputFieldProps<T>) {\n const textarea = document.createElement('div');\n textarea.setAttribute('contentEditable', props.disabled || props.readonly ? 'false' : 'true');\n textarea.setAttribute('role', 'textbox');\n textarea.setAttribute('classname', 'editable');\n\n if (props.id) {\n textarea.setAttribute('id', props.id);\n }\n if (props.placeholder) {\n textarea.setAttribute('placeholder', props.placeholder);\n }\n const { extractedAriaProps } = extractAriaProps(props);\n for (const key in extractedAriaProps) {\n const ariaProp: string | undefined = (props as any)[key];\n if (ariaProp) {\n textarea.setAttribute(key, ariaProp);\n }\n }\n\n if (!props.disabled) {\n textarea.setAttribute('tabIndex', '0');\n } else {\n textarea.setAttribute('tabIndex', '-1');\n }\n\n if (!props.disabled && !props.readonly) {\n this.addEventListeners(textarea);\n } else {\n textarea.addEventListener('keydown', this.handleSelectAll.bind(this));\n }\n\n return textarea;\n }\n\n handleValueOutChange() {\n const { value, onChangeLinesCount } = this.props;\n\n if (value === '') {\n this.textarea.textContent = '';\n onChangeLinesCount(0);\n } else {\n const listOfNodes = this.prepareNodesForPaste(value);\n\n this.textarea.replaceChildren(...listOfNodes);\n\n this.recalculateLinesCount();\n this.recalculateErrors();\n }\n }\n\n handleScroll(): void {\n if (this.scrollingTimeout) {\n clearTimeout(this.scrollingTimeout);\n }\n\n this.isScrolling = true;\n\n this.scrollingTimeout = window.setTimeout(() => {\n this.isScrolling = false;\n }, 50);\n }\n\n handleMouseDown(event: MouseEvent): void {\n const element = event.target;\n\n if (element instanceof HTMLElement) {\n // we need to change keyboardLineIndex, because the caret in real on that current row\n this.toggleErrorsPopper('keyboardLineIndex', element);\n\n this.setErrorIndex(element);\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n this.errorByInteraction = 'mouse';\n const element = event.target;\n\n if (element !== this.textarea) {\n if (\n this.isFocusing ||\n (element instanceof HTMLElement && element.getAttribute('aria-invalid') === 'true')\n ) {\n this.toggleErrorsPopper('mouseLineIndex', element);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n }\n\n handleMouseLeave(): void {\n if (this.changeTriggerTimeout) {\n clearTimeout(this.changeTriggerTimeout);\n }\n\n if (this.isFocusing) {\n this.errorByInteraction = 'keyboard';\n const rowNode = this.getNodeFromSelection();\n\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, 0);\n this.setState({ mouseLineIndex: -1 });\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n\n handlePaste(event: ClipboardEvent) {\n event.preventDefault();\n const { validateOn } = this.asProps;\n const value = event.clipboardData?.getData('text/plain');\n const listOfNodes = value ? this.prepareNodesForPaste(value) : [];\n\n if (listOfNodes.length === 0) return;\n\n const selection = document.getSelection();\n\n if (selection?.anchorNode && selection?.focusNode) {\n const anchorOffset = selection.anchorOffset;\n const focusOffset = selection.focusOffset;\n const documentPosition = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n const direction = this.getSelectionDirection();\n\n const anchorElement = direction === 'forward' ? selection.anchorNode : selection.focusNode;\n const focusElement = direction === 'forward' ? selection.focusNode : selection.anchorNode;\n const fromOffset = direction === 'forward' ? anchorOffset : focusOffset;\n const toOffset = direction === 'forward' ? focusOffset : anchorOffset;\n const anchorNode =\n anchorElement instanceof Text ? anchorElement.parentElement : anchorElement;\n const focusNode = focusElement instanceof Text ? focusElement.parentElement : focusElement;\n\n let textNode: ChildNode | null = null;\n let position: number | null = null;\n\n if (focusElement === this.textarea) {\n this.textarea.replaceChildren(...listOfNodes);\n\n const lastNodeToInsert = listOfNodes[listOfNodes.length - 1];\n textNode = lastNodeToInsert.childNodes.item(0);\n position = (lastNodeToInsert.textContent ?? '').length;\n } else if (\n focusNode instanceof HTMLParagraphElement &&\n anchorNode instanceof HTMLParagraphElement\n ) {\n const before = anchorNode?.textContent?.substring(0, fromOffset) ?? '';\n const after = focusNode?.textContent?.substring(toOffset) ?? '';\n\n const noEmptyLineBefore = before.trim() === '' ? '' : before;\n const noEmptyLineAfter = after.trim() === '' ? '' : after;\n\n selection.deleteFromDocument();\n\n if (documentPosition !== 0) {\n this.textarea.removeChild(focusNode);\n }\n\n const firstNodeToInsert = listOfNodes.splice(0, 1)[0];\n const lastNodeToInsert = listOfNodes[listOfNodes.length - 1];\n\n anchorNode.textContent = noEmptyLineBefore + (firstNodeToInsert?.textContent ?? '');\n\n anchorNode.after(...listOfNodes);\n\n if (lastNodeToInsert) {\n lastNodeToInsert.textContent = (lastNodeToInsert.textContent ?? '') + noEmptyLineAfter;\n textNode = lastNodeToInsert.childNodes.item(0);\n position = (lastNodeToInsert.textContent ?? '').length;\n\n this.validateLine(lastNodeToInsert);\n this.setErrorIndex(lastNodeToInsert);\n } else {\n position = (anchorNode.textContent ?? '').length;\n anchorNode.textContent = (anchorNode.textContent ?? '') + noEmptyLineAfter;\n textNode = anchorNode.childNodes.item(0);\n\n this.validateLine(anchorNode);\n this.setErrorIndex(anchorNode);\n }\n }\n\n if (textNode instanceof Text) {\n this.setSelection(textNode, position ?? 1, position ?? 1);\n this.toggleErrorsPopper('keyboardLineIndex', textNode.parentNode);\n } else {\n // eslint-disable-next-line no-console\n console.warn('incorrect child type', textNode, textNode?.parentNode);\n }\n }\n\n this.recalculateLinesCount();\n\n if (validateOn.includes('paste') || this.asProps.showErrors) {\n this.recalculateErrors();\n }\n }\n\n handleChange(event: Event) {\n const target = event.target;\n if (target instanceof HTMLDivElement && event instanceof InputEvent) {\n const nodes = this.textarea.childNodes;\n const firstNode = nodes.item(0);\n const secondNode = nodes.item(1);\n const selection = document.getSelection();\n\n if (firstNode instanceof Text) {\n const nodeText = firstNode.textContent ?? '';\n const firstRow = document.createElement('p');\n const text = document.createTextNode(nodeText);\n firstRow.append(text);\n firstNode.replaceWith(firstRow);\n\n selection?.setPosition(firstRow, nodeText.length);\n } else if (!firstNode || (firstNode instanceof HTMLBRElement && nodes.length === 1)) {\n this.textarea.textContent = '';\n this.setState({ keyboardLineIndex: 0 });\n } else if (firstNode instanceof HTMLParagraphElement && !firstNode.textContent?.trim()) {\n if (nodes.length <= 1 || secondNode instanceof HTMLBRElement) {\n this.textarea.textContent = '';\n this.setState({ keyboardLineIndex: 0 });\n }\n }\n\n let maxDeep = 10;\n let rowNode = selection?.focusNode;\n\n while (rowNode?.parentNode !== this.textarea && maxDeep > 0) {\n rowNode = rowNode?.parentNode;\n maxDeep--;\n }\n\n if (rowNode instanceof HTMLParagraphElement) {\n const childNodes = rowNode.childNodes;\n const textContent = rowNode.textContent ?? '';\n\n if (childNodes.length > 1) {\n const offset = childNodes.item(0).textContent?.length;\n\n rowNode.textContent = textContent;\n\n if (offset) {\n this.setSelection(rowNode.childNodes.item(0), offset, offset);\n }\n }\n\n if (textContent.length > 0) {\n const firstSymbol = textContent.at(0);\n const lastSymbol = textContent.at(textContent.length - 1);\n\n if (\n firstSymbol === this.getEmptyParagraph().textContent ||\n lastSymbol === this.getEmptyParagraph().textContent\n ) {\n let offset: number | null = null;\n if (firstSymbol === this.getEmptyParagraph().textContent) {\n rowNode.textContent = textContent.substring(1);\n offset =\n event.inputType === 'deleteContentBackward' ||\n event.inputType === 'deleteContentForward'\n ? 0\n : rowNode.textContent.length;\n } else if (lastSymbol === this.getEmptyParagraph().textContent) {\n rowNode.textContent = textContent.substring(0, textContent.length - 1);\n offset = rowNode.textContent.length;\n }\n\n if (offset) {\n this.setSelection(rowNode.childNodes.item(0), offset, offset);\n }\n }\n } else if (childNodes.length === 1 && childNodes[0] instanceof HTMLBRElement) {\n rowNode.innerHTML = this.emptyLineValue;\n }\n\n const { errors, showErrors } = this.asProps;\n const isValid = this.validateLine(rowNode);\n this.recalculateErrors();\n this.setErrorIndex(rowNode);\n\n if (!isValid && showErrors) {\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, 0);\n }\n\n const trigger =\n !isValid || (isValid && errors.length === 1 && errors[0].lineNode === rowNode)\n ? rowNode\n : this.textarea;\n\n if (showErrors && this.popper?.current?.state.elements.reference !== trigger) {\n if (this.shouldChangePopperTrigger(trigger)) {\n this.setPopperTrigger?.(trigger);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n } else if (rowNode === null) {\n this.setPopperTrigger?.(this.textarea);\n\n if (selection?.focusNode === this.textarea && this.textarea.childNodes.length > 1) {\n const nodeIndex = selection.focusOffset;\n const emptyParagraph = this.textarea.childNodes.item(nodeIndex - 1);\n const emptyBr = this.textarea.childNodes.item(nodeIndex);\n\n this.textarea.removeChild(emptyBr);\n\n if (emptyParagraph instanceof HTMLParagraphElement) {\n emptyParagraph.innerHTML = this.emptyLineValue;\n }\n\n if (emptyParagraph) {\n this.setSelection(emptyParagraph, 0, 0);\n }\n } else {\n this.setSelection(this.textarea, 0, 0);\n }\n }\n\n this.recalculateLinesCount();\n }\n }\n\n handleFocus() {\n this.isFocusing = true;\n this.errorByInteraction = 'keyboard';\n\n if (this.asProps.showErrors) {\n this.toggleErrorsPopperByKeyboard(150);\n } else {\n this.toggleErrorsPopper('keyboardLineIndex', this.textarea);\n }\n }\n\n handleBlur(event: Event) {\n this.isFocusing = false;\n this.setState({ visibleErrorPopper: false });\n\n const { validateOn, onBlur, value } = this.asProps;\n\n if (validateOn.includes('blur')) {\n this.recalculateErrors();\n }\n\n const valueToChange =\n typeof value === 'string' ? this.getValues().join(this.delimiter) : this.getValues();\n\n onBlur(valueToChange as T, event);\n\n setTimeout(() => {\n this.setState({ keyboardLineIndex: -1 });\n }, 200);\n }\n\n handleKeyDown(event: KeyboardEvent) {\n this.errorByInteraction = 'keyboard';\n const { linesDelimiters } = this.asProps;\n\n const currentNode = this.getNodeFromSelection();\n\n if (event.key === 'Enter' || linesDelimiters?.includes(event.key)) {\n if (currentNode === this.textarea) {\n event.preventDefault();\n }\n if (currentNode instanceof HTMLParagraphElement) {\n const currentRowValue = currentNode.textContent?.trim();\n\n if (!currentRowValue) {\n event.preventDefault();\n } else {\n event.preventDefault();\n const selection = document.getSelection();\n const selectionNode =\n selection?.focusNode instanceof Text\n ? selection.focusNode\n : selection?.focusNode?.childNodes.item(0);\n const selectionOffset = selection?.focusOffset;\n\n let newRowValue = '';\n\n if (\n selectionNode instanceof Text &&\n selectionOffset !== undefined &&\n selectionOffset !== selectionNode.textContent?.length\n ) {\n newRowValue =\n selectionNode.textContent?.substring(selectionOffset) ?? this.emptyLineValue;\n\n if (selectionNode.textContent) {\n selectionNode.textContent = selectionNode.textContent.substring(0, selectionOffset);\n }\n }\n\n if (currentNode.textContent?.trim() === '') {\n currentNode.innerHTML = this.emptyLineValue;\n }\n\n const row = document.createElement('p');\n if (newRowValue) {\n row.textContent = newRowValue;\n } else {\n row.innerHTML = this.emptyLineValue;\n }\n currentNode.after(row);\n\n this.setSelection(row, 0, 0);\n\n this.validateLine(currentNode);\n this.validateLine(row);\n if (currentNode.previousSibling) {\n this.validateLine(currentNode.previousSibling);\n }\n this.setErrorIndex(row);\n\n if (row.textContent?.trim() !== '') {\n this.recalculateLinesCount();\n }\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n }\n } else if (\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight'\n ) {\n if (currentNode instanceof HTMLParagraphElement) {\n this.handleCursorMovement(currentNode, event);\n }\n this.toggleErrorsPopperByKeyboard(200);\n } else if (this.isDeleteKey(event) && currentNode instanceof HTMLParagraphElement) {\n if (currentNode.textContent?.trim() === '' && !this.isRangeSelection()) {\n // Backspace on empty row\n const prevNode = currentNode.previousSibling;\n if (prevNode instanceof HTMLParagraphElement) {\n event.preventDefault();\n this.textarea.removeChild(currentNode);\n this.toggleErrorsPopperByKeyboard(0);\n\n if (\n prevNode.textContent?.trim() === '' &&\n prevNode.previousSibling === null &&\n this.textarea.childNodes.length === 1\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n if (prevNode instanceof HTMLParagraphElement) {\n const text = prevNode.childNodes.item(0);\n const offset = text.textContent?.length ?? 0;\n this.setSelection(text, offset, offset);\n } else {\n // eslint-disable-next-line no-console\n console.warn('incorrect prevNode type', prevNode);\n }\n }\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n } else if (this.isRangeSelection()) {\n const selection = document.getSelection();\n\n const direction = this.getSelectionDirection();\n const anchorElement =\n direction === 'backward' ? selection?.focusNode : selection?.anchorNode;\n const focusElement =\n direction === 'backward' ? selection?.anchorNode : selection?.focusNode;\n const anchorOffset =\n direction === 'backward' ? selection?.focusOffset : selection?.anchorOffset;\n const focusOffset =\n direction === 'backward' ? selection?.anchorOffset : selection?.focusOffset;\n\n // Backspace on selected full row\n if (\n anchorElement === focusElement &&\n anchorOffset === 0 &&\n ((focusElement === currentNode && focusOffset === 1) ||\n focusOffset === currentNode.textContent?.length)\n ) {\n event.preventDefault();\n\n const anchorParagraph = anchorElement?.parentElement;\n const focusParagraph = focusElement?.parentElement;\n const childNodes = this.textarea.childNodes;\n if (\n anchorParagraph === childNodes.item(0) &&\n focusParagraph === childNodes.item(childNodes.length - 1)\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n currentNode.innerHTML = this.emptyLineValue;\n this.validateLine(currentNode);\n }\n\n this.setErrorIndex(currentNode);\n this.recalculateLinesCount();\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n } else if (\n focusElement !== anchorElement &&\n focusElement instanceof Text &&\n anchorElement instanceof Text &&\n focusElement?.textContent === focusElement?.parentNode?.textContent &&\n anchorElement?.textContent === anchorElement?.parentNode?.textContent &&\n anchorOffset === 0 &&\n focusOffset === focusElement?.parentNode?.textContent?.length\n ) { // Backspace on selected few full rows\n event.preventDefault();\n\n const paragraphs = Array.from(this.textarea.children);\n const anchorParagraph = anchorElement.parentElement;\n const focusParagraph = focusElement.parentElement;\n const childNodes = this.textarea.childNodes;\n\n if (\n anchorParagraph === childNodes.item(0) &&\n focusParagraph === childNodes.item(childNodes.length - 1)\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n let isCleaning = false;\n\n for (const paragraph of paragraphs) {\n if (paragraph === anchorParagraph || isCleaning) {\n isCleaning = true;\n\n if (paragraph === focusParagraph) {\n focusParagraph.innerHTML = this.emptyLineValue;\n this.setSelection(focusParagraph, 0, 0);\n break;\n } else {\n this.textarea.removeChild(paragraph);\n }\n }\n }\n\n this.validateLine(currentNode);\n }\n\n this.setErrorIndex(currentNode);\n this.recalculateLinesCount();\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n }\n } else if (event.key === 'z' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n }\n }\n\n render() {\n const SInputField = Root;\n const { styles, showErrors } = this.asProps;\n const { visibleErrorPopper } = this.state;\n\n const { errorMessage, isCommonError } = this.errorMessage;\n const visibleErrorTooltip =\n showErrors && visibleErrorPopper && Boolean(errorMessage) && !this.isDisabled;\n\n const { __excludeProps } = extractAriaProps(this.asProps);\n\n return sstyled(styles)(\n <>\n <Tooltip\n interaction='none'\n placement={isCommonError ? 'right-start' : 'right'}\n visible={visibleErrorTooltip}\n theme='warning'\n offset={isCommonError ? undefined : [0, 26]}\n preventOverflow={{\n boundary: this.containerRef.current ?? undefined,\n tether: false,\n }}\n >\n {({ popper, setTrigger }) => {\n if (!this.popper) {\n this.setPopperTrigger = setTrigger;\n // @ts-ignore\n this.popper = popper;\n }\n\n return <Tooltip.Popper id={this.popperDescribedId}>{errorMessage}</Tooltip.Popper>;\n }}\n </Tooltip>\n <SInputField\n render={Box}\n ref={this.containerRef}\n __excludeProps={['onBlur', 'value', ...__excludeProps]}\n />\n </>,\n );\n }\n\n private prepareNodesForPaste(value: string | string[]): HTMLParagraphElement[] {\n const listOfNodes: HTMLParagraphElement[] = [];\n const { pasteProps } = this.asProps;\n const lineProcessing =\n pasteProps?.lineProcessing ??\n ((line: string) => {\n const trimmedLine = line.trim();\n return trimmedLine === '' ? line : trimmedLine;\n });\n const skipEmptyLines = pasteProps?.skipEmptyLines ?? this.skipEmptyLines;\n const delimiter = pasteProps?.delimiter ?? this.delimiter;\n const lines: string[] = Array.isArray(value) ? value : value.split(delimiter);\n\n lines.forEach((line, index) => {\n const preparedLine = lineProcessing(line, index, lines.length);\n\n if ((preparedLine === '' && skipEmptyLines === false) || preparedLine !== '') {\n const node = document.createElement('p');\n\n if (preparedLine === '') {\n node.innerHTML = this.emptyLineValue;\n } else if (preparedLine.trim() === '') {\n const allSpacesRegExp = new RegExp('\\\\s', 'g');\n node.innerHTML = DOMPurify.sanitize(\n preparedLine.replace(allSpacesRegExp, this.spaceLineValue),\n );\n } else {\n node.append(document.createTextNode(preparedLine));\n }\n\n listOfNodes.push(node);\n\n this.validateLine(node);\n }\n });\n\n return listOfNodes;\n }\n\n private recalculateErrors(): void {\n const errors: ErrorItem[] = [];\n\n this.textarea.childNodes.forEach((node, index) => {\n if (node instanceof HTMLParagraphElement && node.getAttribute('aria-invalid') === 'true') {\n const errorItem = {\n errorMessage: node.dataset.errormessage ?? '',\n lineNode: node,\n lineIndex: index,\n };\n errors.push(errorItem);\n }\n });\n\n this.asProps.onErrorsChange(errors);\n }\n\n private recalculateLinesCount(): void {\n if (this.linesCountTimeout) {\n clearTimeout(this.linesCountTimeout);\n }\n\n this.linesCountTimeout = window.setTimeout(() => {\n let lines = 0;\n const { maxLines, linesCount } = this.asProps;\n\n this.textarea.childNodes.forEach((node) => {\n if (node instanceof HTMLParagraphElement) {\n node.dataset.overMaxRows = 'false';\n\n if (\n node.textContent !== this.getEmptyParagraph().textContent &&\n node.textContent !== ''\n ) {\n lines++;\n\n if (lines > maxLines) {\n node.dataset.overMaxRows = 'true';\n }\n }\n }\n });\n\n if (linesCount !== lines) {\n this.asProps.onChangeLinesCount(lines);\n }\n }, 100);\n }\n\n private getValues(): string[] {\n const values: string[] = [];\n this.textarea.childNodes.forEach((node) => {\n if (node.textContent?.trim() === '') {\n values.push('');\n } else {\n values.push(node.textContent ?? '');\n }\n });\n\n return values;\n }\n\n private shouldChangePopperTrigger(node: HTMLElement): boolean {\n return (\n this.textarea !== node || (this.textarea === node && Boolean(this.asProps.commonErrorMessage))\n );\n }\n\n private toggleErrorsPopperByKeyboard(timer: number) {\n if (this.toggleErrorsPopperTimeout) {\n clearTimeout(this.toggleErrorsPopperTimeout);\n }\n\n if (!this.isScrolling) {\n setTimeout(() => {\n const rowNode = this.getNodeFromSelection();\n\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, timer);\n }, 0);\n } else {\n this.toggleErrorsPopperTimeout = window.setTimeout(() => {\n this.toggleErrorsPopperByKeyboard(timer);\n }, 50);\n }\n }\n\n private toggleErrorsPopper(key: IndexKeys, target?: unknown, timer?: number) {\n if (target instanceof HTMLDivElement || target instanceof HTMLParagraphElement) {\n if (this.changeTriggerTimeout) {\n clearTimeout(this.changeTriggerTimeout);\n }\n\n this.changeTriggerTimeout = window.setTimeout(() => {\n const targetElement = target === this.textarea ? this.getNodeFromSelection() : target;\n\n let lineIndex = -1;\n let isInvalidRow = false;\n\n if (targetElement instanceof HTMLParagraphElement) {\n isInvalidRow = targetElement.getAttribute('aria-invalid') === 'true';\n lineIndex = Array.from(this.textarea.childNodes).indexOf(targetElement);\n } else if (targetElement === this.textarea) {\n lineIndex = 0;\n }\n\n if (targetElement instanceof HTMLElement) {\n this.setState(\n (prevState) => {\n const newState: State = {\n visibleErrorPopper:\n this.isFocusing && Boolean(this.asProps.commonErrorMessage) ? true : isInvalidRow,\n mouseLineIndex: prevState.mouseLineIndex,\n keyboardLineIndex: prevState.keyboardLineIndex,\n };\n\n if (this.isFocusing || (key === 'mouseLineIndex' && isInvalidRow)) {\n newState[key] = lineIndex;\n }\n\n return newState;\n },\n () => {\n this.errorByInteraction = key === 'mouseLineIndex' ? 'mouse' : 'keyboard';\n\n const trigger = isInvalidRow ? targetElement : this.textarea;\n\n if (this.shouldChangePopperTrigger(trigger)) {\n this.setPopperTrigger?.(trigger);\n\n this.forceUpdate();\n }\n },\n );\n }\n }, timer ?? 50);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n\n private toggleAriaInvalid(showErrors: boolean, errorsLength: number): void {\n if (showErrors && errorsLength > 0) {\n this.textarea.setAttribute('aria-describedby', this.popperDescribedId);\n this.textarea.setAttribute('aria-invalid', 'true');\n } else {\n this.textarea.removeAttribute('aria-invalid');\n this.textarea.removeAttribute('aria-describedby');\n }\n }\n\n private handleChangeErrorIndex(errorIndex: number): void {\n const error: ErrorItem | undefined = this.asProps.errors[errorIndex];\n const childNodes = this.textarea.childNodes;\n\n const node = error ? error.lineNode ?? childNodes.item(error.lineIndex) : null;\n const selection = document.getSelection();\n\n if (selection && node instanceof HTMLParagraphElement) {\n this.setState({ visibleErrorPopper: false });\n\n setTimeout(() => {\n const text = node.childNodes.item(0);\n if (text instanceof Text) {\n this.setSelection(text, 0, text.length);\n } else {\n this.setSelection(node, 0, 1);\n }\n }, 150);\n }\n }\n\n private validateLine(node: Node): boolean {\n const { lineValidation } = this.asProps;\n if (lineValidation && node instanceof HTMLElement) {\n const { isValid, errorMessage } = lineValidation(node.textContent ?? '', this.getValues());\n\n if (!isValid) {\n node.setAttribute('aria-invalid', 'true');\n node.dataset.errormessage = errorMessage;\n } else {\n node.removeAttribute('aria-invalid');\n node.dataset.errormessage = undefined;\n }\n\n return isValid;\n }\n\n return true;\n }\n\n private setSelection(\n node: Node,\n start: number,\n end: number,\n scrollType: 'center' | 'nearest' = 'center',\n ): void {\n const selection = document.getSelection();\n const range = document.createRange();\n range.setStart(node, start);\n range.setEnd(node, end);\n\n selection?.removeAllRanges();\n selection?.addRange(range);\n\n const nodeToScroll = node instanceof Text ? node.parentNode : node;\n\n if (nodeToScroll instanceof HTMLElement) {\n nodeToScroll.scrollIntoView({\n block: scrollType,\n inline: scrollType,\n behavior: 'smooth',\n });\n }\n }\n\n private getNodeFromSelection(): Node | null {\n const selection = document.getSelection();\n\n const rowNode =\n selection?.focusNode instanceof Text ? selection.focusNode.parentNode : selection?.focusNode;\n\n return rowNode ?? null;\n }\n\n private handleCursorMovement(currentNode: HTMLParagraphElement, event: KeyboardEvent): void {\n let nextNode: ChildNode | null = null;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n nextNode = currentNode.previousSibling;\n break;\n case 'ArrowDown':\n event.preventDefault();\n nextNode = currentNode.nextSibling;\n break;\n case 'ArrowLeft': {\n if (currentNode.textContent === this.getEmptyParagraph().textContent) {\n event.preventDefault();\n nextNode = currentNode.previousSibling;\n }\n break;\n }\n case 'ArrowRight': {\n if (currentNode.textContent === this.getEmptyParagraph().textContent) {\n event.preventDefault();\n nextNode = currentNode.nextSibling;\n }\n }\n }\n\n if (nextNode instanceof HTMLParagraphElement) {\n const selection = document.getSelection();\n const firstNode = nextNode.childNodes.item(0);\n const nodeToSetSelection = firstNode instanceof Text ? firstNode : nextNode;\n const textNode = nextNode.textContent?.trim() ?? '';\n const currentOffset = selection?.focusOffset ?? 0;\n let offset = currentOffset <= textNode.length ? currentOffset : textNode.length;\n\n // it only works if node is empty, that's why here we could set 0 or node.length\n if (event.key === 'ArrowLeft') {\n offset = textNode.length;\n } else if (event.key === 'ArrowRight') {\n offset = 0;\n }\n\n this.setSelection(nodeToSetSelection, offset, offset, 'nearest');\n }\n }\n\n private setErrorIndex(nodeToCompare: Node): void {\n const errorIndex = Array.from(this.textarea.childNodes)\n .filter((node) => {\n return node instanceof Element && node.getAttribute('aria-invalid') === 'true';\n })\n .findIndex((node) => {\n return node === nodeToCompare;\n });\n\n this.handlers.errorIndex(errorIndex);\n }\n\n private isDeleteKey(event: KeyboardEvent): boolean {\n return event.key === 'Backspace' || (event.key === 'x' && (event.ctrlKey || event.metaKey));\n }\n\n private getEmptyParagraph() {\n const element = document.createElement('p');\n\n element.innerHTML = this.emptyLineValue;\n\n return element;\n }\n\n private addEventListeners(textarea: HTMLElement) {\n textarea.addEventListener('paste', this.handlePaste);\n textarea.addEventListener('input', this.handleChange);\n textarea.addEventListener('focus', this.handleFocus);\n textarea.addEventListener('blur', this.handleBlur);\n textarea.addEventListener('keydown', this.handleKeyDown);\n textarea.addEventListener('mousedown', this.handleMouseDown);\n textarea.addEventListener('mousemove', this.handleMouseMove);\n textarea.addEventListener('mouseleave', this.handleMouseLeave);\n textarea.addEventListener('scroll', this.handleScroll);\n\n textarea.removeEventListener('keydown', this.handleSelectAll);\n }\n\n private removeEventListeners(textarea: HTMLElement) {\n textarea.removeEventListener('paste', this.handlePaste);\n textarea.removeEventListener('input', this.handleChange);\n textarea.removeEventListener('focus', this.handleFocus);\n textarea.removeEventListener('blur', this.handleBlur);\n textarea.removeEventListener('keydown', this.handleKeyDown);\n textarea.removeEventListener('mousedown', this.handleMouseDown);\n textarea.removeEventListener('mousemove', this.handleMouseMove);\n textarea.removeEventListener('mouseleave', this.handleMouseLeave);\n textarea.removeEventListener('scroll', this.handleScroll);\n\n textarea.addEventListener('keydown', this.handleSelectAll);\n }\n\n private handleSelectAll(event: KeyboardEvent) {\n if (event.key === 'a' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n\n const node = event.target;\n if (node instanceof HTMLElement && node === this.textarea) {\n this.setSelection(node, 0, node.childNodes.length);\n }\n }\n }\n\n private isRangeSelection(): boolean {\n const selection = document.getSelection();\n\n return (\n selection?.focusNode !== selection?.anchorNode ||\n selection?.focusOffset !== selection?.anchorOffset\n );\n }\n\n private getSelectionDirection(): 'forward' | 'backward' | null {\n const selection = document.getSelection();\n\n if (selection?.anchorNode && selection?.focusNode) {\n const documentPosition = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n\n if (\n (documentPosition === 0 && selection.anchorOffset > selection.focusOffset) || // if nodes are the same\n documentPosition === Node.DOCUMENT_POSITION_PRECEDING\n ) {\n return 'backward';\n }\n\n return 'forward';\n }\n\n return null;\n }\n}\n\nexport { InputField };\nexport type { InputFieldProps, ErrorItem };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"InputField.js","names":["_core","require","_baseComponents","_ariaProps","_uniqueID","_interopRequireDefault","_tooltip","_dompurify","_react","style","sstyled","insert","InputField","Component","constructor","props","_defineProperty2","default","React","createRef","visibleErrorPopper","keyboardLineIndex","mouseLineIndex","handlePaste","bind","handleChange","handleFocus","handleBlur","handleKeyDown","handleMouseDown","handleMouseMove","handleMouseLeave","handleScroll","handleSelectAll","textarea","createContentEditableElement","observer","MutationObserver","mutationsList","mutation","type","onImmediatelyChange","getValues","textContent","uncontrolledProps","value","linesCount","errorIndex","componentDidMount","autoFocus","disabled","readonly","asProps","containerRef","current","append","handleValueOutChange","config","childList","characterData","subtree","observe","setTimeout","focus","componentDidUpdate","prevProps","prevState","errors","showErrors","highlightErrorIndex","lineProcessing","ariaDescribedby","currentValue","join","delimiter","errorsMap","Map","forEach","error","set","lineIndex","childNodes","node","index","HTMLParagraphElement","errorItem","get","setAttribute","dataset","errormessage","errorMessage","removeAttribute","undefined","toggleAriaInvalid","length","handleChangeErrorIndex","isDisabled","removeEventListeners","addEventListeners","state","lines","newValue","newValueTextNode","document","createTextNode","paragraph","item","innerHTML","emptyLineValue","replaceChild","validateLine","newNode","setErrorIndex","recalculateErrors","recalculateLinesCount","onChangeLineIndex","componentWillUnmount","disconnect","Boolean","popperDescribedId","uid","commonErrorMessage","prevError","currentLineIndex","errorByInteraction","find","e","isCommonError","createElement","id","placeholder","extractedAriaProps","extractAriaProps","key","ariaProp","addEventListener","onChangeLinesCount","listOfNodes","prepareNodesForPaste","replaceChildren","scrollingTimeout","clearTimeout","isScrolling","window","event","element","target","HTMLElement","toggleErrorsPopper","isFocusing","getAttribute","setState","changeTriggerTimeout","rowNode","getNodeFromSelection","preventDefault","validateOn","clipboardData","getData","selection","getSelection","anchorNode","focusNode","anchorOffset","focusOffset","documentPosition","compareDocumentPosition","direction","getSelectionDirection","anchorElement","focusElement","fromOffset","toOffset","Text","parentElement","textNode","position","lastNodeToInsert","before","substring","after","noEmptyLineBefore","trim","noEmptyLineAfter","deleteFromDocument","removeChild","firstNodeToInsert","splice","setSelection","parentNode","console","warn","includes","HTMLDivElement","InputEvent","nodes","firstNode","secondNode","nodeText","firstRow","text","replaceWith","setPosition","HTMLBRElement","maxDeep","offset","firstSymbol","at","lastSymbol","getEmptyParagraph","inputType","isValid","trigger","lineNode","popper","elements","reference","shouldChangePopperTrigger","setPopperTrigger","nodeIndex","emptyParagraph","emptyBr","toggleErrorsPopperByKeyboard","onBlur","valueToChange","linesDelimiters","currentNode","currentRowValue","selectionNode","selectionOffset","newRowValue","row","previousSibling","handleCursorMovement","isDeleteKey","isRangeSelection","prevNode","anchorParagraph","focusParagraph","paragraphs","Array","from","children","isCleaning","ctrlKey","metaKey","render","_ref","_ref2","SInputField","Box","styles","visibleErrorTooltip","__excludeProps","Fragment","cn","boundary","tether","setTrigger","Popper","assignProps","pasteProps","line","trimmedLine","skipEmptyLines","isArray","split","preparedLine","allSpacesRegExp","RegExp","DOMPurify","sanitize","replace","spaceLineValue","push","onErrorsChange","linesCountTimeout","maxLines","overMaxRows","values","timer","toggleErrorsPopperTimeout","targetElement","isInvalidRow","indexOf","newState","forceUpdate","errorsLength","lineValidation","start","end","scrollType","range","createRange","setStart","setEnd","removeAllRanges","addRange","nodeToScroll","scrollIntoView","block","inline","behavior","nextNode","nextSibling","nodeToSetSelection","currentOffset","nodeToCompare","filter","Element","findIndex","handlers","removeEventListener","Node","DOCUMENT_POSITION_PRECEDING","exports","uniqueIDEnhancement","defaultValue","size","minRows","maxRows","defaultShowErrors","defaultErrorIndex","defaultLinesCount"],"sources":["../../../../src/components/InputField/InputField.tsx"],"sourcesContent":["import { Box } from '@semcore/base-components';\nimport type { PopperContext } from '@semcore/base-components';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { extractAriaProps } from '@semcore/core/lib/utils/ariaProps';\nimport uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';\nimport Tooltip from '@semcore/tooltip';\nimport DOMPurify from 'dompurify';\nimport React from 'react';\n\nimport style from './inputField.shadow.css';\nimport type { InputFieldProps, ErrorItem } from './InputField.types';\n\ntype IndexKeys = 'keyboardLineIndex' | 'mouseLineIndex';\n\ntype State = {\n [key in IndexKeys]: number;\n} & {\n visibleErrorPopper: boolean;\n};\n\nclass InputField<T extends string | string[]> extends Component<\n InputFieldProps<T>,\n typeof InputField.enhance,\n {\n value: null;\n linesCount: null;\n errorIndex: null;\n },\n {},\n State\n> {\n static displayName = 'Textarea';\n static style = style;\n\n static enhance = [uniqueIDEnhancement()] as const;\n\n static defaultProps = {\n defaultValue: '',\n size: 'm',\n state: 'normal',\n minRows: 2,\n maxRows: 10,\n defaultShowErrors: false,\n defaultErrorIndex: -1,\n defaultLinesCount: 0,\n };\n\n delimiter = '\\n';\n skipEmptyLines = true;\n emptyLineValue = '';\n spaceLineValue = ' ';\n\n containerRef = React.createRef<HTMLDivElement>();\n textarea: HTMLDivElement;\n\n popper: PopperContext['popper'] | null = null;\n setPopperTrigger: PopperContext['setTrigger'] | null = null;\n\n errorByInteraction: 'keyboard' | 'mouse' | null = null;\n\n changeTriggerTimeout = 0;\n isScrolling = false;\n scrollingTimeout = 0;\n\n toggleErrorsPopperTimeout = 0;\n\n isFocusing = false;\n\n linesCountTimeout = 0;\n\n observer: MutationObserver;\n\n state = {\n visibleErrorPopper: false,\n keyboardLineIndex: -1,\n mouseLineIndex: -1,\n };\n\n constructor(props: InputFieldProps<T>) {\n super(props);\n\n this.handlePaste = this.handlePaste.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelectAll = this.handleSelectAll.bind(this);\n\n this.textarea = this.createContentEditableElement(props);\n\n this.observer = new MutationObserver((mutationsList, observer) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'characterData' || mutation.type === 'childList') {\n this.props.onImmediatelyChange?.(this.getValues(), this.textarea.textContent ?? '');\n }\n }\n });\n }\n\n uncontrolledProps() {\n return {\n value: null,\n linesCount: null,\n errorIndex: null,\n };\n }\n\n componentDidMount() {\n const { autoFocus, disabled, readonly } = this.asProps;\n\n this.containerRef.current?.append(this.textarea);\n\n this.handleValueOutChange();\n\n const config = {\n childList: true,\n characterData: true,\n subtree: true,\n };\n\n if (this.props.onImmediatelyChange) {\n this.observer.observe(this.textarea, config);\n }\n\n if (autoFocus && !disabled) {\n /* Safari & Firefox may silently ignore programmatic focus calls with very short\n delays (<10ms). Using 10ms as a safe threshold based on observed behavior.\n */\n setTimeout(() => this.textarea.focus(), 10);\n }\n }\n\n componentDidUpdate(prevProps: InputFieldProps<T>, prevState: State): void {\n const {\n value,\n errors,\n errorIndex,\n showErrors,\n disabled,\n readonly,\n highlightErrorIndex,\n lineProcessing,\n ['aria-describedby']: ariaDescribedby = '',\n } = this.props;\n\n if (prevProps.value !== value) {\n const currentValue = this.getValues().join(this.delimiter);\n if (\n typeof value === 'string'\n ? value !== currentValue\n : value.join(this.delimiter) !== currentValue\n ) {\n this.handleValueOutChange();\n }\n }\n\n if (prevProps.showErrors !== showErrors || prevProps.errors !== errors) {\n if (showErrors) {\n const errorsMap = new Map<number, ErrorItem>();\n errors.forEach((error: ErrorItem) => {\n errorsMap.set(error.lineIndex, error);\n });\n\n this.textarea.childNodes.forEach((node, index) => {\n if (node instanceof HTMLParagraphElement) {\n const errorItem = errorsMap.get(index);\n if (errorItem) {\n node.setAttribute('aria-invalid', 'true');\n node.dataset.errormessage = errorItem.errorMessage;\n } else {\n node.removeAttribute('aria-invalid');\n node.dataset.errormessage = undefined;\n }\n }\n });\n }\n\n this.toggleAriaInvalid(showErrors, errors.length);\n\n if (showErrors === false) {\n this.textarea.setAttribute('aria-describedby', ariaDescribedby);\n }\n }\n\n if (prevProps.errorIndex !== errorIndex && highlightErrorIndex) {\n this.handleChangeErrorIndex(errorIndex);\n }\n\n if (prevProps.disabled !== disabled || prevProps.readonly !== readonly) {\n if (this.isDisabled) {\n this.textarea.setAttribute('contenteditable', 'false');\n this.removeEventListeners(this.textarea);\n } else {\n this.textarea.setAttribute('contenteditable', 'true');\n this.addEventListeners(this.textarea);\n }\n\n if (disabled) {\n this.textarea.setAttribute('tabindex', '-1');\n } else {\n this.textarea.setAttribute('tabindex', '0');\n }\n }\n\n const { keyboardLineIndex } = this.state;\n\n if (prevState.keyboardLineIndex !== -1 && prevState.keyboardLineIndex !== keyboardLineIndex) {\n if (lineProcessing) {\n const lines = this.getValues();\n const newValue = lineProcessing(lines[prevState.keyboardLineIndex] ?? '', lines);\n const newValueTextNode = document.createTextNode(newValue);\n const paragraph = this.textarea.childNodes.item(prevState.keyboardLineIndex);\n\n if (paragraph instanceof HTMLParagraphElement) {\n if (newValue === '') {\n paragraph.innerHTML = this.emptyLineValue;\n } else {\n paragraph.replaceChild(newValueTextNode, paragraph.childNodes.item(0));\n }\n }\n\n this.validateLine(paragraph);\n\n setTimeout(() => {\n const newNode = this.textarea.childNodes.item(keyboardLineIndex);\n if (newNode) {\n this.setErrorIndex(newNode);\n }\n }, 0); // need this timeout to update errorIndex to the new (usually empty) line\n }\n\n if (!showErrors) {\n this.recalculateErrors();\n }\n this.recalculateLinesCount();\n this.asProps.onChangeLineIndex(keyboardLineIndex);\n }\n }\n\n componentWillUnmount() {\n this.removeEventListeners(this.textarea);\n\n this.observer.disconnect();\n }\n\n get isDisabled(): boolean {\n const { disabled, readonly } = this.asProps;\n\n return Boolean(disabled || readonly);\n }\n\n get popperDescribedId() {\n const { uid } = this.asProps;\n return `bulk-textarea-${uid}-popper-describedby`;\n }\n\n get errorMessage() {\n const { errors, errorIndex, commonErrorMessage, prevError } = this.asProps;\n const { mouseLineIndex, keyboardLineIndex } = this.state;\n const currentLineIndex =\n this.errorByInteraction === 'keyboard'\n ? keyboardLineIndex\n : this.errorByInteraction === 'mouse'\n ? mouseLineIndex\n : -1;\n let errorItem: ErrorItem | undefined = errors[errorIndex];\n\n if (currentLineIndex !== -1) {\n errorItem = errors.find((e) => e?.lineIndex === currentLineIndex);\n }\n\n const errorMessage =\n errors.length === 0 && !prevError // show any errors only if there are at least one error\n ? null\n : errorItem?.errorMessage ??\n (commonErrorMessage === '' || errors.length === 0\n ? prevError?.errorMessage\n : commonErrorMessage);\n const isCommonError =\n !errorItem?.errorMessage &&\n (commonErrorMessage === '' || errors.length === 0 ? !prevError?.errorMessage : true);\n\n return {\n errorMessage,\n isCommonError,\n };\n }\n\n createContentEditableElement(props: InputFieldProps<T>) {\n const textarea = document.createElement('div');\n textarea.setAttribute('contentEditable', props.disabled || props.readonly ? 'false' : 'true');\n textarea.setAttribute('role', 'textbox');\n textarea.setAttribute('classname', 'editable');\n\n if (props.id) {\n textarea.setAttribute('id', props.id);\n }\n if (props.placeholder) {\n textarea.setAttribute('placeholder', props.placeholder);\n }\n const { extractedAriaProps } = extractAriaProps(props);\n for (const key in extractedAriaProps) {\n const ariaProp: string | undefined = (props as any)[key];\n if (ariaProp) {\n textarea.setAttribute(key, ariaProp);\n }\n }\n\n if (!props.disabled) {\n textarea.setAttribute('tabIndex', '0');\n } else {\n textarea.setAttribute('tabIndex', '-1');\n }\n\n if (!props.disabled && !props.readonly) {\n this.addEventListeners(textarea);\n } else {\n textarea.addEventListener('keydown', this.handleSelectAll.bind(this));\n }\n\n return textarea;\n }\n\n handleValueOutChange() {\n const { value, onChangeLinesCount } = this.props;\n\n if (value === '') {\n this.textarea.textContent = '';\n onChangeLinesCount(0);\n } else {\n const listOfNodes = this.prepareNodesForPaste(value);\n\n this.textarea.replaceChildren(...listOfNodes);\n\n this.recalculateLinesCount();\n this.recalculateErrors();\n }\n }\n\n handleScroll(): void {\n if (this.scrollingTimeout) {\n clearTimeout(this.scrollingTimeout);\n }\n\n this.isScrolling = true;\n\n this.scrollingTimeout = window.setTimeout(() => {\n this.isScrolling = false;\n }, 50);\n }\n\n handleMouseDown(event: MouseEvent): void {\n const element = event.target;\n\n if (element instanceof HTMLElement) {\n // we need to change keyboardLineIndex, because the caret in real on that current row\n this.toggleErrorsPopper('keyboardLineIndex', element);\n\n this.setErrorIndex(element);\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n this.errorByInteraction = 'mouse';\n const element = event.target;\n\n if (element !== this.textarea) {\n if (\n this.isFocusing ||\n (element instanceof HTMLElement && element.getAttribute('aria-invalid') === 'true')\n ) {\n this.toggleErrorsPopper('mouseLineIndex', element);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n }\n\n handleMouseLeave(): void {\n if (this.changeTriggerTimeout) {\n clearTimeout(this.changeTriggerTimeout);\n }\n\n if (this.isFocusing) {\n this.errorByInteraction = 'keyboard';\n const rowNode = this.getNodeFromSelection();\n\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, 0);\n this.setState({ mouseLineIndex: -1 });\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n\n handlePaste(event: ClipboardEvent) {\n event.preventDefault();\n const { validateOn } = this.asProps;\n const value = event.clipboardData?.getData('text/plain');\n const listOfNodes = value ? this.prepareNodesForPaste(value) : [];\n\n if (listOfNodes.length === 0) return;\n\n const selection = document.getSelection();\n\n if (selection?.anchorNode && selection?.focusNode) {\n const anchorOffset = selection.anchorOffset;\n const focusOffset = selection.focusOffset;\n const documentPosition = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n const direction = this.getSelectionDirection();\n\n const anchorElement = direction === 'forward' ? selection.anchorNode : selection.focusNode;\n const focusElement = direction === 'forward' ? selection.focusNode : selection.anchorNode;\n const fromOffset = direction === 'forward' ? anchorOffset : focusOffset;\n const toOffset = direction === 'forward' ? focusOffset : anchorOffset;\n const anchorNode =\n anchorElement instanceof Text ? anchorElement.parentElement : anchorElement;\n const focusNode = focusElement instanceof Text ? focusElement.parentElement : focusElement;\n\n let textNode: ChildNode | null = null;\n let position: number | null = null;\n\n if (focusElement === this.textarea) {\n this.textarea.replaceChildren(...listOfNodes);\n\n const lastNodeToInsert = listOfNodes[listOfNodes.length - 1];\n textNode = lastNodeToInsert.childNodes.item(0);\n position = (lastNodeToInsert.textContent ?? '').length;\n } else if (\n focusNode instanceof HTMLParagraphElement &&\n anchorNode instanceof HTMLParagraphElement\n ) {\n const before = anchorNode?.textContent?.substring(0, fromOffset) ?? '';\n const after = focusNode?.textContent?.substring(toOffset) ?? '';\n\n const noEmptyLineBefore = before.trim() === '' ? '' : before;\n const noEmptyLineAfter = after.trim() === '' ? '' : after;\n\n selection.deleteFromDocument();\n\n if (documentPosition !== 0) {\n this.textarea.removeChild(focusNode);\n }\n\n const firstNodeToInsert = listOfNodes.splice(0, 1)[0];\n const lastNodeToInsert = listOfNodes[listOfNodes.length - 1];\n\n anchorNode.textContent = noEmptyLineBefore + (firstNodeToInsert?.textContent ?? '');\n\n anchorNode.after(...listOfNodes);\n\n if (lastNodeToInsert) {\n lastNodeToInsert.textContent = (lastNodeToInsert.textContent ?? '') + noEmptyLineAfter;\n textNode = lastNodeToInsert.childNodes.item(0);\n position = (lastNodeToInsert.textContent ?? '').length;\n\n this.validateLine(lastNodeToInsert);\n this.setErrorIndex(lastNodeToInsert);\n } else {\n position = (anchorNode.textContent ?? '').length;\n anchorNode.textContent = (anchorNode.textContent ?? '') + noEmptyLineAfter;\n textNode = anchorNode.childNodes.item(0);\n\n this.validateLine(anchorNode);\n this.setErrorIndex(anchorNode);\n }\n }\n\n if (textNode instanceof Text) {\n this.setSelection(textNode, position ?? 1, position ?? 1);\n this.toggleErrorsPopper('keyboardLineIndex', textNode.parentNode);\n } else {\n // eslint-disable-next-line no-console\n console.warn('incorrect child type', textNode, textNode?.parentNode);\n }\n }\n\n this.recalculateLinesCount();\n\n if (validateOn.includes('paste') || this.asProps.showErrors) {\n this.recalculateErrors();\n }\n }\n\n handleChange(event: Event) {\n const target = event.target;\n if (target instanceof HTMLDivElement && event instanceof InputEvent) {\n const nodes = this.textarea.childNodes;\n const firstNode = nodes.item(0);\n const secondNode = nodes.item(1);\n const selection = document.getSelection();\n\n if (firstNode instanceof Text) {\n const nodeText = firstNode.textContent ?? '';\n const firstRow = document.createElement('p');\n const text = document.createTextNode(nodeText);\n firstRow.append(text);\n firstNode.replaceWith(firstRow);\n\n selection?.setPosition(firstRow, nodeText.length);\n } else if (!firstNode || (firstNode instanceof HTMLBRElement && nodes.length === 1)) {\n this.textarea.textContent = '';\n this.setState({ keyboardLineIndex: 0 });\n } else if (firstNode instanceof HTMLParagraphElement && !firstNode.textContent?.trim()) {\n if (nodes.length <= 1 || secondNode instanceof HTMLBRElement) {\n this.textarea.textContent = '';\n this.setState({ keyboardLineIndex: 0 });\n }\n }\n\n let maxDeep = 10;\n let rowNode = selection?.focusNode;\n\n while (rowNode?.parentNode !== this.textarea && maxDeep > 0) {\n rowNode = rowNode?.parentNode;\n maxDeep--;\n }\n\n if (rowNode instanceof HTMLParagraphElement) {\n const childNodes = rowNode.childNodes;\n const textContent = rowNode.textContent ?? '';\n\n if (childNodes.length > 1) {\n const offset = childNodes.item(0).textContent?.length;\n\n rowNode.textContent = textContent;\n\n if (offset) {\n this.setSelection(rowNode.childNodes.item(0), offset, offset);\n }\n }\n\n if (textContent.length > 0) {\n const firstSymbol = textContent.at(0);\n const lastSymbol = textContent.at(textContent.length - 1);\n\n if (\n firstSymbol === this.getEmptyParagraph().textContent ||\n lastSymbol === this.getEmptyParagraph().textContent\n ) {\n let offset: number | null = null;\n if (firstSymbol === this.getEmptyParagraph().textContent) {\n rowNode.textContent = textContent.substring(1);\n offset =\n event.inputType === 'deleteContentBackward' ||\n event.inputType === 'deleteContentForward'\n ? 0\n : rowNode.textContent.length;\n } else if (lastSymbol === this.getEmptyParagraph().textContent) {\n rowNode.textContent = textContent.substring(0, textContent.length - 1);\n offset = rowNode.textContent.length;\n }\n\n if (offset) {\n this.setSelection(rowNode.childNodes.item(0), offset, offset);\n }\n }\n } else if (childNodes.length === 1 && childNodes[0] instanceof HTMLBRElement) {\n rowNode.innerHTML = this.emptyLineValue;\n }\n\n const { errors, showErrors } = this.asProps;\n const isValid = this.validateLine(rowNode);\n this.recalculateErrors();\n this.setErrorIndex(rowNode);\n\n if (!isValid && showErrors) {\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, 0);\n }\n\n const trigger =\n !isValid || (isValid && errors.length === 1 && errors[0].lineNode === rowNode)\n ? rowNode\n : this.textarea;\n\n if (showErrors && this.popper?.current?.state.elements.reference !== trigger) {\n if (this.shouldChangePopperTrigger(trigger)) {\n this.setPopperTrigger?.(trigger);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n } else if (rowNode === null) {\n this.setPopperTrigger?.(this.textarea);\n\n if (selection?.focusNode === this.textarea && this.textarea.childNodes.length > 1) {\n const nodeIndex = selection.focusOffset;\n const emptyParagraph = this.textarea.childNodes.item(nodeIndex - 1);\n const emptyBr = this.textarea.childNodes.item(nodeIndex);\n\n this.textarea.removeChild(emptyBr);\n\n if (emptyParagraph instanceof HTMLParagraphElement) {\n emptyParagraph.innerHTML = this.emptyLineValue;\n }\n\n if (emptyParagraph) {\n this.setSelection(emptyParagraph, 0, 0);\n }\n } else {\n this.setSelection(this.textarea, 0, 0);\n }\n }\n\n this.recalculateLinesCount();\n }\n }\n\n handleFocus() {\n this.isFocusing = true;\n this.errorByInteraction = 'keyboard';\n\n if (this.asProps.showErrors) {\n this.toggleErrorsPopperByKeyboard(150);\n } else {\n this.toggleErrorsPopper('keyboardLineIndex', this.textarea);\n }\n }\n\n handleBlur(event: Event) {\n this.isFocusing = false;\n this.setState({ visibleErrorPopper: false });\n\n const { validateOn, onBlur, value } = this.asProps;\n\n if (validateOn.includes('blur')) {\n this.recalculateErrors();\n }\n\n const valueToChange =\n typeof value === 'string' ? this.getValues().join(this.delimiter) : this.getValues();\n\n onBlur(valueToChange as T, event);\n\n setTimeout(() => {\n this.setState({ keyboardLineIndex: -1 });\n }, 200);\n }\n\n handleKeyDown(event: KeyboardEvent) {\n this.errorByInteraction = 'keyboard';\n const { linesDelimiters } = this.asProps;\n\n const currentNode = this.getNodeFromSelection();\n\n if (event.key === 'Enter' || linesDelimiters?.includes(event.key)) {\n if (currentNode === this.textarea) {\n event.preventDefault();\n }\n if (currentNode instanceof HTMLParagraphElement) {\n const currentRowValue = currentNode.textContent?.trim();\n\n if (!currentRowValue) {\n event.preventDefault();\n } else {\n event.preventDefault();\n const selection = document.getSelection();\n const selectionNode =\n selection?.focusNode instanceof Text\n ? selection.focusNode\n : selection?.focusNode?.childNodes.item(0);\n const selectionOffset = selection?.focusOffset;\n\n let newRowValue = '';\n\n if (\n selectionNode instanceof Text &&\n selectionOffset !== undefined &&\n selectionOffset !== selectionNode.textContent?.length\n ) {\n newRowValue =\n selectionNode.textContent?.substring(selectionOffset) ?? this.emptyLineValue;\n\n if (selectionNode.textContent) {\n selectionNode.textContent = selectionNode.textContent.substring(0, selectionOffset);\n }\n }\n\n if (currentNode.textContent?.trim() === '') {\n currentNode.innerHTML = this.emptyLineValue;\n }\n\n const row = document.createElement('p');\n if (newRowValue) {\n row.textContent = newRowValue;\n } else {\n row.innerHTML = this.emptyLineValue;\n }\n currentNode.after(row);\n\n this.setSelection(row, 0, 0);\n\n this.validateLine(currentNode);\n this.validateLine(row);\n if (currentNode.previousSibling) {\n this.validateLine(currentNode.previousSibling);\n }\n this.setErrorIndex(row);\n\n if (row.textContent?.trim() !== '') {\n this.recalculateLinesCount();\n }\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n }\n } else if (\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight'\n ) {\n if (currentNode instanceof HTMLParagraphElement) {\n this.handleCursorMovement(currentNode, event);\n }\n this.toggleErrorsPopperByKeyboard(200);\n } else if (this.isDeleteKey(event) && currentNode instanceof HTMLParagraphElement) {\n if (currentNode.textContent?.trim() === '' && !this.isRangeSelection()) {\n // Backspace on empty row\n const prevNode = currentNode.previousSibling;\n if (prevNode instanceof HTMLParagraphElement) {\n event.preventDefault();\n this.textarea.removeChild(currentNode);\n this.toggleErrorsPopperByKeyboard(0);\n\n if (\n prevNode.textContent?.trim() === '' &&\n prevNode.previousSibling === null &&\n this.textarea.childNodes.length === 1\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n if (prevNode instanceof HTMLParagraphElement) {\n const text = prevNode.childNodes.item(0);\n const offset = text.textContent?.length ?? 0;\n this.setSelection(text, offset, offset);\n } else {\n // eslint-disable-next-line no-console\n console.warn('incorrect prevNode type', prevNode);\n }\n }\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n } else if (this.isRangeSelection()) {\n const selection = document.getSelection();\n\n const direction = this.getSelectionDirection();\n const anchorElement =\n direction === 'backward' ? selection?.focusNode : selection?.anchorNode;\n const focusElement =\n direction === 'backward' ? selection?.anchorNode : selection?.focusNode;\n const anchorOffset =\n direction === 'backward' ? selection?.focusOffset : selection?.anchorOffset;\n const focusOffset =\n direction === 'backward' ? selection?.anchorOffset : selection?.focusOffset;\n\n // Backspace on selected full row\n if (\n anchorElement === focusElement &&\n anchorOffset === 0 &&\n ((focusElement === currentNode && focusOffset === 1) ||\n focusOffset === currentNode.textContent?.length)\n ) {\n event.preventDefault();\n\n const anchorParagraph = anchorElement?.parentElement;\n const focusParagraph = focusElement?.parentElement;\n const childNodes = this.textarea.childNodes;\n if (\n anchorParagraph === childNodes.item(0) &&\n focusParagraph === childNodes.item(childNodes.length - 1)\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n currentNode.innerHTML = this.emptyLineValue;\n this.validateLine(currentNode);\n }\n\n this.setErrorIndex(currentNode);\n this.recalculateLinesCount();\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n } else if (\n focusElement !== anchorElement &&\n focusElement instanceof Text &&\n anchorElement instanceof Text &&\n focusElement?.textContent === focusElement?.parentNode?.textContent &&\n anchorElement?.textContent === anchorElement?.parentNode?.textContent &&\n anchorOffset === 0 &&\n focusOffset === focusElement?.parentNode?.textContent?.length\n ) { // Backspace on selected few full rows\n event.preventDefault();\n\n const paragraphs = Array.from(this.textarea.children);\n const anchorParagraph = anchorElement.parentElement;\n const focusParagraph = focusElement.parentElement;\n const childNodes = this.textarea.childNodes;\n\n if (\n anchorParagraph === childNodes.item(0) &&\n focusParagraph === childNodes.item(childNodes.length - 1)\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n let isCleaning = false;\n\n for (const paragraph of paragraphs) {\n if (paragraph === anchorParagraph || isCleaning) {\n isCleaning = true;\n\n if (paragraph === focusParagraph) {\n focusParagraph.innerHTML = this.emptyLineValue;\n this.setSelection(focusParagraph, 0, 0);\n break;\n } else {\n this.textarea.removeChild(paragraph);\n }\n }\n }\n\n this.validateLine(currentNode);\n }\n\n this.setErrorIndex(currentNode);\n this.recalculateLinesCount();\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n }\n } else if (event.key === 'z' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n }\n }\n\n render() {\n const SInputField = Root;\n const { styles, showErrors } = this.asProps;\n const { visibleErrorPopper } = this.state;\n\n const { errorMessage, isCommonError } = this.errorMessage;\n const visibleErrorTooltip =\n showErrors && visibleErrorPopper && Boolean(errorMessage) && !this.isDisabled;\n\n const { __excludeProps } = extractAriaProps(this.asProps);\n\n return sstyled(styles)(\n <>\n <Tooltip\n interaction='none'\n placement={isCommonError ? 'right-start' : 'right'}\n visible={visibleErrorTooltip}\n theme='warning'\n offset={isCommonError ? undefined : [0, 26]}\n preventOverflow={{\n boundary: this.containerRef.current ?? undefined,\n tether: false,\n }}\n >\n {({ popper, setTrigger }) => {\n if (!this.popper) {\n this.setPopperTrigger = setTrigger;\n // @ts-ignore\n this.popper = popper;\n }\n\n return <Tooltip.Popper id={this.popperDescribedId}>{errorMessage}</Tooltip.Popper>;\n }}\n </Tooltip>\n <SInputField\n render={Box}\n ref={this.containerRef}\n __excludeProps={['onBlur', 'value', ...__excludeProps]}\n />\n </>,\n );\n }\n\n private prepareNodesForPaste(value: string | string[]): HTMLParagraphElement[] {\n const listOfNodes: HTMLParagraphElement[] = [];\n const { pasteProps } = this.asProps;\n const lineProcessing =\n pasteProps?.lineProcessing ??\n ((line: string) => {\n const trimmedLine = line.trim();\n return trimmedLine === '' ? line : trimmedLine;\n });\n const skipEmptyLines = pasteProps?.skipEmptyLines ?? this.skipEmptyLines;\n const delimiter = pasteProps?.delimiter ?? this.delimiter;\n const lines: string[] = Array.isArray(value) ? value : value.split(delimiter);\n\n lines.forEach((line, index) => {\n const preparedLine = lineProcessing(line, index, lines.length);\n\n if ((preparedLine === '' && skipEmptyLines === false) || preparedLine !== '') {\n const node = document.createElement('p');\n\n if (preparedLine === '') {\n node.innerHTML = this.emptyLineValue;\n } else if (preparedLine.trim() === '') {\n const allSpacesRegExp = new RegExp('\\\\s', 'g');\n node.innerHTML = DOMPurify.sanitize(\n preparedLine.replace(allSpacesRegExp, this.spaceLineValue),\n );\n } else {\n node.append(document.createTextNode(preparedLine));\n }\n\n listOfNodes.push(node);\n\n this.validateLine(node);\n }\n });\n\n return listOfNodes;\n }\n\n private recalculateErrors(): void {\n const errors: ErrorItem[] = [];\n\n this.textarea.childNodes.forEach((node, index) => {\n if (node instanceof HTMLParagraphElement && node.getAttribute('aria-invalid') === 'true') {\n const errorItem = {\n errorMessage: node.dataset.errormessage ?? '',\n lineNode: node,\n lineIndex: index,\n };\n errors.push(errorItem);\n }\n });\n\n this.asProps.onErrorsChange(errors);\n }\n\n private recalculateLinesCount(): void {\n if (this.linesCountTimeout) {\n clearTimeout(this.linesCountTimeout);\n }\n\n this.linesCountTimeout = window.setTimeout(() => {\n let lines = 0;\n const { maxLines, linesCount } = this.asProps;\n\n this.textarea.childNodes.forEach((node) => {\n if (node instanceof HTMLParagraphElement) {\n node.dataset.overMaxRows = 'false';\n\n if (\n node.textContent !== this.getEmptyParagraph().textContent &&\n node.textContent !== ''\n ) {\n lines++;\n\n if (lines > maxLines) {\n node.dataset.overMaxRows = 'true';\n }\n }\n }\n });\n\n if (linesCount !== lines) {\n this.asProps.onChangeLinesCount(lines);\n }\n }, 100);\n }\n\n private getValues(): string[] {\n const values: string[] = [];\n this.textarea.childNodes.forEach((node) => {\n if (node.textContent?.trim() === '') {\n values.push('');\n } else {\n values.push(node.textContent ?? '');\n }\n });\n\n return values;\n }\n\n private shouldChangePopperTrigger(node: HTMLElement): boolean {\n return (\n this.textarea !== node || (this.textarea === node && Boolean(this.asProps.commonErrorMessage))\n );\n }\n\n private toggleErrorsPopperByKeyboard(timer: number) {\n if (this.toggleErrorsPopperTimeout) {\n clearTimeout(this.toggleErrorsPopperTimeout);\n }\n\n if (!this.isScrolling) {\n setTimeout(() => {\n const rowNode = this.getNodeFromSelection();\n\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, timer);\n }, 0);\n } else {\n this.toggleErrorsPopperTimeout = window.setTimeout(() => {\n this.toggleErrorsPopperByKeyboard(timer);\n }, 50);\n }\n }\n\n private toggleErrorsPopper(key: IndexKeys, target?: unknown, timer?: number) {\n if (target instanceof HTMLDivElement || target instanceof HTMLParagraphElement) {\n if (this.changeTriggerTimeout) {\n clearTimeout(this.changeTriggerTimeout);\n }\n\n this.changeTriggerTimeout = window.setTimeout(() => {\n const targetElement = target === this.textarea ? this.getNodeFromSelection() : target;\n\n let lineIndex = -1;\n let isInvalidRow = false;\n\n if (targetElement instanceof HTMLParagraphElement) {\n isInvalidRow = targetElement.getAttribute('aria-invalid') === 'true';\n lineIndex = Array.from(this.textarea.childNodes).indexOf(targetElement);\n } else if (targetElement === this.textarea) {\n lineIndex = 0;\n }\n\n if (targetElement instanceof HTMLElement) {\n this.setState(\n (prevState) => {\n const newState: State = {\n visibleErrorPopper:\n this.isFocusing && Boolean(this.asProps.commonErrorMessage) ? true : isInvalidRow,\n mouseLineIndex: prevState.mouseLineIndex,\n keyboardLineIndex: prevState.keyboardLineIndex,\n };\n\n if (this.isFocusing || (key === 'mouseLineIndex' && isInvalidRow)) {\n newState[key] = lineIndex;\n }\n\n return newState;\n },\n () => {\n this.errorByInteraction = key === 'mouseLineIndex' ? 'mouse' : 'keyboard';\n\n const trigger = isInvalidRow ? targetElement : this.textarea;\n\n if (this.shouldChangePopperTrigger(trigger)) {\n this.setPopperTrigger?.(trigger);\n\n this.forceUpdate();\n }\n },\n );\n }\n }, timer ?? 50);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n\n private toggleAriaInvalid(showErrors: boolean, errorsLength: number): void {\n if (showErrors && errorsLength > 0) {\n this.textarea.setAttribute('aria-describedby', this.popperDescribedId);\n this.textarea.setAttribute('aria-invalid', 'true');\n } else {\n this.textarea.removeAttribute('aria-invalid');\n this.textarea.removeAttribute('aria-describedby');\n }\n }\n\n private handleChangeErrorIndex(errorIndex: number): void {\n const error: ErrorItem | undefined = this.asProps.errors[errorIndex];\n const childNodes = this.textarea.childNodes;\n\n const node = error ? error.lineNode ?? childNodes.item(error.lineIndex) : null;\n const selection = document.getSelection();\n\n if (selection && node instanceof HTMLParagraphElement) {\n this.setState({ visibleErrorPopper: false });\n\n setTimeout(() => {\n const text = node.childNodes.item(0);\n if (text instanceof Text) {\n this.setSelection(text, 0, text.length);\n } else {\n this.setSelection(node, 0, 1);\n }\n }, 150);\n }\n }\n\n private validateLine(node: Node): boolean {\n const { lineValidation } = this.asProps;\n if (lineValidation && node instanceof HTMLElement) {\n const { isValid, errorMessage } = lineValidation(node.textContent ?? '', this.getValues());\n\n if (!isValid) {\n node.setAttribute('aria-invalid', 'true');\n node.dataset.errormessage = errorMessage;\n } else {\n node.removeAttribute('aria-invalid');\n node.dataset.errormessage = undefined;\n }\n\n return isValid;\n }\n\n return true;\n }\n\n private setSelection(\n node: Node,\n start: number,\n end: number,\n scrollType: 'center' | 'nearest' = 'center',\n ): void {\n const selection = document.getSelection();\n const range = document.createRange();\n range.setStart(node, start);\n range.setEnd(node, end);\n\n selection?.removeAllRanges();\n selection?.addRange(range);\n\n const nodeToScroll = node instanceof Text ? node.parentNode : node;\n\n if (nodeToScroll instanceof HTMLElement) {\n nodeToScroll.scrollIntoView({\n block: scrollType,\n inline: scrollType,\n behavior: 'smooth',\n });\n }\n }\n\n private getNodeFromSelection(): Node | null {\n const selection = document.getSelection();\n\n const rowNode =\n selection?.focusNode instanceof Text ? selection.focusNode.parentNode : selection?.focusNode;\n\n return rowNode ?? null;\n }\n\n private handleCursorMovement(currentNode: HTMLParagraphElement, event: KeyboardEvent): void {\n let nextNode: ChildNode | null = null;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n nextNode = currentNode.previousSibling;\n break;\n case 'ArrowDown':\n event.preventDefault();\n nextNode = currentNode.nextSibling;\n break;\n case 'ArrowLeft': {\n if (currentNode.textContent === this.getEmptyParagraph().textContent) {\n event.preventDefault();\n nextNode = currentNode.previousSibling;\n }\n break;\n }\n case 'ArrowRight': {\n if (currentNode.textContent === this.getEmptyParagraph().textContent) {\n event.preventDefault();\n nextNode = currentNode.nextSibling;\n }\n }\n }\n\n if (nextNode instanceof HTMLParagraphElement) {\n const selection = document.getSelection();\n const firstNode = nextNode.childNodes.item(0);\n const nodeToSetSelection = firstNode instanceof Text ? firstNode : nextNode;\n const textNode = nextNode.textContent?.trim() ?? '';\n const currentOffset = selection?.focusOffset ?? 0;\n let offset = currentOffset <= textNode.length ? currentOffset : textNode.length;\n\n // it only works if node is empty, that's why here we could set 0 or node.length\n if (event.key === 'ArrowLeft') {\n offset = textNode.length;\n } else if (event.key === 'ArrowRight') {\n offset = 0;\n }\n\n this.setSelection(nodeToSetSelection, offset, offset, 'nearest');\n }\n }\n\n private setErrorIndex(nodeToCompare: Node): void {\n const errorIndex = Array.from(this.textarea.childNodes)\n .filter((node) => {\n return node instanceof Element && node.getAttribute('aria-invalid') === 'true';\n })\n .findIndex((node) => {\n return node === nodeToCompare;\n });\n\n this.handlers.errorIndex(errorIndex);\n }\n\n private isDeleteKey(event: KeyboardEvent): boolean {\n return event.key === 'Backspace' || (event.key === 'x' && (event.ctrlKey || event.metaKey));\n }\n\n private getEmptyParagraph() {\n const element = document.createElement('p');\n\n element.innerHTML = this.emptyLineValue;\n\n return element;\n }\n\n private addEventListeners(textarea: HTMLElement) {\n textarea.addEventListener('paste', this.handlePaste);\n textarea.addEventListener('input', this.handleChange);\n textarea.addEventListener('focus', this.handleFocus);\n textarea.addEventListener('blur', this.handleBlur);\n textarea.addEventListener('keydown', this.handleKeyDown);\n textarea.addEventListener('mousedown', this.handleMouseDown);\n textarea.addEventListener('mousemove', this.handleMouseMove);\n textarea.addEventListener('mouseleave', this.handleMouseLeave);\n textarea.addEventListener('scroll', this.handleScroll);\n\n textarea.removeEventListener('keydown', this.handleSelectAll);\n }\n\n private removeEventListeners(textarea: HTMLElement) {\n textarea.removeEventListener('paste', this.handlePaste);\n textarea.removeEventListener('input', this.handleChange);\n textarea.removeEventListener('focus', this.handleFocus);\n textarea.removeEventListener('blur', this.handleBlur);\n textarea.removeEventListener('keydown', this.handleKeyDown);\n textarea.removeEventListener('mousedown', this.handleMouseDown);\n textarea.removeEventListener('mousemove', this.handleMouseMove);\n textarea.removeEventListener('mouseleave', this.handleMouseLeave);\n textarea.removeEventListener('scroll', this.handleScroll);\n\n textarea.addEventListener('keydown', this.handleSelectAll);\n }\n\n private handleSelectAll(event: KeyboardEvent) {\n if (event.key === 'a' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n\n const node = event.target;\n if (node instanceof HTMLElement && node === this.textarea) {\n this.setSelection(node, 0, node.childNodes.length);\n }\n }\n }\n\n private isRangeSelection(): boolean {\n const selection = document.getSelection();\n\n return (\n selection?.focusNode !== selection?.anchorNode ||\n selection?.focusOffset !== selection?.anchorOffset\n );\n }\n\n private getSelectionDirection(): 'forward' | 'backward' | null {\n const selection = document.getSelection();\n\n if (selection?.anchorNode && selection?.focusNode) {\n const documentPosition = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n\n if (\n (documentPosition === 0 && selection.anchorOffset > selection.focusOffset) || // if nodes are the same\n documentPosition === Node.DOCUMENT_POSITION_PRECEDING\n ) {\n return 'backward';\n }\n\n return 'forward';\n }\n\n return null;\n }\n}\n\nexport { InputField };\nexport type { InputFieldProps, ErrorItem };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -75,6 +75,11 @@ class InputField extends Component {
|
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
componentDidMount() {
|
|
78
|
+
const {
|
|
79
|
+
autoFocus,
|
|
80
|
+
disabled,
|
|
81
|
+
readonly
|
|
82
|
+
} = this.asProps;
|
|
78
83
|
this.containerRef.current?.append(this.textarea);
|
|
79
84
|
this.handleValueOutChange();
|
|
80
85
|
const config = {
|
|
@@ -85,6 +90,12 @@ class InputField extends Component {
|
|
|
85
90
|
if (this.props.onImmediatelyChange) {
|
|
86
91
|
this.observer.observe(this.textarea, config);
|
|
87
92
|
}
|
|
93
|
+
if (autoFocus && !disabled) {
|
|
94
|
+
/* Safari & Firefox may silently ignore programmatic focus calls with very short
|
|
95
|
+
delays (<10ms). Using 10ms as a safe threshold based on observed behavior.
|
|
96
|
+
*/
|
|
97
|
+
setTimeout(() => this.textarea.focus(), 10);
|
|
98
|
+
}
|
|
88
99
|
}
|
|
89
100
|
componentDidUpdate(prevProps, prevState) {
|
|
90
101
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputField.js","names":["Box","Component","sstyled","Root","extractAriaProps","uniqueIDEnhancement","Tooltip","DOMPurify","React","style","_sstyled","insert","InputField","constructor","props","_defineProperty","createRef","visibleErrorPopper","keyboardLineIndex","mouseLineIndex","handlePaste","bind","handleChange","handleFocus","handleBlur","handleKeyDown","handleMouseDown","handleMouseMove","handleMouseLeave","handleScroll","handleSelectAll","textarea","createContentEditableElement","observer","MutationObserver","mutationsList","mutation","type","onImmediatelyChange","getValues","textContent","uncontrolledProps","value","linesCount","errorIndex","componentDidMount","containerRef","current","append","handleValueOutChange","config","childList","characterData","subtree","observe","componentDidUpdate","prevProps","prevState","errors","showErrors","disabled","readonly","highlightErrorIndex","lineProcessing","ariaDescribedby","currentValue","join","delimiter","errorsMap","Map","forEach","error","set","lineIndex","childNodes","node","index","HTMLParagraphElement","errorItem","get","setAttribute","dataset","errormessage","errorMessage","removeAttribute","undefined","toggleAriaInvalid","length","handleChangeErrorIndex","isDisabled","removeEventListeners","addEventListeners","state","lines","newValue","newValueTextNode","document","createTextNode","paragraph","item","innerHTML","emptyLineValue","replaceChild","validateLine","setTimeout","newNode","setErrorIndex","recalculateErrors","recalculateLinesCount","asProps","onChangeLineIndex","componentWillUnmount","disconnect","Boolean","popperDescribedId","uid","commonErrorMessage","prevError","currentLineIndex","errorByInteraction","find","e","isCommonError","createElement","id","placeholder","extractedAriaProps","key","ariaProp","addEventListener","onChangeLinesCount","listOfNodes","prepareNodesForPaste","replaceChildren","scrollingTimeout","clearTimeout","isScrolling","window","event","element","target","HTMLElement","toggleErrorsPopper","isFocusing","getAttribute","setState","changeTriggerTimeout","rowNode","getNodeFromSelection","preventDefault","validateOn","clipboardData","getData","selection","getSelection","anchorNode","focusNode","anchorOffset","focusOffset","documentPosition","compareDocumentPosition","direction","getSelectionDirection","anchorElement","focusElement","fromOffset","toOffset","Text","parentElement","textNode","position","lastNodeToInsert","before","substring","after","noEmptyLineBefore","trim","noEmptyLineAfter","deleteFromDocument","removeChild","firstNodeToInsert","splice","setSelection","parentNode","console","warn","includes","HTMLDivElement","InputEvent","nodes","firstNode","secondNode","nodeText","firstRow","text","replaceWith","setPosition","HTMLBRElement","maxDeep","offset","firstSymbol","at","lastSymbol","getEmptyParagraph","inputType","isValid","trigger","lineNode","popper","elements","reference","shouldChangePopperTrigger","setPopperTrigger","nodeIndex","emptyParagraph","emptyBr","toggleErrorsPopperByKeyboard","onBlur","valueToChange","linesDelimiters","currentNode","currentRowValue","selectionNode","selectionOffset","newRowValue","row","previousSibling","handleCursorMovement","isDeleteKey","isRangeSelection","prevNode","anchorParagraph","focusParagraph","paragraphs","Array","from","children","isCleaning","ctrlKey","metaKey","render","_ref","_ref2","SInputField","styles","visibleErrorTooltip","__excludeProps","Fragment","cn","boundary","tether","setTrigger","Popper","_assignProps","pasteProps","line","trimmedLine","skipEmptyLines","isArray","split","preparedLine","allSpacesRegExp","RegExp","sanitize","replace","spaceLineValue","push","onErrorsChange","linesCountTimeout","maxLines","overMaxRows","values","timer","toggleErrorsPopperTimeout","targetElement","isInvalidRow","indexOf","newState","forceUpdate","errorsLength","lineValidation","start","end","scrollType","range","createRange","setStart","setEnd","removeAllRanges","addRange","nodeToScroll","scrollIntoView","block","inline","behavior","nextNode","nextSibling","nodeToSetSelection","currentOffset","nodeToCompare","filter","Element","findIndex","handlers","removeEventListener","Node","DOCUMENT_POSITION_PRECEDING","defaultValue","size","minRows","maxRows","defaultShowErrors","defaultErrorIndex","defaultLinesCount"],"sources":["../../../../src/components/InputField/InputField.tsx"],"sourcesContent":["import { Box } from '@semcore/base-components';\nimport type { PopperContext } from '@semcore/base-components';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { extractAriaProps } from '@semcore/core/lib/utils/ariaProps';\nimport uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';\nimport Tooltip from '@semcore/tooltip';\nimport DOMPurify from 'dompurify';\nimport React from 'react';\n\nimport style from './inputField.shadow.css';\nimport type { InputFieldProps, ErrorItem } from './InputField.types';\n\ntype IndexKeys = 'keyboardLineIndex' | 'mouseLineIndex';\n\ntype State = {\n [key in IndexKeys]: number;\n} & {\n visibleErrorPopper: boolean;\n};\n\nclass InputField<T extends string | string[]> extends Component<\n InputFieldProps<T>,\n typeof InputField.enhance,\n {\n value: null;\n linesCount: null;\n errorIndex: null;\n },\n {},\n State\n> {\n static displayName = 'Textarea';\n static style = style;\n\n static enhance = [uniqueIDEnhancement()] as const;\n\n static defaultProps = {\n defaultValue: '',\n size: 'm',\n state: 'normal',\n minRows: 2,\n maxRows: 10,\n defaultShowErrors: false,\n defaultErrorIndex: -1,\n defaultLinesCount: 0,\n };\n\n delimiter = '\\n';\n skipEmptyLines = true;\n emptyLineValue = '';\n spaceLineValue = ' ';\n\n containerRef = React.createRef<HTMLDivElement>();\n textarea: HTMLDivElement;\n\n popper: PopperContext['popper'] | null = null;\n setPopperTrigger: PopperContext['setTrigger'] | null = null;\n\n errorByInteraction: 'keyboard' | 'mouse' | null = null;\n\n changeTriggerTimeout = 0;\n isScrolling = false;\n scrollingTimeout = 0;\n\n toggleErrorsPopperTimeout = 0;\n\n isFocusing = false;\n\n linesCountTimeout = 0;\n\n observer: MutationObserver;\n\n state = {\n visibleErrorPopper: false,\n keyboardLineIndex: -1,\n mouseLineIndex: -1,\n };\n\n constructor(props: InputFieldProps<T>) {\n super(props);\n\n this.handlePaste = this.handlePaste.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelectAll = this.handleSelectAll.bind(this);\n\n this.textarea = this.createContentEditableElement(props);\n\n this.observer = new MutationObserver((mutationsList, observer) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'characterData' || mutation.type === 'childList') {\n this.props.onImmediatelyChange?.(this.getValues(), this.textarea.textContent ?? '');\n }\n }\n });\n }\n\n uncontrolledProps() {\n return {\n value: null,\n linesCount: null,\n errorIndex: null,\n };\n }\n\n componentDidMount() {\n this.containerRef.current?.append(this.textarea);\n\n this.handleValueOutChange();\n\n const config = {\n childList: true,\n characterData: true,\n subtree: true,\n };\n\n if (this.props.onImmediatelyChange) {\n this.observer.observe(this.textarea, config);\n }\n }\n\n componentDidUpdate(prevProps: InputFieldProps<T>, prevState: State): void {\n const {\n value,\n errors,\n errorIndex,\n showErrors,\n disabled,\n readonly,\n highlightErrorIndex,\n lineProcessing,\n ['aria-describedby']: ariaDescribedby = '',\n } = this.props;\n\n if (prevProps.value !== value) {\n const currentValue = this.getValues().join(this.delimiter);\n if (\n typeof value === 'string'\n ? value !== currentValue\n : value.join(this.delimiter) !== currentValue\n ) {\n this.handleValueOutChange();\n }\n }\n\n if (prevProps.showErrors !== showErrors || prevProps.errors !== errors) {\n if (showErrors) {\n const errorsMap = new Map<number, ErrorItem>();\n errors.forEach((error: ErrorItem) => {\n errorsMap.set(error.lineIndex, error);\n });\n\n this.textarea.childNodes.forEach((node, index) => {\n if (node instanceof HTMLParagraphElement) {\n const errorItem = errorsMap.get(index);\n if (errorItem) {\n node.setAttribute('aria-invalid', 'true');\n node.dataset.errormessage = errorItem.errorMessage;\n } else {\n node.removeAttribute('aria-invalid');\n node.dataset.errormessage = undefined;\n }\n }\n });\n }\n\n this.toggleAriaInvalid(showErrors, errors.length);\n\n if (showErrors === false) {\n this.textarea.setAttribute('aria-describedby', ariaDescribedby);\n }\n }\n\n if (prevProps.errorIndex !== errorIndex && highlightErrorIndex) {\n this.handleChangeErrorIndex(errorIndex);\n }\n\n if (prevProps.disabled !== disabled || prevProps.readonly !== readonly) {\n if (this.isDisabled) {\n this.textarea.setAttribute('contenteditable', 'false');\n this.removeEventListeners(this.textarea);\n } else {\n this.textarea.setAttribute('contenteditable', 'true');\n this.addEventListeners(this.textarea);\n }\n\n if (disabled) {\n this.textarea.setAttribute('tabindex', '-1');\n } else {\n this.textarea.setAttribute('tabindex', '0');\n }\n }\n\n const { keyboardLineIndex } = this.state;\n\n if (prevState.keyboardLineIndex !== -1 && prevState.keyboardLineIndex !== keyboardLineIndex) {\n if (lineProcessing) {\n const lines = this.getValues();\n const newValue = lineProcessing(lines[prevState.keyboardLineIndex] ?? '', lines);\n const newValueTextNode = document.createTextNode(newValue);\n const paragraph = this.textarea.childNodes.item(prevState.keyboardLineIndex);\n\n if (paragraph instanceof HTMLParagraphElement) {\n if (newValue === '') {\n paragraph.innerHTML = this.emptyLineValue;\n } else {\n paragraph.replaceChild(newValueTextNode, paragraph.childNodes.item(0));\n }\n }\n\n this.validateLine(paragraph);\n\n setTimeout(() => {\n const newNode = this.textarea.childNodes.item(keyboardLineIndex);\n if (newNode) {\n this.setErrorIndex(newNode);\n }\n }, 0); // need this timeout to update errorIndex to the new (usually empty) line\n }\n\n if (!showErrors) {\n this.recalculateErrors();\n }\n this.recalculateLinesCount();\n this.asProps.onChangeLineIndex(keyboardLineIndex);\n }\n }\n\n componentWillUnmount() {\n this.removeEventListeners(this.textarea);\n\n this.observer.disconnect();\n }\n\n get isDisabled(): boolean {\n const { disabled, readonly } = this.asProps;\n\n return Boolean(disabled || readonly);\n }\n\n get popperDescribedId() {\n const { uid } = this.asProps;\n return `bulk-textarea-${uid}-popper-describedby`;\n }\n\n get errorMessage() {\n const { errors, errorIndex, commonErrorMessage, prevError } = this.asProps;\n const { mouseLineIndex, keyboardLineIndex } = this.state;\n const currentLineIndex =\n this.errorByInteraction === 'keyboard'\n ? keyboardLineIndex\n : this.errorByInteraction === 'mouse'\n ? mouseLineIndex\n : -1;\n let errorItem: ErrorItem | undefined = errors[errorIndex];\n\n if (currentLineIndex !== -1) {\n errorItem = errors.find((e) => e?.lineIndex === currentLineIndex);\n }\n\n const errorMessage =\n errors.length === 0 && !prevError // show any errors only if there are at least one error\n ? null\n : errorItem?.errorMessage ??\n (commonErrorMessage === '' || errors.length === 0\n ? prevError?.errorMessage\n : commonErrorMessage);\n const isCommonError =\n !errorItem?.errorMessage &&\n (commonErrorMessage === '' || errors.length === 0 ? !prevError?.errorMessage : true);\n\n return {\n errorMessage,\n isCommonError,\n };\n }\n\n createContentEditableElement(props: InputFieldProps<T>) {\n const textarea = document.createElement('div');\n textarea.setAttribute('contentEditable', props.disabled || props.readonly ? 'false' : 'true');\n textarea.setAttribute('role', 'textbox');\n textarea.setAttribute('classname', 'editable');\n\n if (props.id) {\n textarea.setAttribute('id', props.id);\n }\n if (props.placeholder) {\n textarea.setAttribute('placeholder', props.placeholder);\n }\n const { extractedAriaProps } = extractAriaProps(props);\n for (const key in extractedAriaProps) {\n const ariaProp: string | undefined = (props as any)[key];\n if (ariaProp) {\n textarea.setAttribute(key, ariaProp);\n }\n }\n\n if (!props.disabled) {\n textarea.setAttribute('tabIndex', '0');\n } else {\n textarea.setAttribute('tabIndex', '-1');\n }\n\n if (!props.disabled && !props.readonly) {\n this.addEventListeners(textarea);\n } else {\n textarea.addEventListener('keydown', this.handleSelectAll.bind(this));\n }\n\n return textarea;\n }\n\n handleValueOutChange() {\n const { value, onChangeLinesCount } = this.props;\n\n if (value === '') {\n this.textarea.textContent = '';\n onChangeLinesCount(0);\n } else {\n const listOfNodes = this.prepareNodesForPaste(value);\n\n this.textarea.replaceChildren(...listOfNodes);\n\n this.recalculateLinesCount();\n this.recalculateErrors();\n }\n }\n\n handleScroll(): void {\n if (this.scrollingTimeout) {\n clearTimeout(this.scrollingTimeout);\n }\n\n this.isScrolling = true;\n\n this.scrollingTimeout = window.setTimeout(() => {\n this.isScrolling = false;\n }, 50);\n }\n\n handleMouseDown(event: MouseEvent): void {\n const element = event.target;\n\n if (element instanceof HTMLElement) {\n // we need to change keyboardLineIndex, because the caret in real on that current row\n this.toggleErrorsPopper('keyboardLineIndex', element);\n\n this.setErrorIndex(element);\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n this.errorByInteraction = 'mouse';\n const element = event.target;\n\n if (element !== this.textarea) {\n if (\n this.isFocusing ||\n (element instanceof HTMLElement && element.getAttribute('aria-invalid') === 'true')\n ) {\n this.toggleErrorsPopper('mouseLineIndex', element);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n }\n\n handleMouseLeave(): void {\n if (this.changeTriggerTimeout) {\n clearTimeout(this.changeTriggerTimeout);\n }\n\n if (this.isFocusing) {\n this.errorByInteraction = 'keyboard';\n const rowNode = this.getNodeFromSelection();\n\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, 0);\n this.setState({ mouseLineIndex: -1 });\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n\n handlePaste(event: ClipboardEvent) {\n event.preventDefault();\n const { validateOn } = this.asProps;\n const value = event.clipboardData?.getData('text/plain');\n const listOfNodes = value ? this.prepareNodesForPaste(value) : [];\n\n if (listOfNodes.length === 0) return;\n\n const selection = document.getSelection();\n\n if (selection?.anchorNode && selection?.focusNode) {\n const anchorOffset = selection.anchorOffset;\n const focusOffset = selection.focusOffset;\n const documentPosition = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n const direction = this.getSelectionDirection();\n\n const anchorElement = direction === 'forward' ? selection.anchorNode : selection.focusNode;\n const focusElement = direction === 'forward' ? selection.focusNode : selection.anchorNode;\n const fromOffset = direction === 'forward' ? anchorOffset : focusOffset;\n const toOffset = direction === 'forward' ? focusOffset : anchorOffset;\n const anchorNode =\n anchorElement instanceof Text ? anchorElement.parentElement : anchorElement;\n const focusNode = focusElement instanceof Text ? focusElement.parentElement : focusElement;\n\n let textNode: ChildNode | null = null;\n let position: number | null = null;\n\n if (focusElement === this.textarea) {\n this.textarea.replaceChildren(...listOfNodes);\n\n const lastNodeToInsert = listOfNodes[listOfNodes.length - 1];\n textNode = lastNodeToInsert.childNodes.item(0);\n position = (lastNodeToInsert.textContent ?? '').length;\n } else if (\n focusNode instanceof HTMLParagraphElement &&\n anchorNode instanceof HTMLParagraphElement\n ) {\n const before = anchorNode?.textContent?.substring(0, fromOffset) ?? '';\n const after = focusNode?.textContent?.substring(toOffset) ?? '';\n\n const noEmptyLineBefore = before.trim() === '' ? '' : before;\n const noEmptyLineAfter = after.trim() === '' ? '' : after;\n\n selection.deleteFromDocument();\n\n if (documentPosition !== 0) {\n this.textarea.removeChild(focusNode);\n }\n\n const firstNodeToInsert = listOfNodes.splice(0, 1)[0];\n const lastNodeToInsert = listOfNodes[listOfNodes.length - 1];\n\n anchorNode.textContent = noEmptyLineBefore + (firstNodeToInsert?.textContent ?? '');\n\n anchorNode.after(...listOfNodes);\n\n if (lastNodeToInsert) {\n lastNodeToInsert.textContent = (lastNodeToInsert.textContent ?? '') + noEmptyLineAfter;\n textNode = lastNodeToInsert.childNodes.item(0);\n position = (lastNodeToInsert.textContent ?? '').length;\n\n this.validateLine(lastNodeToInsert);\n this.setErrorIndex(lastNodeToInsert);\n } else {\n position = (anchorNode.textContent ?? '').length;\n anchorNode.textContent = (anchorNode.textContent ?? '') + noEmptyLineAfter;\n textNode = anchorNode.childNodes.item(0);\n\n this.validateLine(anchorNode);\n this.setErrorIndex(anchorNode);\n }\n }\n\n if (textNode instanceof Text) {\n this.setSelection(textNode, position ?? 1, position ?? 1);\n this.toggleErrorsPopper('keyboardLineIndex', textNode.parentNode);\n } else {\n // eslint-disable-next-line no-console\n console.warn('incorrect child type', textNode, textNode?.parentNode);\n }\n }\n\n this.recalculateLinesCount();\n\n if (validateOn.includes('paste') || this.asProps.showErrors) {\n this.recalculateErrors();\n }\n }\n\n handleChange(event: Event) {\n const target = event.target;\n if (target instanceof HTMLDivElement && event instanceof InputEvent) {\n const nodes = this.textarea.childNodes;\n const firstNode = nodes.item(0);\n const secondNode = nodes.item(1);\n const selection = document.getSelection();\n\n if (firstNode instanceof Text) {\n const nodeText = firstNode.textContent ?? '';\n const firstRow = document.createElement('p');\n const text = document.createTextNode(nodeText);\n firstRow.append(text);\n firstNode.replaceWith(firstRow);\n\n selection?.setPosition(firstRow, nodeText.length);\n } else if (!firstNode || (firstNode instanceof HTMLBRElement && nodes.length === 1)) {\n this.textarea.textContent = '';\n this.setState({ keyboardLineIndex: 0 });\n } else if (firstNode instanceof HTMLParagraphElement && !firstNode.textContent?.trim()) {\n if (nodes.length <= 1 || secondNode instanceof HTMLBRElement) {\n this.textarea.textContent = '';\n this.setState({ keyboardLineIndex: 0 });\n }\n }\n\n let maxDeep = 10;\n let rowNode = selection?.focusNode;\n\n while (rowNode?.parentNode !== this.textarea && maxDeep > 0) {\n rowNode = rowNode?.parentNode;\n maxDeep--;\n }\n\n if (rowNode instanceof HTMLParagraphElement) {\n const childNodes = rowNode.childNodes;\n const textContent = rowNode.textContent ?? '';\n\n if (childNodes.length > 1) {\n const offset = childNodes.item(0).textContent?.length;\n\n rowNode.textContent = textContent;\n\n if (offset) {\n this.setSelection(rowNode.childNodes.item(0), offset, offset);\n }\n }\n\n if (textContent.length > 0) {\n const firstSymbol = textContent.at(0);\n const lastSymbol = textContent.at(textContent.length - 1);\n\n if (\n firstSymbol === this.getEmptyParagraph().textContent ||\n lastSymbol === this.getEmptyParagraph().textContent\n ) {\n let offset: number | null = null;\n if (firstSymbol === this.getEmptyParagraph().textContent) {\n rowNode.textContent = textContent.substring(1);\n offset =\n event.inputType === 'deleteContentBackward' ||\n event.inputType === 'deleteContentForward'\n ? 0\n : rowNode.textContent.length;\n } else if (lastSymbol === this.getEmptyParagraph().textContent) {\n rowNode.textContent = textContent.substring(0, textContent.length - 1);\n offset = rowNode.textContent.length;\n }\n\n if (offset) {\n this.setSelection(rowNode.childNodes.item(0), offset, offset);\n }\n }\n } else if (childNodes.length === 1 && childNodes[0] instanceof HTMLBRElement) {\n rowNode.innerHTML = this.emptyLineValue;\n }\n\n const { errors, showErrors } = this.asProps;\n const isValid = this.validateLine(rowNode);\n this.recalculateErrors();\n this.setErrorIndex(rowNode);\n\n if (!isValid && showErrors) {\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, 0);\n }\n\n const trigger =\n !isValid || (isValid && errors.length === 1 && errors[0].lineNode === rowNode)\n ? rowNode\n : this.textarea;\n\n if (showErrors && this.popper?.current?.state.elements.reference !== trigger) {\n if (this.shouldChangePopperTrigger(trigger)) {\n this.setPopperTrigger?.(trigger);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n } else if (rowNode === null) {\n this.setPopperTrigger?.(this.textarea);\n\n if (selection?.focusNode === this.textarea && this.textarea.childNodes.length > 1) {\n const nodeIndex = selection.focusOffset;\n const emptyParagraph = this.textarea.childNodes.item(nodeIndex - 1);\n const emptyBr = this.textarea.childNodes.item(nodeIndex);\n\n this.textarea.removeChild(emptyBr);\n\n if (emptyParagraph instanceof HTMLParagraphElement) {\n emptyParagraph.innerHTML = this.emptyLineValue;\n }\n\n if (emptyParagraph) {\n this.setSelection(emptyParagraph, 0, 0);\n }\n } else {\n this.setSelection(this.textarea, 0, 0);\n }\n }\n\n this.recalculateLinesCount();\n }\n }\n\n handleFocus() {\n this.isFocusing = true;\n this.errorByInteraction = 'keyboard';\n\n if (this.asProps.showErrors) {\n this.toggleErrorsPopperByKeyboard(150);\n } else {\n this.toggleErrorsPopper('keyboardLineIndex', this.textarea);\n }\n }\n\n handleBlur(event: Event) {\n this.isFocusing = false;\n this.setState({ visibleErrorPopper: false });\n\n const { validateOn, onBlur, value } = this.asProps;\n\n if (validateOn.includes('blur')) {\n this.recalculateErrors();\n }\n\n const valueToChange =\n typeof value === 'string' ? this.getValues().join(this.delimiter) : this.getValues();\n\n onBlur(valueToChange as T, event);\n\n setTimeout(() => {\n this.setState({ keyboardLineIndex: -1 });\n }, 200);\n }\n\n handleKeyDown(event: KeyboardEvent) {\n this.errorByInteraction = 'keyboard';\n const { linesDelimiters } = this.asProps;\n\n const currentNode = this.getNodeFromSelection();\n\n if (event.key === 'Enter' || linesDelimiters?.includes(event.key)) {\n if (currentNode === this.textarea) {\n event.preventDefault();\n }\n if (currentNode instanceof HTMLParagraphElement) {\n const currentRowValue = currentNode.textContent?.trim();\n\n if (!currentRowValue) {\n event.preventDefault();\n } else {\n event.preventDefault();\n const selection = document.getSelection();\n const selectionNode =\n selection?.focusNode instanceof Text\n ? selection.focusNode\n : selection?.focusNode?.childNodes.item(0);\n const selectionOffset = selection?.focusOffset;\n\n let newRowValue = '';\n\n if (\n selectionNode instanceof Text &&\n selectionOffset !== undefined &&\n selectionOffset !== selectionNode.textContent?.length\n ) {\n newRowValue =\n selectionNode.textContent?.substring(selectionOffset) ?? this.emptyLineValue;\n\n if (selectionNode.textContent) {\n selectionNode.textContent = selectionNode.textContent.substring(0, selectionOffset);\n }\n }\n\n if (currentNode.textContent?.trim() === '') {\n currentNode.innerHTML = this.emptyLineValue;\n }\n\n const row = document.createElement('p');\n if (newRowValue) {\n row.textContent = newRowValue;\n } else {\n row.innerHTML = this.emptyLineValue;\n }\n currentNode.after(row);\n\n this.setSelection(row, 0, 0);\n\n this.validateLine(currentNode);\n this.validateLine(row);\n if (currentNode.previousSibling) {\n this.validateLine(currentNode.previousSibling);\n }\n this.setErrorIndex(row);\n\n if (row.textContent?.trim() !== '') {\n this.recalculateLinesCount();\n }\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n }\n } else if (\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight'\n ) {\n if (currentNode instanceof HTMLParagraphElement) {\n this.handleCursorMovement(currentNode, event);\n }\n this.toggleErrorsPopperByKeyboard(200);\n } else if (this.isDeleteKey(event) && currentNode instanceof HTMLParagraphElement) {\n if (currentNode.textContent?.trim() === '' && !this.isRangeSelection()) {\n // Backspace on empty row\n const prevNode = currentNode.previousSibling;\n if (prevNode instanceof HTMLParagraphElement) {\n event.preventDefault();\n this.textarea.removeChild(currentNode);\n this.toggleErrorsPopperByKeyboard(0);\n\n if (\n prevNode.textContent?.trim() === '' &&\n prevNode.previousSibling === null &&\n this.textarea.childNodes.length === 1\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n if (prevNode instanceof HTMLParagraphElement) {\n const text = prevNode.childNodes.item(0);\n const offset = text.textContent?.length ?? 0;\n this.setSelection(text, offset, offset);\n } else {\n // eslint-disable-next-line no-console\n console.warn('incorrect prevNode type', prevNode);\n }\n }\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n } else if (this.isRangeSelection()) {\n const selection = document.getSelection();\n\n const direction = this.getSelectionDirection();\n const anchorElement =\n direction === 'backward' ? selection?.focusNode : selection?.anchorNode;\n const focusElement =\n direction === 'backward' ? selection?.anchorNode : selection?.focusNode;\n const anchorOffset =\n direction === 'backward' ? selection?.focusOffset : selection?.anchorOffset;\n const focusOffset =\n direction === 'backward' ? selection?.anchorOffset : selection?.focusOffset;\n\n // Backspace on selected full row\n if (\n anchorElement === focusElement &&\n anchorOffset === 0 &&\n ((focusElement === currentNode && focusOffset === 1) ||\n focusOffset === currentNode.textContent?.length)\n ) {\n event.preventDefault();\n\n const anchorParagraph = anchorElement?.parentElement;\n const focusParagraph = focusElement?.parentElement;\n const childNodes = this.textarea.childNodes;\n if (\n anchorParagraph === childNodes.item(0) &&\n focusParagraph === childNodes.item(childNodes.length - 1)\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n currentNode.innerHTML = this.emptyLineValue;\n this.validateLine(currentNode);\n }\n\n this.setErrorIndex(currentNode);\n this.recalculateLinesCount();\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n } else if (\n focusElement !== anchorElement &&\n focusElement instanceof Text &&\n anchorElement instanceof Text &&\n focusElement?.textContent === focusElement?.parentNode?.textContent &&\n anchorElement?.textContent === anchorElement?.parentNode?.textContent &&\n anchorOffset === 0 &&\n focusOffset === focusElement?.parentNode?.textContent?.length\n ) { // Backspace on selected few full rows\n event.preventDefault();\n\n const paragraphs = Array.from(this.textarea.children);\n const anchorParagraph = anchorElement.parentElement;\n const focusParagraph = focusElement.parentElement;\n const childNodes = this.textarea.childNodes;\n\n if (\n anchorParagraph === childNodes.item(0) &&\n focusParagraph === childNodes.item(childNodes.length - 1)\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n let isCleaning = false;\n\n for (const paragraph of paragraphs) {\n if (paragraph === anchorParagraph || isCleaning) {\n isCleaning = true;\n\n if (paragraph === focusParagraph) {\n focusParagraph.innerHTML = this.emptyLineValue;\n this.setSelection(focusParagraph, 0, 0);\n break;\n } else {\n this.textarea.removeChild(paragraph);\n }\n }\n }\n\n this.validateLine(currentNode);\n }\n\n this.setErrorIndex(currentNode);\n this.recalculateLinesCount();\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n }\n } else if (event.key === 'z' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n }\n }\n\n render() {\n const SInputField = Root;\n const { styles, showErrors } = this.asProps;\n const { visibleErrorPopper } = this.state;\n\n const { errorMessage, isCommonError } = this.errorMessage;\n const visibleErrorTooltip =\n showErrors && visibleErrorPopper && Boolean(errorMessage) && !this.isDisabled;\n\n const { __excludeProps } = extractAriaProps(this.asProps);\n\n return sstyled(styles)(\n <>\n <Tooltip\n interaction='none'\n placement={isCommonError ? 'right-start' : 'right'}\n visible={visibleErrorTooltip}\n theme='warning'\n offset={isCommonError ? undefined : [0, 26]}\n preventOverflow={{\n boundary: this.containerRef.current ?? undefined,\n tether: false,\n }}\n >\n {({ popper, setTrigger }) => {\n if (!this.popper) {\n this.setPopperTrigger = setTrigger;\n // @ts-ignore\n this.popper = popper;\n }\n\n return <Tooltip.Popper id={this.popperDescribedId}>{errorMessage}</Tooltip.Popper>;\n }}\n </Tooltip>\n <SInputField\n render={Box}\n ref={this.containerRef}\n __excludeProps={['onBlur', 'value', ...__excludeProps]}\n />\n </>,\n );\n }\n\n private prepareNodesForPaste(value: string | string[]): HTMLParagraphElement[] {\n const listOfNodes: HTMLParagraphElement[] = [];\n const { pasteProps } = this.asProps;\n const lineProcessing =\n pasteProps?.lineProcessing ??\n ((line: string) => {\n const trimmedLine = line.trim();\n return trimmedLine === '' ? line : trimmedLine;\n });\n const skipEmptyLines = pasteProps?.skipEmptyLines ?? this.skipEmptyLines;\n const delimiter = pasteProps?.delimiter ?? this.delimiter;\n const lines: string[] = Array.isArray(value) ? value : value.split(delimiter);\n\n lines.forEach((line, index) => {\n const preparedLine = lineProcessing(line, index, lines.length);\n\n if ((preparedLine === '' && skipEmptyLines === false) || preparedLine !== '') {\n const node = document.createElement('p');\n\n if (preparedLine === '') {\n node.innerHTML = this.emptyLineValue;\n } else if (preparedLine.trim() === '') {\n const allSpacesRegExp = new RegExp('\\\\s', 'g');\n node.innerHTML = DOMPurify.sanitize(\n preparedLine.replace(allSpacesRegExp, this.spaceLineValue),\n );\n } else {\n node.append(document.createTextNode(preparedLine));\n }\n\n listOfNodes.push(node);\n\n this.validateLine(node);\n }\n });\n\n return listOfNodes;\n }\n\n private recalculateErrors(): void {\n const errors: ErrorItem[] = [];\n\n this.textarea.childNodes.forEach((node, index) => {\n if (node instanceof HTMLParagraphElement && node.getAttribute('aria-invalid') === 'true') {\n const errorItem = {\n errorMessage: node.dataset.errormessage ?? '',\n lineNode: node,\n lineIndex: index,\n };\n errors.push(errorItem);\n }\n });\n\n this.asProps.onErrorsChange(errors);\n }\n\n private recalculateLinesCount(): void {\n if (this.linesCountTimeout) {\n clearTimeout(this.linesCountTimeout);\n }\n\n this.linesCountTimeout = window.setTimeout(() => {\n let lines = 0;\n const { maxLines, linesCount } = this.asProps;\n\n this.textarea.childNodes.forEach((node) => {\n if (node instanceof HTMLParagraphElement) {\n node.dataset.overMaxRows = 'false';\n\n if (\n node.textContent !== this.getEmptyParagraph().textContent &&\n node.textContent !== ''\n ) {\n lines++;\n\n if (lines > maxLines) {\n node.dataset.overMaxRows = 'true';\n }\n }\n }\n });\n\n if (linesCount !== lines) {\n this.asProps.onChangeLinesCount(lines);\n }\n }, 100);\n }\n\n private getValues(): string[] {\n const values: string[] = [];\n this.textarea.childNodes.forEach((node) => {\n if (node.textContent?.trim() === '') {\n values.push('');\n } else {\n values.push(node.textContent ?? '');\n }\n });\n\n return values;\n }\n\n private shouldChangePopperTrigger(node: HTMLElement): boolean {\n return (\n this.textarea !== node || (this.textarea === node && Boolean(this.asProps.commonErrorMessage))\n );\n }\n\n private toggleErrorsPopperByKeyboard(timer: number) {\n if (this.toggleErrorsPopperTimeout) {\n clearTimeout(this.toggleErrorsPopperTimeout);\n }\n\n if (!this.isScrolling) {\n setTimeout(() => {\n const rowNode = this.getNodeFromSelection();\n\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, timer);\n }, 0);\n } else {\n this.toggleErrorsPopperTimeout = window.setTimeout(() => {\n this.toggleErrorsPopperByKeyboard(timer);\n }, 50);\n }\n }\n\n private toggleErrorsPopper(key: IndexKeys, target?: unknown, timer?: number) {\n if (target instanceof HTMLDivElement || target instanceof HTMLParagraphElement) {\n if (this.changeTriggerTimeout) {\n clearTimeout(this.changeTriggerTimeout);\n }\n\n this.changeTriggerTimeout = window.setTimeout(() => {\n const targetElement = target === this.textarea ? this.getNodeFromSelection() : target;\n\n let lineIndex = -1;\n let isInvalidRow = false;\n\n if (targetElement instanceof HTMLParagraphElement) {\n isInvalidRow = targetElement.getAttribute('aria-invalid') === 'true';\n lineIndex = Array.from(this.textarea.childNodes).indexOf(targetElement);\n } else if (targetElement === this.textarea) {\n lineIndex = 0;\n }\n\n if (targetElement instanceof HTMLElement) {\n this.setState(\n (prevState) => {\n const newState: State = {\n visibleErrorPopper:\n this.isFocusing && Boolean(this.asProps.commonErrorMessage) ? true : isInvalidRow,\n mouseLineIndex: prevState.mouseLineIndex,\n keyboardLineIndex: prevState.keyboardLineIndex,\n };\n\n if (this.isFocusing || (key === 'mouseLineIndex' && isInvalidRow)) {\n newState[key] = lineIndex;\n }\n\n return newState;\n },\n () => {\n this.errorByInteraction = key === 'mouseLineIndex' ? 'mouse' : 'keyboard';\n\n const trigger = isInvalidRow ? targetElement : this.textarea;\n\n if (this.shouldChangePopperTrigger(trigger)) {\n this.setPopperTrigger?.(trigger);\n\n this.forceUpdate();\n }\n },\n );\n }\n }, timer ?? 50);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n\n private toggleAriaInvalid(showErrors: boolean, errorsLength: number): void {\n if (showErrors && errorsLength > 0) {\n this.textarea.setAttribute('aria-describedby', this.popperDescribedId);\n this.textarea.setAttribute('aria-invalid', 'true');\n } else {\n this.textarea.removeAttribute('aria-invalid');\n this.textarea.removeAttribute('aria-describedby');\n }\n }\n\n private handleChangeErrorIndex(errorIndex: number): void {\n const error: ErrorItem | undefined = this.asProps.errors[errorIndex];\n const childNodes = this.textarea.childNodes;\n\n const node = error ? error.lineNode ?? childNodes.item(error.lineIndex) : null;\n const selection = document.getSelection();\n\n if (selection && node instanceof HTMLParagraphElement) {\n this.setState({ visibleErrorPopper: false });\n\n setTimeout(() => {\n const text = node.childNodes.item(0);\n if (text instanceof Text) {\n this.setSelection(text, 0, text.length);\n } else {\n this.setSelection(node, 0, 1);\n }\n }, 150);\n }\n }\n\n private validateLine(node: Node): boolean {\n const { lineValidation } = this.asProps;\n if (lineValidation && node instanceof HTMLElement) {\n const { isValid, errorMessage } = lineValidation(node.textContent ?? '', this.getValues());\n\n if (!isValid) {\n node.setAttribute('aria-invalid', 'true');\n node.dataset.errormessage = errorMessage;\n } else {\n node.removeAttribute('aria-invalid');\n node.dataset.errormessage = undefined;\n }\n\n return isValid;\n }\n\n return true;\n }\n\n private setSelection(\n node: Node,\n start: number,\n end: number,\n scrollType: 'center' | 'nearest' = 'center',\n ): void {\n const selection = document.getSelection();\n const range = document.createRange();\n range.setStart(node, start);\n range.setEnd(node, end);\n\n selection?.removeAllRanges();\n selection?.addRange(range);\n\n const nodeToScroll = node instanceof Text ? node.parentNode : node;\n\n if (nodeToScroll instanceof HTMLElement) {\n nodeToScroll.scrollIntoView({\n block: scrollType,\n inline: scrollType,\n behavior: 'smooth',\n });\n }\n }\n\n private getNodeFromSelection(): Node | null {\n const selection = document.getSelection();\n\n const rowNode =\n selection?.focusNode instanceof Text ? selection.focusNode.parentNode : selection?.focusNode;\n\n return rowNode ?? null;\n }\n\n private handleCursorMovement(currentNode: HTMLParagraphElement, event: KeyboardEvent): void {\n let nextNode: ChildNode | null = null;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n nextNode = currentNode.previousSibling;\n break;\n case 'ArrowDown':\n event.preventDefault();\n nextNode = currentNode.nextSibling;\n break;\n case 'ArrowLeft': {\n if (currentNode.textContent === this.getEmptyParagraph().textContent) {\n event.preventDefault();\n nextNode = currentNode.previousSibling;\n }\n break;\n }\n case 'ArrowRight': {\n if (currentNode.textContent === this.getEmptyParagraph().textContent) {\n event.preventDefault();\n nextNode = currentNode.nextSibling;\n }\n }\n }\n\n if (nextNode instanceof HTMLParagraphElement) {\n const selection = document.getSelection();\n const firstNode = nextNode.childNodes.item(0);\n const nodeToSetSelection = firstNode instanceof Text ? firstNode : nextNode;\n const textNode = nextNode.textContent?.trim() ?? '';\n const currentOffset = selection?.focusOffset ?? 0;\n let offset = currentOffset <= textNode.length ? currentOffset : textNode.length;\n\n // it only works if node is empty, that's why here we could set 0 or node.length\n if (event.key === 'ArrowLeft') {\n offset = textNode.length;\n } else if (event.key === 'ArrowRight') {\n offset = 0;\n }\n\n this.setSelection(nodeToSetSelection, offset, offset, 'nearest');\n }\n }\n\n private setErrorIndex(nodeToCompare: Node): void {\n const errorIndex = Array.from(this.textarea.childNodes)\n .filter((node) => {\n return node instanceof Element && node.getAttribute('aria-invalid') === 'true';\n })\n .findIndex((node) => {\n return node === nodeToCompare;\n });\n\n this.handlers.errorIndex(errorIndex);\n }\n\n private isDeleteKey(event: KeyboardEvent): boolean {\n return event.key === 'Backspace' || (event.key === 'x' && (event.ctrlKey || event.metaKey));\n }\n\n private getEmptyParagraph() {\n const element = document.createElement('p');\n\n element.innerHTML = this.emptyLineValue;\n\n return element;\n }\n\n private addEventListeners(textarea: HTMLElement) {\n textarea.addEventListener('paste', this.handlePaste);\n textarea.addEventListener('input', this.handleChange);\n textarea.addEventListener('focus', this.handleFocus);\n textarea.addEventListener('blur', this.handleBlur);\n textarea.addEventListener('keydown', this.handleKeyDown);\n textarea.addEventListener('mousedown', this.handleMouseDown);\n textarea.addEventListener('mousemove', this.handleMouseMove);\n textarea.addEventListener('mouseleave', this.handleMouseLeave);\n textarea.addEventListener('scroll', this.handleScroll);\n\n textarea.removeEventListener('keydown', this.handleSelectAll);\n }\n\n private removeEventListeners(textarea: HTMLElement) {\n textarea.removeEventListener('paste', this.handlePaste);\n textarea.removeEventListener('input', this.handleChange);\n textarea.removeEventListener('focus', this.handleFocus);\n textarea.removeEventListener('blur', this.handleBlur);\n textarea.removeEventListener('keydown', this.handleKeyDown);\n textarea.removeEventListener('mousedown', this.handleMouseDown);\n textarea.removeEventListener('mousemove', this.handleMouseMove);\n textarea.removeEventListener('mouseleave', this.handleMouseLeave);\n textarea.removeEventListener('scroll', this.handleScroll);\n\n textarea.addEventListener('keydown', this.handleSelectAll);\n }\n\n private handleSelectAll(event: KeyboardEvent) {\n if (event.key === 'a' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n\n const node = event.target;\n if (node instanceof HTMLElement && node === this.textarea) {\n this.setSelection(node, 0, node.childNodes.length);\n }\n }\n }\n\n private isRangeSelection(): boolean {\n const selection = document.getSelection();\n\n return (\n selection?.focusNode !== selection?.anchorNode ||\n selection?.focusOffset !== selection?.anchorOffset\n );\n }\n\n private getSelectionDirection(): 'forward' | 'backward' | null {\n const selection = document.getSelection();\n\n if (selection?.anchorNode && selection?.focusNode) {\n const documentPosition = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n\n if (\n (documentPosition === 0 && selection.anchorOffset > selection.focusOffset) || // if nodes are the same\n documentPosition === Node.DOCUMENT_POSITION_PRECEDING\n ) {\n return 'backward';\n }\n\n return 'forward';\n }\n\n return null;\n }\n}\n\nexport { InputField };\nexport type { InputFieldProps, ErrorItem };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"InputField.js","names":["Box","Component","sstyled","Root","extractAriaProps","uniqueIDEnhancement","Tooltip","DOMPurify","React","style","_sstyled","insert","InputField","constructor","props","_defineProperty","createRef","visibleErrorPopper","keyboardLineIndex","mouseLineIndex","handlePaste","bind","handleChange","handleFocus","handleBlur","handleKeyDown","handleMouseDown","handleMouseMove","handleMouseLeave","handleScroll","handleSelectAll","textarea","createContentEditableElement","observer","MutationObserver","mutationsList","mutation","type","onImmediatelyChange","getValues","textContent","uncontrolledProps","value","linesCount","errorIndex","componentDidMount","autoFocus","disabled","readonly","asProps","containerRef","current","append","handleValueOutChange","config","childList","characterData","subtree","observe","setTimeout","focus","componentDidUpdate","prevProps","prevState","errors","showErrors","highlightErrorIndex","lineProcessing","ariaDescribedby","currentValue","join","delimiter","errorsMap","Map","forEach","error","set","lineIndex","childNodes","node","index","HTMLParagraphElement","errorItem","get","setAttribute","dataset","errormessage","errorMessage","removeAttribute","undefined","toggleAriaInvalid","length","handleChangeErrorIndex","isDisabled","removeEventListeners","addEventListeners","state","lines","newValue","newValueTextNode","document","createTextNode","paragraph","item","innerHTML","emptyLineValue","replaceChild","validateLine","newNode","setErrorIndex","recalculateErrors","recalculateLinesCount","onChangeLineIndex","componentWillUnmount","disconnect","Boolean","popperDescribedId","uid","commonErrorMessage","prevError","currentLineIndex","errorByInteraction","find","e","isCommonError","createElement","id","placeholder","extractedAriaProps","key","ariaProp","addEventListener","onChangeLinesCount","listOfNodes","prepareNodesForPaste","replaceChildren","scrollingTimeout","clearTimeout","isScrolling","window","event","element","target","HTMLElement","toggleErrorsPopper","isFocusing","getAttribute","setState","changeTriggerTimeout","rowNode","getNodeFromSelection","preventDefault","validateOn","clipboardData","getData","selection","getSelection","anchorNode","focusNode","anchorOffset","focusOffset","documentPosition","compareDocumentPosition","direction","getSelectionDirection","anchorElement","focusElement","fromOffset","toOffset","Text","parentElement","textNode","position","lastNodeToInsert","before","substring","after","noEmptyLineBefore","trim","noEmptyLineAfter","deleteFromDocument","removeChild","firstNodeToInsert","splice","setSelection","parentNode","console","warn","includes","HTMLDivElement","InputEvent","nodes","firstNode","secondNode","nodeText","firstRow","text","replaceWith","setPosition","HTMLBRElement","maxDeep","offset","firstSymbol","at","lastSymbol","getEmptyParagraph","inputType","isValid","trigger","lineNode","popper","elements","reference","shouldChangePopperTrigger","setPopperTrigger","nodeIndex","emptyParagraph","emptyBr","toggleErrorsPopperByKeyboard","onBlur","valueToChange","linesDelimiters","currentNode","currentRowValue","selectionNode","selectionOffset","newRowValue","row","previousSibling","handleCursorMovement","isDeleteKey","isRangeSelection","prevNode","anchorParagraph","focusParagraph","paragraphs","Array","from","children","isCleaning","ctrlKey","metaKey","render","_ref","_ref2","SInputField","styles","visibleErrorTooltip","__excludeProps","Fragment","cn","boundary","tether","setTrigger","Popper","_assignProps","pasteProps","line","trimmedLine","skipEmptyLines","isArray","split","preparedLine","allSpacesRegExp","RegExp","sanitize","replace","spaceLineValue","push","onErrorsChange","linesCountTimeout","maxLines","overMaxRows","values","timer","toggleErrorsPopperTimeout","targetElement","isInvalidRow","indexOf","newState","forceUpdate","errorsLength","lineValidation","start","end","scrollType","range","createRange","setStart","setEnd","removeAllRanges","addRange","nodeToScroll","scrollIntoView","block","inline","behavior","nextNode","nextSibling","nodeToSetSelection","currentOffset","nodeToCompare","filter","Element","findIndex","handlers","removeEventListener","Node","DOCUMENT_POSITION_PRECEDING","defaultValue","size","minRows","maxRows","defaultShowErrors","defaultErrorIndex","defaultLinesCount"],"sources":["../../../../src/components/InputField/InputField.tsx"],"sourcesContent":["import { Box } from '@semcore/base-components';\nimport type { PopperContext } from '@semcore/base-components';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { extractAriaProps } from '@semcore/core/lib/utils/ariaProps';\nimport uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';\nimport Tooltip from '@semcore/tooltip';\nimport DOMPurify from 'dompurify';\nimport React from 'react';\n\nimport style from './inputField.shadow.css';\nimport type { InputFieldProps, ErrorItem } from './InputField.types';\n\ntype IndexKeys = 'keyboardLineIndex' | 'mouseLineIndex';\n\ntype State = {\n [key in IndexKeys]: number;\n} & {\n visibleErrorPopper: boolean;\n};\n\nclass InputField<T extends string | string[]> extends Component<\n InputFieldProps<T>,\n typeof InputField.enhance,\n {\n value: null;\n linesCount: null;\n errorIndex: null;\n },\n {},\n State\n> {\n static displayName = 'Textarea';\n static style = style;\n\n static enhance = [uniqueIDEnhancement()] as const;\n\n static defaultProps = {\n defaultValue: '',\n size: 'm',\n state: 'normal',\n minRows: 2,\n maxRows: 10,\n defaultShowErrors: false,\n defaultErrorIndex: -1,\n defaultLinesCount: 0,\n };\n\n delimiter = '\\n';\n skipEmptyLines = true;\n emptyLineValue = '';\n spaceLineValue = ' ';\n\n containerRef = React.createRef<HTMLDivElement>();\n textarea: HTMLDivElement;\n\n popper: PopperContext['popper'] | null = null;\n setPopperTrigger: PopperContext['setTrigger'] | null = null;\n\n errorByInteraction: 'keyboard' | 'mouse' | null = null;\n\n changeTriggerTimeout = 0;\n isScrolling = false;\n scrollingTimeout = 0;\n\n toggleErrorsPopperTimeout = 0;\n\n isFocusing = false;\n\n linesCountTimeout = 0;\n\n observer: MutationObserver;\n\n state = {\n visibleErrorPopper: false,\n keyboardLineIndex: -1,\n mouseLineIndex: -1,\n };\n\n constructor(props: InputFieldProps<T>) {\n super(props);\n\n this.handlePaste = this.handlePaste.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelectAll = this.handleSelectAll.bind(this);\n\n this.textarea = this.createContentEditableElement(props);\n\n this.observer = new MutationObserver((mutationsList, observer) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'characterData' || mutation.type === 'childList') {\n this.props.onImmediatelyChange?.(this.getValues(), this.textarea.textContent ?? '');\n }\n }\n });\n }\n\n uncontrolledProps() {\n return {\n value: null,\n linesCount: null,\n errorIndex: null,\n };\n }\n\n componentDidMount() {\n const { autoFocus, disabled, readonly } = this.asProps;\n\n this.containerRef.current?.append(this.textarea);\n\n this.handleValueOutChange();\n\n const config = {\n childList: true,\n characterData: true,\n subtree: true,\n };\n\n if (this.props.onImmediatelyChange) {\n this.observer.observe(this.textarea, config);\n }\n\n if (autoFocus && !disabled) {\n /* Safari & Firefox may silently ignore programmatic focus calls with very short\n delays (<10ms). Using 10ms as a safe threshold based on observed behavior.\n */\n setTimeout(() => this.textarea.focus(), 10);\n }\n }\n\n componentDidUpdate(prevProps: InputFieldProps<T>, prevState: State): void {\n const {\n value,\n errors,\n errorIndex,\n showErrors,\n disabled,\n readonly,\n highlightErrorIndex,\n lineProcessing,\n ['aria-describedby']: ariaDescribedby = '',\n } = this.props;\n\n if (prevProps.value !== value) {\n const currentValue = this.getValues().join(this.delimiter);\n if (\n typeof value === 'string'\n ? value !== currentValue\n : value.join(this.delimiter) !== currentValue\n ) {\n this.handleValueOutChange();\n }\n }\n\n if (prevProps.showErrors !== showErrors || prevProps.errors !== errors) {\n if (showErrors) {\n const errorsMap = new Map<number, ErrorItem>();\n errors.forEach((error: ErrorItem) => {\n errorsMap.set(error.lineIndex, error);\n });\n\n this.textarea.childNodes.forEach((node, index) => {\n if (node instanceof HTMLParagraphElement) {\n const errorItem = errorsMap.get(index);\n if (errorItem) {\n node.setAttribute('aria-invalid', 'true');\n node.dataset.errormessage = errorItem.errorMessage;\n } else {\n node.removeAttribute('aria-invalid');\n node.dataset.errormessage = undefined;\n }\n }\n });\n }\n\n this.toggleAriaInvalid(showErrors, errors.length);\n\n if (showErrors === false) {\n this.textarea.setAttribute('aria-describedby', ariaDescribedby);\n }\n }\n\n if (prevProps.errorIndex !== errorIndex && highlightErrorIndex) {\n this.handleChangeErrorIndex(errorIndex);\n }\n\n if (prevProps.disabled !== disabled || prevProps.readonly !== readonly) {\n if (this.isDisabled) {\n this.textarea.setAttribute('contenteditable', 'false');\n this.removeEventListeners(this.textarea);\n } else {\n this.textarea.setAttribute('contenteditable', 'true');\n this.addEventListeners(this.textarea);\n }\n\n if (disabled) {\n this.textarea.setAttribute('tabindex', '-1');\n } else {\n this.textarea.setAttribute('tabindex', '0');\n }\n }\n\n const { keyboardLineIndex } = this.state;\n\n if (prevState.keyboardLineIndex !== -1 && prevState.keyboardLineIndex !== keyboardLineIndex) {\n if (lineProcessing) {\n const lines = this.getValues();\n const newValue = lineProcessing(lines[prevState.keyboardLineIndex] ?? '', lines);\n const newValueTextNode = document.createTextNode(newValue);\n const paragraph = this.textarea.childNodes.item(prevState.keyboardLineIndex);\n\n if (paragraph instanceof HTMLParagraphElement) {\n if (newValue === '') {\n paragraph.innerHTML = this.emptyLineValue;\n } else {\n paragraph.replaceChild(newValueTextNode, paragraph.childNodes.item(0));\n }\n }\n\n this.validateLine(paragraph);\n\n setTimeout(() => {\n const newNode = this.textarea.childNodes.item(keyboardLineIndex);\n if (newNode) {\n this.setErrorIndex(newNode);\n }\n }, 0); // need this timeout to update errorIndex to the new (usually empty) line\n }\n\n if (!showErrors) {\n this.recalculateErrors();\n }\n this.recalculateLinesCount();\n this.asProps.onChangeLineIndex(keyboardLineIndex);\n }\n }\n\n componentWillUnmount() {\n this.removeEventListeners(this.textarea);\n\n this.observer.disconnect();\n }\n\n get isDisabled(): boolean {\n const { disabled, readonly } = this.asProps;\n\n return Boolean(disabled || readonly);\n }\n\n get popperDescribedId() {\n const { uid } = this.asProps;\n return `bulk-textarea-${uid}-popper-describedby`;\n }\n\n get errorMessage() {\n const { errors, errorIndex, commonErrorMessage, prevError } = this.asProps;\n const { mouseLineIndex, keyboardLineIndex } = this.state;\n const currentLineIndex =\n this.errorByInteraction === 'keyboard'\n ? keyboardLineIndex\n : this.errorByInteraction === 'mouse'\n ? mouseLineIndex\n : -1;\n let errorItem: ErrorItem | undefined = errors[errorIndex];\n\n if (currentLineIndex !== -1) {\n errorItem = errors.find((e) => e?.lineIndex === currentLineIndex);\n }\n\n const errorMessage =\n errors.length === 0 && !prevError // show any errors only if there are at least one error\n ? null\n : errorItem?.errorMessage ??\n (commonErrorMessage === '' || errors.length === 0\n ? prevError?.errorMessage\n : commonErrorMessage);\n const isCommonError =\n !errorItem?.errorMessage &&\n (commonErrorMessage === '' || errors.length === 0 ? !prevError?.errorMessage : true);\n\n return {\n errorMessage,\n isCommonError,\n };\n }\n\n createContentEditableElement(props: InputFieldProps<T>) {\n const textarea = document.createElement('div');\n textarea.setAttribute('contentEditable', props.disabled || props.readonly ? 'false' : 'true');\n textarea.setAttribute('role', 'textbox');\n textarea.setAttribute('classname', 'editable');\n\n if (props.id) {\n textarea.setAttribute('id', props.id);\n }\n if (props.placeholder) {\n textarea.setAttribute('placeholder', props.placeholder);\n }\n const { extractedAriaProps } = extractAriaProps(props);\n for (const key in extractedAriaProps) {\n const ariaProp: string | undefined = (props as any)[key];\n if (ariaProp) {\n textarea.setAttribute(key, ariaProp);\n }\n }\n\n if (!props.disabled) {\n textarea.setAttribute('tabIndex', '0');\n } else {\n textarea.setAttribute('tabIndex', '-1');\n }\n\n if (!props.disabled && !props.readonly) {\n this.addEventListeners(textarea);\n } else {\n textarea.addEventListener('keydown', this.handleSelectAll.bind(this));\n }\n\n return textarea;\n }\n\n handleValueOutChange() {\n const { value, onChangeLinesCount } = this.props;\n\n if (value === '') {\n this.textarea.textContent = '';\n onChangeLinesCount(0);\n } else {\n const listOfNodes = this.prepareNodesForPaste(value);\n\n this.textarea.replaceChildren(...listOfNodes);\n\n this.recalculateLinesCount();\n this.recalculateErrors();\n }\n }\n\n handleScroll(): void {\n if (this.scrollingTimeout) {\n clearTimeout(this.scrollingTimeout);\n }\n\n this.isScrolling = true;\n\n this.scrollingTimeout = window.setTimeout(() => {\n this.isScrolling = false;\n }, 50);\n }\n\n handleMouseDown(event: MouseEvent): void {\n const element = event.target;\n\n if (element instanceof HTMLElement) {\n // we need to change keyboardLineIndex, because the caret in real on that current row\n this.toggleErrorsPopper('keyboardLineIndex', element);\n\n this.setErrorIndex(element);\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n this.errorByInteraction = 'mouse';\n const element = event.target;\n\n if (element !== this.textarea) {\n if (\n this.isFocusing ||\n (element instanceof HTMLElement && element.getAttribute('aria-invalid') === 'true')\n ) {\n this.toggleErrorsPopper('mouseLineIndex', element);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n }\n\n handleMouseLeave(): void {\n if (this.changeTriggerTimeout) {\n clearTimeout(this.changeTriggerTimeout);\n }\n\n if (this.isFocusing) {\n this.errorByInteraction = 'keyboard';\n const rowNode = this.getNodeFromSelection();\n\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, 0);\n this.setState({ mouseLineIndex: -1 });\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n\n handlePaste(event: ClipboardEvent) {\n event.preventDefault();\n const { validateOn } = this.asProps;\n const value = event.clipboardData?.getData('text/plain');\n const listOfNodes = value ? this.prepareNodesForPaste(value) : [];\n\n if (listOfNodes.length === 0) return;\n\n const selection = document.getSelection();\n\n if (selection?.anchorNode && selection?.focusNode) {\n const anchorOffset = selection.anchorOffset;\n const focusOffset = selection.focusOffset;\n const documentPosition = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n const direction = this.getSelectionDirection();\n\n const anchorElement = direction === 'forward' ? selection.anchorNode : selection.focusNode;\n const focusElement = direction === 'forward' ? selection.focusNode : selection.anchorNode;\n const fromOffset = direction === 'forward' ? anchorOffset : focusOffset;\n const toOffset = direction === 'forward' ? focusOffset : anchorOffset;\n const anchorNode =\n anchorElement instanceof Text ? anchorElement.parentElement : anchorElement;\n const focusNode = focusElement instanceof Text ? focusElement.parentElement : focusElement;\n\n let textNode: ChildNode | null = null;\n let position: number | null = null;\n\n if (focusElement === this.textarea) {\n this.textarea.replaceChildren(...listOfNodes);\n\n const lastNodeToInsert = listOfNodes[listOfNodes.length - 1];\n textNode = lastNodeToInsert.childNodes.item(0);\n position = (lastNodeToInsert.textContent ?? '').length;\n } else if (\n focusNode instanceof HTMLParagraphElement &&\n anchorNode instanceof HTMLParagraphElement\n ) {\n const before = anchorNode?.textContent?.substring(0, fromOffset) ?? '';\n const after = focusNode?.textContent?.substring(toOffset) ?? '';\n\n const noEmptyLineBefore = before.trim() === '' ? '' : before;\n const noEmptyLineAfter = after.trim() === '' ? '' : after;\n\n selection.deleteFromDocument();\n\n if (documentPosition !== 0) {\n this.textarea.removeChild(focusNode);\n }\n\n const firstNodeToInsert = listOfNodes.splice(0, 1)[0];\n const lastNodeToInsert = listOfNodes[listOfNodes.length - 1];\n\n anchorNode.textContent = noEmptyLineBefore + (firstNodeToInsert?.textContent ?? '');\n\n anchorNode.after(...listOfNodes);\n\n if (lastNodeToInsert) {\n lastNodeToInsert.textContent = (lastNodeToInsert.textContent ?? '') + noEmptyLineAfter;\n textNode = lastNodeToInsert.childNodes.item(0);\n position = (lastNodeToInsert.textContent ?? '').length;\n\n this.validateLine(lastNodeToInsert);\n this.setErrorIndex(lastNodeToInsert);\n } else {\n position = (anchorNode.textContent ?? '').length;\n anchorNode.textContent = (anchorNode.textContent ?? '') + noEmptyLineAfter;\n textNode = anchorNode.childNodes.item(0);\n\n this.validateLine(anchorNode);\n this.setErrorIndex(anchorNode);\n }\n }\n\n if (textNode instanceof Text) {\n this.setSelection(textNode, position ?? 1, position ?? 1);\n this.toggleErrorsPopper('keyboardLineIndex', textNode.parentNode);\n } else {\n // eslint-disable-next-line no-console\n console.warn('incorrect child type', textNode, textNode?.parentNode);\n }\n }\n\n this.recalculateLinesCount();\n\n if (validateOn.includes('paste') || this.asProps.showErrors) {\n this.recalculateErrors();\n }\n }\n\n handleChange(event: Event) {\n const target = event.target;\n if (target instanceof HTMLDivElement && event instanceof InputEvent) {\n const nodes = this.textarea.childNodes;\n const firstNode = nodes.item(0);\n const secondNode = nodes.item(1);\n const selection = document.getSelection();\n\n if (firstNode instanceof Text) {\n const nodeText = firstNode.textContent ?? '';\n const firstRow = document.createElement('p');\n const text = document.createTextNode(nodeText);\n firstRow.append(text);\n firstNode.replaceWith(firstRow);\n\n selection?.setPosition(firstRow, nodeText.length);\n } else if (!firstNode || (firstNode instanceof HTMLBRElement && nodes.length === 1)) {\n this.textarea.textContent = '';\n this.setState({ keyboardLineIndex: 0 });\n } else if (firstNode instanceof HTMLParagraphElement && !firstNode.textContent?.trim()) {\n if (nodes.length <= 1 || secondNode instanceof HTMLBRElement) {\n this.textarea.textContent = '';\n this.setState({ keyboardLineIndex: 0 });\n }\n }\n\n let maxDeep = 10;\n let rowNode = selection?.focusNode;\n\n while (rowNode?.parentNode !== this.textarea && maxDeep > 0) {\n rowNode = rowNode?.parentNode;\n maxDeep--;\n }\n\n if (rowNode instanceof HTMLParagraphElement) {\n const childNodes = rowNode.childNodes;\n const textContent = rowNode.textContent ?? '';\n\n if (childNodes.length > 1) {\n const offset = childNodes.item(0).textContent?.length;\n\n rowNode.textContent = textContent;\n\n if (offset) {\n this.setSelection(rowNode.childNodes.item(0), offset, offset);\n }\n }\n\n if (textContent.length > 0) {\n const firstSymbol = textContent.at(0);\n const lastSymbol = textContent.at(textContent.length - 1);\n\n if (\n firstSymbol === this.getEmptyParagraph().textContent ||\n lastSymbol === this.getEmptyParagraph().textContent\n ) {\n let offset: number | null = null;\n if (firstSymbol === this.getEmptyParagraph().textContent) {\n rowNode.textContent = textContent.substring(1);\n offset =\n event.inputType === 'deleteContentBackward' ||\n event.inputType === 'deleteContentForward'\n ? 0\n : rowNode.textContent.length;\n } else if (lastSymbol === this.getEmptyParagraph().textContent) {\n rowNode.textContent = textContent.substring(0, textContent.length - 1);\n offset = rowNode.textContent.length;\n }\n\n if (offset) {\n this.setSelection(rowNode.childNodes.item(0), offset, offset);\n }\n }\n } else if (childNodes.length === 1 && childNodes[0] instanceof HTMLBRElement) {\n rowNode.innerHTML = this.emptyLineValue;\n }\n\n const { errors, showErrors } = this.asProps;\n const isValid = this.validateLine(rowNode);\n this.recalculateErrors();\n this.setErrorIndex(rowNode);\n\n if (!isValid && showErrors) {\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, 0);\n }\n\n const trigger =\n !isValid || (isValid && errors.length === 1 && errors[0].lineNode === rowNode)\n ? rowNode\n : this.textarea;\n\n if (showErrors && this.popper?.current?.state.elements.reference !== trigger) {\n if (this.shouldChangePopperTrigger(trigger)) {\n this.setPopperTrigger?.(trigger);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n } else if (rowNode === null) {\n this.setPopperTrigger?.(this.textarea);\n\n if (selection?.focusNode === this.textarea && this.textarea.childNodes.length > 1) {\n const nodeIndex = selection.focusOffset;\n const emptyParagraph = this.textarea.childNodes.item(nodeIndex - 1);\n const emptyBr = this.textarea.childNodes.item(nodeIndex);\n\n this.textarea.removeChild(emptyBr);\n\n if (emptyParagraph instanceof HTMLParagraphElement) {\n emptyParagraph.innerHTML = this.emptyLineValue;\n }\n\n if (emptyParagraph) {\n this.setSelection(emptyParagraph, 0, 0);\n }\n } else {\n this.setSelection(this.textarea, 0, 0);\n }\n }\n\n this.recalculateLinesCount();\n }\n }\n\n handleFocus() {\n this.isFocusing = true;\n this.errorByInteraction = 'keyboard';\n\n if (this.asProps.showErrors) {\n this.toggleErrorsPopperByKeyboard(150);\n } else {\n this.toggleErrorsPopper('keyboardLineIndex', this.textarea);\n }\n }\n\n handleBlur(event: Event) {\n this.isFocusing = false;\n this.setState({ visibleErrorPopper: false });\n\n const { validateOn, onBlur, value } = this.asProps;\n\n if (validateOn.includes('blur')) {\n this.recalculateErrors();\n }\n\n const valueToChange =\n typeof value === 'string' ? this.getValues().join(this.delimiter) : this.getValues();\n\n onBlur(valueToChange as T, event);\n\n setTimeout(() => {\n this.setState({ keyboardLineIndex: -1 });\n }, 200);\n }\n\n handleKeyDown(event: KeyboardEvent) {\n this.errorByInteraction = 'keyboard';\n const { linesDelimiters } = this.asProps;\n\n const currentNode = this.getNodeFromSelection();\n\n if (event.key === 'Enter' || linesDelimiters?.includes(event.key)) {\n if (currentNode === this.textarea) {\n event.preventDefault();\n }\n if (currentNode instanceof HTMLParagraphElement) {\n const currentRowValue = currentNode.textContent?.trim();\n\n if (!currentRowValue) {\n event.preventDefault();\n } else {\n event.preventDefault();\n const selection = document.getSelection();\n const selectionNode =\n selection?.focusNode instanceof Text\n ? selection.focusNode\n : selection?.focusNode?.childNodes.item(0);\n const selectionOffset = selection?.focusOffset;\n\n let newRowValue = '';\n\n if (\n selectionNode instanceof Text &&\n selectionOffset !== undefined &&\n selectionOffset !== selectionNode.textContent?.length\n ) {\n newRowValue =\n selectionNode.textContent?.substring(selectionOffset) ?? this.emptyLineValue;\n\n if (selectionNode.textContent) {\n selectionNode.textContent = selectionNode.textContent.substring(0, selectionOffset);\n }\n }\n\n if (currentNode.textContent?.trim() === '') {\n currentNode.innerHTML = this.emptyLineValue;\n }\n\n const row = document.createElement('p');\n if (newRowValue) {\n row.textContent = newRowValue;\n } else {\n row.innerHTML = this.emptyLineValue;\n }\n currentNode.after(row);\n\n this.setSelection(row, 0, 0);\n\n this.validateLine(currentNode);\n this.validateLine(row);\n if (currentNode.previousSibling) {\n this.validateLine(currentNode.previousSibling);\n }\n this.setErrorIndex(row);\n\n if (row.textContent?.trim() !== '') {\n this.recalculateLinesCount();\n }\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n }\n } else if (\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight'\n ) {\n if (currentNode instanceof HTMLParagraphElement) {\n this.handleCursorMovement(currentNode, event);\n }\n this.toggleErrorsPopperByKeyboard(200);\n } else if (this.isDeleteKey(event) && currentNode instanceof HTMLParagraphElement) {\n if (currentNode.textContent?.trim() === '' && !this.isRangeSelection()) {\n // Backspace on empty row\n const prevNode = currentNode.previousSibling;\n if (prevNode instanceof HTMLParagraphElement) {\n event.preventDefault();\n this.textarea.removeChild(currentNode);\n this.toggleErrorsPopperByKeyboard(0);\n\n if (\n prevNode.textContent?.trim() === '' &&\n prevNode.previousSibling === null &&\n this.textarea.childNodes.length === 1\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n if (prevNode instanceof HTMLParagraphElement) {\n const text = prevNode.childNodes.item(0);\n const offset = text.textContent?.length ?? 0;\n this.setSelection(text, offset, offset);\n } else {\n // eslint-disable-next-line no-console\n console.warn('incorrect prevNode type', prevNode);\n }\n }\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n } else if (this.isRangeSelection()) {\n const selection = document.getSelection();\n\n const direction = this.getSelectionDirection();\n const anchorElement =\n direction === 'backward' ? selection?.focusNode : selection?.anchorNode;\n const focusElement =\n direction === 'backward' ? selection?.anchorNode : selection?.focusNode;\n const anchorOffset =\n direction === 'backward' ? selection?.focusOffset : selection?.anchorOffset;\n const focusOffset =\n direction === 'backward' ? selection?.anchorOffset : selection?.focusOffset;\n\n // Backspace on selected full row\n if (\n anchorElement === focusElement &&\n anchorOffset === 0 &&\n ((focusElement === currentNode && focusOffset === 1) ||\n focusOffset === currentNode.textContent?.length)\n ) {\n event.preventDefault();\n\n const anchorParagraph = anchorElement?.parentElement;\n const focusParagraph = focusElement?.parentElement;\n const childNodes = this.textarea.childNodes;\n if (\n anchorParagraph === childNodes.item(0) &&\n focusParagraph === childNodes.item(childNodes.length - 1)\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n currentNode.innerHTML = this.emptyLineValue;\n this.validateLine(currentNode);\n }\n\n this.setErrorIndex(currentNode);\n this.recalculateLinesCount();\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n } else if (\n focusElement !== anchorElement &&\n focusElement instanceof Text &&\n anchorElement instanceof Text &&\n focusElement?.textContent === focusElement?.parentNode?.textContent &&\n anchorElement?.textContent === anchorElement?.parentNode?.textContent &&\n anchorOffset === 0 &&\n focusOffset === focusElement?.parentNode?.textContent?.length\n ) { // Backspace on selected few full rows\n event.preventDefault();\n\n const paragraphs = Array.from(this.textarea.children);\n const anchorParagraph = anchorElement.parentElement;\n const focusParagraph = focusElement.parentElement;\n const childNodes = this.textarea.childNodes;\n\n if (\n anchorParagraph === childNodes.item(0) &&\n focusParagraph === childNodes.item(childNodes.length - 1)\n ) {\n this.textarea.textContent = '';\n this.setSelection(this.textarea, 0, 0);\n } else {\n let isCleaning = false;\n\n for (const paragraph of paragraphs) {\n if (paragraph === anchorParagraph || isCleaning) {\n isCleaning = true;\n\n if (paragraph === focusParagraph) {\n focusParagraph.innerHTML = this.emptyLineValue;\n this.setSelection(focusParagraph, 0, 0);\n break;\n } else {\n this.textarea.removeChild(paragraph);\n }\n }\n }\n\n this.validateLine(currentNode);\n }\n\n this.setErrorIndex(currentNode);\n this.recalculateLinesCount();\n\n setTimeout(() => {\n this.recalculateErrors();\n }, 0);\n\n this.toggleErrorsPopperByKeyboard(0);\n }\n }\n } else if (event.key === 'z' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n }\n }\n\n render() {\n const SInputField = Root;\n const { styles, showErrors } = this.asProps;\n const { visibleErrorPopper } = this.state;\n\n const { errorMessage, isCommonError } = this.errorMessage;\n const visibleErrorTooltip =\n showErrors && visibleErrorPopper && Boolean(errorMessage) && !this.isDisabled;\n\n const { __excludeProps } = extractAriaProps(this.asProps);\n\n return sstyled(styles)(\n <>\n <Tooltip\n interaction='none'\n placement={isCommonError ? 'right-start' : 'right'}\n visible={visibleErrorTooltip}\n theme='warning'\n offset={isCommonError ? undefined : [0, 26]}\n preventOverflow={{\n boundary: this.containerRef.current ?? undefined,\n tether: false,\n }}\n >\n {({ popper, setTrigger }) => {\n if (!this.popper) {\n this.setPopperTrigger = setTrigger;\n // @ts-ignore\n this.popper = popper;\n }\n\n return <Tooltip.Popper id={this.popperDescribedId}>{errorMessage}</Tooltip.Popper>;\n }}\n </Tooltip>\n <SInputField\n render={Box}\n ref={this.containerRef}\n __excludeProps={['onBlur', 'value', ...__excludeProps]}\n />\n </>,\n );\n }\n\n private prepareNodesForPaste(value: string | string[]): HTMLParagraphElement[] {\n const listOfNodes: HTMLParagraphElement[] = [];\n const { pasteProps } = this.asProps;\n const lineProcessing =\n pasteProps?.lineProcessing ??\n ((line: string) => {\n const trimmedLine = line.trim();\n return trimmedLine === '' ? line : trimmedLine;\n });\n const skipEmptyLines = pasteProps?.skipEmptyLines ?? this.skipEmptyLines;\n const delimiter = pasteProps?.delimiter ?? this.delimiter;\n const lines: string[] = Array.isArray(value) ? value : value.split(delimiter);\n\n lines.forEach((line, index) => {\n const preparedLine = lineProcessing(line, index, lines.length);\n\n if ((preparedLine === '' && skipEmptyLines === false) || preparedLine !== '') {\n const node = document.createElement('p');\n\n if (preparedLine === '') {\n node.innerHTML = this.emptyLineValue;\n } else if (preparedLine.trim() === '') {\n const allSpacesRegExp = new RegExp('\\\\s', 'g');\n node.innerHTML = DOMPurify.sanitize(\n preparedLine.replace(allSpacesRegExp, this.spaceLineValue),\n );\n } else {\n node.append(document.createTextNode(preparedLine));\n }\n\n listOfNodes.push(node);\n\n this.validateLine(node);\n }\n });\n\n return listOfNodes;\n }\n\n private recalculateErrors(): void {\n const errors: ErrorItem[] = [];\n\n this.textarea.childNodes.forEach((node, index) => {\n if (node instanceof HTMLParagraphElement && node.getAttribute('aria-invalid') === 'true') {\n const errorItem = {\n errorMessage: node.dataset.errormessage ?? '',\n lineNode: node,\n lineIndex: index,\n };\n errors.push(errorItem);\n }\n });\n\n this.asProps.onErrorsChange(errors);\n }\n\n private recalculateLinesCount(): void {\n if (this.linesCountTimeout) {\n clearTimeout(this.linesCountTimeout);\n }\n\n this.linesCountTimeout = window.setTimeout(() => {\n let lines = 0;\n const { maxLines, linesCount } = this.asProps;\n\n this.textarea.childNodes.forEach((node) => {\n if (node instanceof HTMLParagraphElement) {\n node.dataset.overMaxRows = 'false';\n\n if (\n node.textContent !== this.getEmptyParagraph().textContent &&\n node.textContent !== ''\n ) {\n lines++;\n\n if (lines > maxLines) {\n node.dataset.overMaxRows = 'true';\n }\n }\n }\n });\n\n if (linesCount !== lines) {\n this.asProps.onChangeLinesCount(lines);\n }\n }, 100);\n }\n\n private getValues(): string[] {\n const values: string[] = [];\n this.textarea.childNodes.forEach((node) => {\n if (node.textContent?.trim() === '') {\n values.push('');\n } else {\n values.push(node.textContent ?? '');\n }\n });\n\n return values;\n }\n\n private shouldChangePopperTrigger(node: HTMLElement): boolean {\n return (\n this.textarea !== node || (this.textarea === node && Boolean(this.asProps.commonErrorMessage))\n );\n }\n\n private toggleErrorsPopperByKeyboard(timer: number) {\n if (this.toggleErrorsPopperTimeout) {\n clearTimeout(this.toggleErrorsPopperTimeout);\n }\n\n if (!this.isScrolling) {\n setTimeout(() => {\n const rowNode = this.getNodeFromSelection();\n\n this.toggleErrorsPopper('keyboardLineIndex', rowNode, timer);\n }, 0);\n } else {\n this.toggleErrorsPopperTimeout = window.setTimeout(() => {\n this.toggleErrorsPopperByKeyboard(timer);\n }, 50);\n }\n }\n\n private toggleErrorsPopper(key: IndexKeys, target?: unknown, timer?: number) {\n if (target instanceof HTMLDivElement || target instanceof HTMLParagraphElement) {\n if (this.changeTriggerTimeout) {\n clearTimeout(this.changeTriggerTimeout);\n }\n\n this.changeTriggerTimeout = window.setTimeout(() => {\n const targetElement = target === this.textarea ? this.getNodeFromSelection() : target;\n\n let lineIndex = -1;\n let isInvalidRow = false;\n\n if (targetElement instanceof HTMLParagraphElement) {\n isInvalidRow = targetElement.getAttribute('aria-invalid') === 'true';\n lineIndex = Array.from(this.textarea.childNodes).indexOf(targetElement);\n } else if (targetElement === this.textarea) {\n lineIndex = 0;\n }\n\n if (targetElement instanceof HTMLElement) {\n this.setState(\n (prevState) => {\n const newState: State = {\n visibleErrorPopper:\n this.isFocusing && Boolean(this.asProps.commonErrorMessage) ? true : isInvalidRow,\n mouseLineIndex: prevState.mouseLineIndex,\n keyboardLineIndex: prevState.keyboardLineIndex,\n };\n\n if (this.isFocusing || (key === 'mouseLineIndex' && isInvalidRow)) {\n newState[key] = lineIndex;\n }\n\n return newState;\n },\n () => {\n this.errorByInteraction = key === 'mouseLineIndex' ? 'mouse' : 'keyboard';\n\n const trigger = isInvalidRow ? targetElement : this.textarea;\n\n if (this.shouldChangePopperTrigger(trigger)) {\n this.setPopperTrigger?.(trigger);\n\n this.forceUpdate();\n }\n },\n );\n }\n }, timer ?? 50);\n } else {\n this.setState({ visibleErrorPopper: false });\n }\n }\n\n private toggleAriaInvalid(showErrors: boolean, errorsLength: number): void {\n if (showErrors && errorsLength > 0) {\n this.textarea.setAttribute('aria-describedby', this.popperDescribedId);\n this.textarea.setAttribute('aria-invalid', 'true');\n } else {\n this.textarea.removeAttribute('aria-invalid');\n this.textarea.removeAttribute('aria-describedby');\n }\n }\n\n private handleChangeErrorIndex(errorIndex: number): void {\n const error: ErrorItem | undefined = this.asProps.errors[errorIndex];\n const childNodes = this.textarea.childNodes;\n\n const node = error ? error.lineNode ?? childNodes.item(error.lineIndex) : null;\n const selection = document.getSelection();\n\n if (selection && node instanceof HTMLParagraphElement) {\n this.setState({ visibleErrorPopper: false });\n\n setTimeout(() => {\n const text = node.childNodes.item(0);\n if (text instanceof Text) {\n this.setSelection(text, 0, text.length);\n } else {\n this.setSelection(node, 0, 1);\n }\n }, 150);\n }\n }\n\n private validateLine(node: Node): boolean {\n const { lineValidation } = this.asProps;\n if (lineValidation && node instanceof HTMLElement) {\n const { isValid, errorMessage } = lineValidation(node.textContent ?? '', this.getValues());\n\n if (!isValid) {\n node.setAttribute('aria-invalid', 'true');\n node.dataset.errormessage = errorMessage;\n } else {\n node.removeAttribute('aria-invalid');\n node.dataset.errormessage = undefined;\n }\n\n return isValid;\n }\n\n return true;\n }\n\n private setSelection(\n node: Node,\n start: number,\n end: number,\n scrollType: 'center' | 'nearest' = 'center',\n ): void {\n const selection = document.getSelection();\n const range = document.createRange();\n range.setStart(node, start);\n range.setEnd(node, end);\n\n selection?.removeAllRanges();\n selection?.addRange(range);\n\n const nodeToScroll = node instanceof Text ? node.parentNode : node;\n\n if (nodeToScroll instanceof HTMLElement) {\n nodeToScroll.scrollIntoView({\n block: scrollType,\n inline: scrollType,\n behavior: 'smooth',\n });\n }\n }\n\n private getNodeFromSelection(): Node | null {\n const selection = document.getSelection();\n\n const rowNode =\n selection?.focusNode instanceof Text ? selection.focusNode.parentNode : selection?.focusNode;\n\n return rowNode ?? null;\n }\n\n private handleCursorMovement(currentNode: HTMLParagraphElement, event: KeyboardEvent): void {\n let nextNode: ChildNode | null = null;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n nextNode = currentNode.previousSibling;\n break;\n case 'ArrowDown':\n event.preventDefault();\n nextNode = currentNode.nextSibling;\n break;\n case 'ArrowLeft': {\n if (currentNode.textContent === this.getEmptyParagraph().textContent) {\n event.preventDefault();\n nextNode = currentNode.previousSibling;\n }\n break;\n }\n case 'ArrowRight': {\n if (currentNode.textContent === this.getEmptyParagraph().textContent) {\n event.preventDefault();\n nextNode = currentNode.nextSibling;\n }\n }\n }\n\n if (nextNode instanceof HTMLParagraphElement) {\n const selection = document.getSelection();\n const firstNode = nextNode.childNodes.item(0);\n const nodeToSetSelection = firstNode instanceof Text ? firstNode : nextNode;\n const textNode = nextNode.textContent?.trim() ?? '';\n const currentOffset = selection?.focusOffset ?? 0;\n let offset = currentOffset <= textNode.length ? currentOffset : textNode.length;\n\n // it only works if node is empty, that's why here we could set 0 or node.length\n if (event.key === 'ArrowLeft') {\n offset = textNode.length;\n } else if (event.key === 'ArrowRight') {\n offset = 0;\n }\n\n this.setSelection(nodeToSetSelection, offset, offset, 'nearest');\n }\n }\n\n private setErrorIndex(nodeToCompare: Node): void {\n const errorIndex = Array.from(this.textarea.childNodes)\n .filter((node) => {\n return node instanceof Element && node.getAttribute('aria-invalid') === 'true';\n })\n .findIndex((node) => {\n return node === nodeToCompare;\n });\n\n this.handlers.errorIndex(errorIndex);\n }\n\n private isDeleteKey(event: KeyboardEvent): boolean {\n return event.key === 'Backspace' || (event.key === 'x' && (event.ctrlKey || event.metaKey));\n }\n\n private getEmptyParagraph() {\n const element = document.createElement('p');\n\n element.innerHTML = this.emptyLineValue;\n\n return element;\n }\n\n private addEventListeners(textarea: HTMLElement) {\n textarea.addEventListener('paste', this.handlePaste);\n textarea.addEventListener('input', this.handleChange);\n textarea.addEventListener('focus', this.handleFocus);\n textarea.addEventListener('blur', this.handleBlur);\n textarea.addEventListener('keydown', this.handleKeyDown);\n textarea.addEventListener('mousedown', this.handleMouseDown);\n textarea.addEventListener('mousemove', this.handleMouseMove);\n textarea.addEventListener('mouseleave', this.handleMouseLeave);\n textarea.addEventListener('scroll', this.handleScroll);\n\n textarea.removeEventListener('keydown', this.handleSelectAll);\n }\n\n private removeEventListeners(textarea: HTMLElement) {\n textarea.removeEventListener('paste', this.handlePaste);\n textarea.removeEventListener('input', this.handleChange);\n textarea.removeEventListener('focus', this.handleFocus);\n textarea.removeEventListener('blur', this.handleBlur);\n textarea.removeEventListener('keydown', this.handleKeyDown);\n textarea.removeEventListener('mousedown', this.handleMouseDown);\n textarea.removeEventListener('mousemove', this.handleMouseMove);\n textarea.removeEventListener('mouseleave', this.handleMouseLeave);\n textarea.removeEventListener('scroll', this.handleScroll);\n\n textarea.addEventListener('keydown', this.handleSelectAll);\n }\n\n private handleSelectAll(event: KeyboardEvent) {\n if (event.key === 'a' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n\n const node = event.target;\n if (node instanceof HTMLElement && node === this.textarea) {\n this.setSelection(node, 0, node.childNodes.length);\n }\n }\n }\n\n private isRangeSelection(): boolean {\n const selection = document.getSelection();\n\n return (\n selection?.focusNode !== selection?.anchorNode ||\n selection?.focusOffset !== selection?.anchorOffset\n );\n }\n\n private getSelectionDirection(): 'forward' | 'backward' | null {\n const selection = document.getSelection();\n\n if (selection?.anchorNode && selection?.focusNode) {\n const documentPosition = selection.anchorNode.compareDocumentPosition(selection.focusNode);\n\n if (\n (documentPosition === 0 && selection.anchorOffset > selection.focusOffset) || // if nodes are the same\n documentPosition === Node.DOCUMENT_POSITION_PRECEDING\n ) {\n return 'backward';\n }\n\n return 'forward';\n }\n\n return null;\n }\n}\n\nexport { InputField };\nexport type { InputFieldProps, ErrorItem };\n"],"mappings":";;;AAAA,SAASA,GAAG,QAAQ,0BAA0B;AAE9C,SAASC,SAAS,EAAEC,OAAO,EAAEC,IAAI,QAAQ,eAAe;AACxD,SAASC,gBAAgB,QAAQ,mCAAmC;AACpE,OAAOC,mBAAmB,MAAM,kCAAkC;AAClE,OAAOC,OAAO,MAAM,kBAAkB;AACtC,OAAOC,SAAS,MAAM,WAAW;AACjC,OAAOC,KAAK,MAAM,OAAO;AAAC;AAAA,MAAAC,KAAA,8BAAAC,QAAA,CAAAC,MAAA;AAAA;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;AAa1B,MAAMC,UAAU,SAAsCX,SAAS,CAU7D;EAgDAY,WAAWA,CAACC,KAAyB,EAAE;IACrC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,oBAhCH,IAAI;IAAAA,eAAA,yBACC,IAAI;IAAAA,eAAA,yBACJ,UAAU;IAAAA,eAAA,yBACV,QAAQ;IAAAA,eAAA,oCAEVP,KAAK,CAACQ,SAAS,CAAiB,CAAC;IAAAD,eAAA;IAAAA,eAAA,iBAGP,IAAI;IAAAA,eAAA,2BACU,IAAI;IAAAA,eAAA,6BAET,IAAI;IAAAA,eAAA,+BAE/B,CAAC;IAAAA,eAAA,sBACV,KAAK;IAAAA,eAAA,2BACA,CAAC;IAAAA,eAAA,oCAEQ,CAAC;IAAAA,eAAA,qBAEhB,KAAK;IAAAA,eAAA,4BAEE,CAAC;IAAAA,eAAA;IAAAA,eAAA,gBAIb;MACNE,kBAAkB,EAAE,KAAK;MACzBC,iBAAiB,EAAE,CAAC,CAAC;MACrBC,cAAc,EAAE,CAAC;IACnB,CAAC;IAKC,IAAI,CAACC,WAAW,GAAG,IAAI,CAACA,WAAW,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACD,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACF,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACG,UAAU,GAAG,IAAI,CAACA,UAAU,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACI,aAAa,GAAG,IAAI,CAACA,aAAa,CAACJ,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACK,eAAe,GAAG,IAAI,CAACA,eAAe,CAACL,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACM,eAAe,GAAG,IAAI,CAACA,eAAe,CAACN,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACO,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACP,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACQ,YAAY,GAAG,IAAI,CAACA,YAAY,CAACR,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACS,eAAe,GAAG,IAAI,CAACA,eAAe,CAACT,IAAI,CAAC,IAAI,CAAC;IAEtD,IAAI,CAACU,QAAQ,GAAG,IAAI,CAACC,4BAA4B,CAAClB,KAAK,CAAC;IAExD,IAAI,CAACmB,QAAQ,GAAG,IAAIC,gBAAgB,CAAC,CAACC,aAAa,EAAEF,QAAQ,KAAK;MAChE,KAAK,MAAMG,QAAQ,IAAID,aAAa,EAAE;QACpC,IAAIC,QAAQ,CAACC,IAAI,KAAK,eAAe,IAAID,QAAQ,CAACC,IAAI,KAAK,WAAW,EAAE;UACtE,IAAI,CAACvB,KAAK,CAACwB,mBAAmB,GAAG,IAAI,CAACC,SAAS,CAAC,CAAC,EAAE,IAAI,CAACR,QAAQ,CAACS,WAAW,IAAI,EAAE,CAAC;QACrF;MACF;IACF,CAAC,CAAC;EACJ;EAEAC,iBAAiBA,CAAA,EAAG;IAClB,OAAO;MACLC,KAAK,EAAE,IAAI;MACXC,UAAU,EAAE,IAAI;MAChBC,UAAU,EAAE;IACd,CAAC;EACH;EAEAC,iBAAiBA,CAAA,EAAG;IAClB,MAAM;MAAEC,SAAS;MAAEC,QAAQ;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACC,OAAO;IAEtD,IAAI,CAACC,YAAY,CAACC,OAAO,EAAEC,MAAM,CAAC,IAAI,CAACrB,QAAQ,CAAC;IAEhD,IAAI,CAACsB,oBAAoB,CAAC,CAAC;IAE3B,MAAMC,MAAM,GAAG;MACbC,SAAS,EAAE,IAAI;MACfC,aAAa,EAAE,IAAI;MACnBC,OAAO,EAAE;IACX,CAAC;IAED,IAAI,IAAI,CAAC3C,KAAK,CAACwB,mBAAmB,EAAE;MAClC,IAAI,CAACL,QAAQ,CAACyB,OAAO,CAAC,IAAI,CAAC3B,QAAQ,EAAEuB,MAAM,CAAC;IAC9C;IAEA,IAAIR,SAAS,IAAI,CAACC,QAAQ,EAAE;MAC1B;AACN;AACA;MACMY,UAAU,CAAC,MAAM,IAAI,CAAC5B,QAAQ,CAAC6B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IAC7C;EACF;EAEAC,kBAAkBA,CAACC,SAA6B,EAAEC,SAAgB,EAAQ;IACxE,MAAM;MACJrB,KAAK;MACLsB,MAAM;MACNpB,UAAU;MACVqB,UAAU;MACVlB,QAAQ;MACRC,QAAQ;MACRkB,mBAAmB;MACnBC,cAAc;MACd,CAAC,kBAAkB,GAAGC,eAAe,GAAG;IAC1C,CAAC,GAAG,IAAI,CAACtD,KAAK;IAEd,IAAIgD,SAAS,CAACpB,KAAK,KAAKA,KAAK,EAAE;MAC7B,MAAM2B,YAAY,GAAG,IAAI,CAAC9B,SAAS,CAAC,CAAC,CAAC+B,IAAI,CAAC,IAAI,CAACC,SAAS,CAAC;MAC1D,IACE,OAAO7B,KAAK,KAAK,QAAQ,GACrBA,KAAK,KAAK2B,YAAY,GACtB3B,KAAK,CAAC4B,IAAI,CAAC,IAAI,CAACC,SAAS,CAAC,KAAKF,YAAY,EAC/C;QACA,IAAI,CAAChB,oBAAoB,CAAC,CAAC;MAC7B;IACF;IAEA,IAAIS,SAAS,CAACG,UAAU,KAAKA,UAAU,IAAIH,SAAS,CAACE,MAAM,KAAKA,MAAM,EAAE;MACtE,IAAIC,UAAU,EAAE;QACd,MAAMO,SAAS,GAAG,IAAIC,GAAG,CAAoB,CAAC;QAC9CT,MAAM,CAACU,OAAO,CAAEC,KAAgB,IAAK;UACnCH,SAAS,CAACI,GAAG,CAACD,KAAK,CAACE,SAAS,EAAEF,KAAK,CAAC;QACvC,CAAC,CAAC;QAEF,IAAI,CAAC5C,QAAQ,CAAC+C,UAAU,CAACJ,OAAO,CAAC,CAACK,IAAI,EAAEC,KAAK,KAAK;UAChD,IAAID,IAAI,YAAYE,oBAAoB,EAAE;YACxC,MAAMC,SAAS,GAAGV,SAAS,CAACW,GAAG,CAACH,KAAK,CAAC;YACtC,IAAIE,SAAS,EAAE;cACbH,IAAI,CAACK,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;cACzCL,IAAI,CAACM,OAAO,CAACC,YAAY,GAAGJ,SAAS,CAACK,YAAY;YACpD,CAAC,MAAM;cACLR,IAAI,CAACS,eAAe,CAAC,cAAc,CAAC;cACpCT,IAAI,CAACM,OAAO,CAACC,YAAY,GAAGG,SAAS;YACvC;UACF;QACF,CAAC,CAAC;MACJ;MAEA,IAAI,CAACC,iBAAiB,CAACzB,UAAU,EAAED,MAAM,CAAC2B,MAAM,CAAC;MAEjD,IAAI1B,UAAU,KAAK,KAAK,EAAE;QACxB,IAAI,CAAClC,QAAQ,CAACqD,YAAY,CAAC,kBAAkB,EAAEhB,eAAe,CAAC;MACjE;IACF;IAEA,IAAIN,SAAS,CAAClB,UAAU,KAAKA,UAAU,IAAIsB,mBAAmB,EAAE;MAC9D,IAAI,CAAC0B,sBAAsB,CAAChD,UAAU,CAAC;IACzC;IAEA,IAAIkB,SAAS,CAACf,QAAQ,KAAKA,QAAQ,IAAIe,SAAS,CAACd,QAAQ,KAAKA,QAAQ,EAAE;MACtE,IAAI,IAAI,CAAC6C,UAAU,EAAE;QACnB,IAAI,CAAC9D,QAAQ,CAACqD,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACtD,IAAI,CAACU,oBAAoB,CAAC,IAAI,CAAC/D,QAAQ,CAAC;MAC1C,CAAC,MAAM;QACL,IAAI,CAACA,QAAQ,CAACqD,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACrD,IAAI,CAACW,iBAAiB,CAAC,IAAI,CAAChE,QAAQ,CAAC;MACvC;MAEA,IAAIgB,QAAQ,EAAE;QACZ,IAAI,CAAChB,QAAQ,CAACqD,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;MAC9C,CAAC,MAAM;QACL,IAAI,CAACrD,QAAQ,CAACqD,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;MAC7C;IACF;IAEA,MAAM;MAAElE;IAAkB,CAAC,GAAG,IAAI,CAAC8E,KAAK;IAExC,IAAIjC,SAAS,CAAC7C,iBAAiB,KAAK,CAAC,CAAC,IAAI6C,SAAS,CAAC7C,iBAAiB,KAAKA,iBAAiB,EAAE;MAC3F,IAAIiD,cAAc,EAAE;QAClB,MAAM8B,KAAK,GAAG,IAAI,CAAC1D,SAAS,CAAC,CAAC;QAC9B,MAAM2D,QAAQ,GAAG/B,cAAc,CAAC8B,KAAK,CAAClC,SAAS,CAAC7C,iBAAiB,CAAC,IAAI,EAAE,EAAE+E,KAAK,CAAC;QAChF,MAAME,gBAAgB,GAAGC,QAAQ,CAACC,cAAc,CAACH,QAAQ,CAAC;QAC1D,MAAMI,SAAS,GAAG,IAAI,CAACvE,QAAQ,CAAC+C,UAAU,CAACyB,IAAI,CAACxC,SAAS,CAAC7C,iBAAiB,CAAC;QAE5E,IAAIoF,SAAS,YAAYrB,oBAAoB,EAAE;UAC7C,IAAIiB,QAAQ,KAAK,EAAE,EAAE;YACnBI,SAAS,CAACE,SAAS,GAAG,IAAI,CAACC,cAAc;UAC3C,CAAC,MAAM;YACLH,SAAS,CAACI,YAAY,CAACP,gBAAgB,EAAEG,SAAS,CAACxB,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC,CAAC;UACxE;QACF;QAEA,IAAI,CAACI,YAAY,CAACL,SAAS,CAAC;QAE5B3C,UAAU,CAAC,MAAM;UACf,MAAMiD,OAAO,GAAG,IAAI,CAAC7E,QAAQ,CAAC+C,UAAU,CAACyB,IAAI,CAACrF,iBAAiB,CAAC;UAChE,IAAI0F,OAAO,EAAE;YACX,IAAI,CAACC,aAAa,CAACD,OAAO,CAAC;UAC7B;QACF,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;MACT;MAEA,IAAI,CAAC3C,UAAU,EAAE;QACf,IAAI,CAAC6C,iBAAiB,CAAC,CAAC;MAC1B;MACA,IAAI,CAACC,qBAAqB,CAAC,CAAC;MAC5B,IAAI,CAAC9D,OAAO,CAAC+D,iBAAiB,CAAC9F,iBAAiB,CAAC;IACnD;EACF;EAEA+F,oBAAoBA,CAAA,EAAG;IACrB,IAAI,CAACnB,oBAAoB,CAAC,IAAI,CAAC/D,QAAQ,CAAC;IAExC,IAAI,CAACE,QAAQ,CAACiF,UAAU,CAAC,CAAC;EAC5B;EAEA,IAAIrB,UAAUA,CAAA,EAAY;IACxB,MAAM;MAAE9C,QAAQ;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACC,OAAO;IAE3C,OAAOkE,OAAO,CAACpE,QAAQ,IAAIC,QAAQ,CAAC;EACtC;EAEA,IAAIoE,iBAAiBA,CAAA,EAAG;IACtB,MAAM;MAAEC;IAAI,CAAC,GAAG,IAAI,CAACpE,OAAO;IAC5B,OAAO,iBAAiBoE,GAAG,qBAAqB;EAClD;EAEA,IAAI9B,YAAYA,CAAA,EAAG;IACjB,MAAM;MAAEvB,MAAM;MAAEpB,UAAU;MAAE0E,kBAAkB;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACtE,OAAO;IAC1E,MAAM;MAAE9B,cAAc;MAAED;IAAkB,CAAC,GAAG,IAAI,CAAC8E,KAAK;IACxD,MAAMwB,gBAAgB,GACpB,IAAI,CAACC,kBAAkB,KAAK,UAAU,GAClCvG,iBAAiB,GACjB,IAAI,CAACuG,kBAAkB,KAAK,OAAO,GACjCtG,cAAc,GACd,CAAC,CAAC;IACV,IAAI+D,SAAgC,GAAGlB,MAAM,CAACpB,UAAU,CAAC;IAEzD,IAAI4E,gBAAgB,KAAK,CAAC,CAAC,EAAE;MAC3BtC,SAAS,GAAGlB,MAAM,CAAC0D,IAAI,CAAEC,CAAC,IAAKA,CAAC,EAAE9C,SAAS,KAAK2C,gBAAgB,CAAC;IACnE;IAEA,MAAMjC,YAAY,GAChBvB,MAAM,CAAC2B,MAAM,KAAK,CAAC,IAAI,CAAC4B,SAAS,CAAC;IAAA,EAC9B,IAAI,GACJrC,SAAS,EAAEK,YAAY,KACtB+B,kBAAkB,KAAK,EAAE,IAAItD,MAAM,CAAC2B,MAAM,KAAK,CAAC,GAC7C4B,SAAS,EAAEhC,YAAY,GACvB+B,kBAAkB,CAAC;IAC7B,MAAMM,aAAa,GACjB,CAAC1C,SAAS,EAAEK,YAAY,KACvB+B,kBAAkB,KAAK,EAAE,IAAItD,MAAM,CAAC2B,MAAM,KAAK,CAAC,GAAG,CAAC4B,SAAS,EAAEhC,YAAY,GAAG,IAAI,CAAC;IAEtF,OAAO;MACLA,YAAY;MACZqC;IACF,CAAC;EACH;EAEA5F,4BAA4BA,CAAClB,KAAyB,EAAE;IACtD,MAAMiB,QAAQ,GAAGqE,QAAQ,CAACyB,aAAa,CAAC,KAAK,CAAC;IAC9C9F,QAAQ,CAACqD,YAAY,CAAC,iBAAiB,EAAEtE,KAAK,CAACiC,QAAQ,IAAIjC,KAAK,CAACkC,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAC7FjB,QAAQ,CAACqD,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC;IACxCrD,QAAQ,CAACqD,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC;IAE9C,IAAItE,KAAK,CAACgH,EAAE,EAAE;MACZ/F,QAAQ,CAACqD,YAAY,CAAC,IAAI,EAAEtE,KAAK,CAACgH,EAAE,CAAC;IACvC;IACA,IAAIhH,KAAK,CAACiH,WAAW,EAAE;MACrBhG,QAAQ,CAACqD,YAAY,CAAC,aAAa,EAAEtE,KAAK,CAACiH,WAAW,CAAC;IACzD;IACA,MAAM;MAAEC;IAAmB,CAAC,GAAG5H,gBAAgB,CAACU,KAAK,CAAC;IACtD,KAAK,MAAMmH,GAAG,IAAID,kBAAkB,EAAE;MACpC,MAAME,QAA4B,GAAIpH,KAAK,CAASmH,GAAG,CAAC;MACxD,IAAIC,QAAQ,EAAE;QACZnG,QAAQ,CAACqD,YAAY,CAAC6C,GAAG,EAAEC,QAAQ,CAAC;MACtC;IACF;IAEA,IAAI,CAACpH,KAAK,CAACiC,QAAQ,EAAE;MACnBhB,QAAQ,CAACqD,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;IACxC,CAAC,MAAM;MACLrD,QAAQ,CAACqD,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;IACzC;IAEA,IAAI,CAACtE,KAAK,CAACiC,QAAQ,IAAI,CAACjC,KAAK,CAACkC,QAAQ,EAAE;MACtC,IAAI,CAAC+C,iBAAiB,CAAChE,QAAQ,CAAC;IAClC,CAAC,MAAM;MACLA,QAAQ,CAACoG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACrG,eAAe,CAACT,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE;IAEA,OAAOU,QAAQ;EACjB;EAEAsB,oBAAoBA,CAAA,EAAG;IACrB,MAAM;MAAEX,KAAK;MAAE0F;IAAmB,CAAC,GAAG,IAAI,CAACtH,KAAK;IAEhD,IAAI4B,KAAK,KAAK,EAAE,EAAE;MAChB,IAAI,CAACX,QAAQ,CAACS,WAAW,GAAG,EAAE;MAC9B4F,kBAAkB,CAAC,CAAC,CAAC;IACvB,CAAC,MAAM;MACL,MAAMC,WAAW,GAAG,IAAI,CAACC,oBAAoB,CAAC5F,KAAK,CAAC;MAEpD,IAAI,CAACX,QAAQ,CAACwG,eAAe,CAAC,GAAGF,WAAW,CAAC;MAE7C,IAAI,CAACtB,qBAAqB,CAAC,CAAC;MAC5B,IAAI,CAACD,iBAAiB,CAAC,CAAC;IAC1B;EACF;EAEAjF,YAAYA,CAAA,EAAS;IACnB,IAAI,IAAI,CAAC2G,gBAAgB,EAAE;MACzBC,YAAY,CAAC,IAAI,CAACD,gBAAgB,CAAC;IACrC;IAEA,IAAI,CAACE,WAAW,GAAG,IAAI;IAEvB,IAAI,CAACF,gBAAgB,GAAGG,MAAM,CAAChF,UAAU,CAAC,MAAM;MAC9C,IAAI,CAAC+E,WAAW,GAAG,KAAK;IAC1B,CAAC,EAAE,EAAE,CAAC;EACR;EAEAhH,eAAeA,CAACkH,KAAiB,EAAQ;IACvC,MAAMC,OAAO,GAAGD,KAAK,CAACE,MAAM;IAE5B,IAAID,OAAO,YAAYE,WAAW,EAAE;MAClC;MACA,IAAI,CAACC,kBAAkB,CAAC,mBAAmB,EAAEH,OAAO,CAAC;MAErD,IAAI,CAAChC,aAAa,CAACgC,OAAO,CAAC;IAC7B;EACF;EAEAlH,eAAeA,CAACiH,KAAiB,EAAQ;IACvC,IAAI,CAACnB,kBAAkB,GAAG,OAAO;IACjC,MAAMoB,OAAO,GAAGD,KAAK,CAACE,MAAM;IAE5B,IAAID,OAAO,KAAK,IAAI,CAAC9G,QAAQ,EAAE;MAC7B,IACE,IAAI,CAACkH,UAAU,IACdJ,OAAO,YAAYE,WAAW,IAAIF,OAAO,CAACK,YAAY,CAAC,cAAc,CAAC,KAAK,MAAO,EACnF;QACA,IAAI,CAACF,kBAAkB,CAAC,gBAAgB,EAAEH,OAAO,CAAC;MACpD,CAAC,MAAM;QACL,IAAI,CAACM,QAAQ,CAAC;UAAElI,kBAAkB,EAAE;QAAM,CAAC,CAAC;MAC9C;IACF;EACF;EAEAW,gBAAgBA,CAAA,EAAS;IACvB,IAAI,IAAI,CAACwH,oBAAoB,EAAE;MAC7BX,YAAY,CAAC,IAAI,CAACW,oBAAoB,CAAC;IACzC;IAEA,IAAI,IAAI,CAACH,UAAU,EAAE;MACnB,IAAI,CAACxB,kBAAkB,GAAG,UAAU;MACpC,MAAM4B,OAAO,GAAG,IAAI,CAACC,oBAAoB,CAAC,CAAC;MAE3C,IAAI,CAACN,kBAAkB,CAAC,mBAAmB,EAAEK,OAAO,EAAE,CAAC,CAAC;MACxD,IAAI,CAACF,QAAQ,CAAC;QAAEhI,cAAc,EAAE,CAAC;MAAE,CAAC,CAAC;IACvC,CAAC,MAAM;MACL,IAAI,CAACgI,QAAQ,CAAC;QAAElI,kBAAkB,EAAE;MAAM,CAAC,CAAC;IAC9C;EACF;EAEAG,WAAWA,CAACwH,KAAqB,EAAE;IACjCA,KAAK,CAACW,cAAc,CAAC,CAAC;IACtB,MAAM;MAAEC;IAAW,CAAC,GAAG,IAAI,CAACvG,OAAO;IACnC,MAAMP,KAAK,GAAGkG,KAAK,CAACa,aAAa,EAAEC,OAAO,CAAC,YAAY,CAAC;IACxD,MAAMrB,WAAW,GAAG3F,KAAK,GAAG,IAAI,CAAC4F,oBAAoB,CAAC5F,KAAK,CAAC,GAAG,EAAE;IAEjE,IAAI2F,WAAW,CAAC1C,MAAM,KAAK,CAAC,EAAE;IAE9B,MAAMgE,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;IAEzC,IAAID,SAAS,EAAEE,UAAU,IAAIF,SAAS,EAAEG,SAAS,EAAE;MACjD,MAAMC,YAAY,GAAGJ,SAAS,CAACI,YAAY;MAC3C,MAAMC,WAAW,GAAGL,SAAS,CAACK,WAAW;MACzC,MAAMC,gBAAgB,GAAGN,SAAS,CAACE,UAAU,CAACK,uBAAuB,CAACP,SAAS,CAACG,SAAS,CAAC;MAC1F,MAAMK,SAAS,GAAG,IAAI,CAACC,qBAAqB,CAAC,CAAC;MAE9C,MAAMC,aAAa,GAAGF,SAAS,KAAK,SAAS,GAAGR,SAAS,CAACE,UAAU,GAAGF,SAAS,CAACG,SAAS;MAC1F,MAAMQ,YAAY,GAAGH,SAAS,KAAK,SAAS,GAAGR,SAAS,CAACG,SAAS,GAAGH,SAAS,CAACE,UAAU;MACzF,MAAMU,UAAU,GAAGJ,SAAS,KAAK,SAAS,GAAGJ,YAAY,GAAGC,WAAW;MACvE,MAAMQ,QAAQ,GAAGL,SAAS,KAAK,SAAS,GAAGH,WAAW,GAAGD,YAAY;MACrE,MAAMF,UAAU,GACdQ,aAAa,YAAYI,IAAI,GAAGJ,aAAa,CAACK,aAAa,GAAGL,aAAa;MAC7E,MAAMP,SAAS,GAAGQ,YAAY,YAAYG,IAAI,GAAGH,YAAY,CAACI,aAAa,GAAGJ,YAAY;MAE1F,IAAIK,QAA0B,GAAG,IAAI;MACrC,IAAIC,QAAuB,GAAG,IAAI;MAElC,IAAIN,YAAY,KAAK,IAAI,CAACvI,QAAQ,EAAE;QAClC,IAAI,CAACA,QAAQ,CAACwG,eAAe,CAAC,GAAGF,WAAW,CAAC;QAE7C,MAAMwC,gBAAgB,GAAGxC,WAAW,CAACA,WAAW,CAAC1C,MAAM,GAAG,CAAC,CAAC;QAC5DgF,QAAQ,GAAGE,gBAAgB,CAAC/F,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC;QAC9CqE,QAAQ,GAAG,CAACC,gBAAgB,CAACrI,WAAW,IAAI,EAAE,EAAEmD,MAAM;MACxD,CAAC,MAAM,IACLmE,SAAS,YAAY7E,oBAAoB,IACzC4E,UAAU,YAAY5E,oBAAoB,EAC1C;QACA,MAAM6F,MAAM,GAAGjB,UAAU,EAAErH,WAAW,EAAEuI,SAAS,CAAC,CAAC,EAAER,UAAU,CAAC,IAAI,EAAE;QACtE,MAAMS,KAAK,GAAGlB,SAAS,EAAEtH,WAAW,EAAEuI,SAAS,CAACP,QAAQ,CAAC,IAAI,EAAE;QAE/D,MAAMS,iBAAiB,GAAGH,MAAM,CAACI,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAGJ,MAAM;QAC5D,MAAMK,gBAAgB,GAAGH,KAAK,CAACE,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAGF,KAAK;QAEzDrB,SAAS,CAACyB,kBAAkB,CAAC,CAAC;QAE9B,IAAInB,gBAAgB,KAAK,CAAC,EAAE;UAC1B,IAAI,CAAClI,QAAQ,CAACsJ,WAAW,CAACvB,SAAS,CAAC;QACtC;QAEA,MAAMwB,iBAAiB,GAAGjD,WAAW,CAACkD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAMV,gBAAgB,GAAGxC,WAAW,CAACA,WAAW,CAAC1C,MAAM,GAAG,CAAC,CAAC;QAE5DkE,UAAU,CAACrH,WAAW,GAAGyI,iBAAiB,IAAIK,iBAAiB,EAAE9I,WAAW,IAAI,EAAE,CAAC;QAEnFqH,UAAU,CAACmB,KAAK,CAAC,GAAG3C,WAAW,CAAC;QAEhC,IAAIwC,gBAAgB,EAAE;UACpBA,gBAAgB,CAACrI,WAAW,GAAG,CAACqI,gBAAgB,CAACrI,WAAW,IAAI,EAAE,IAAI2I,gBAAgB;UACtFR,QAAQ,GAAGE,gBAAgB,CAAC/F,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC;UAC9CqE,QAAQ,GAAG,CAACC,gBAAgB,CAACrI,WAAW,IAAI,EAAE,EAAEmD,MAAM;UAEtD,IAAI,CAACgB,YAAY,CAACkE,gBAAgB,CAAC;UACnC,IAAI,CAAChE,aAAa,CAACgE,gBAAgB,CAAC;QACtC,CAAC,MAAM;UACLD,QAAQ,GAAG,CAACf,UAAU,CAACrH,WAAW,IAAI,EAAE,EAAEmD,MAAM;UAChDkE,UAAU,CAACrH,WAAW,GAAG,CAACqH,UAAU,CAACrH,WAAW,IAAI,EAAE,IAAI2I,gBAAgB;UAC1ER,QAAQ,GAAGd,UAAU,CAAC/E,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC;UAExC,IAAI,CAACI,YAAY,CAACkD,UAAU,CAAC;UAC7B,IAAI,CAAChD,aAAa,CAACgD,UAAU,CAAC;QAChC;MACF;MAEA,IAAIc,QAAQ,YAAYF,IAAI,EAAE;QAC5B,IAAI,CAACe,YAAY,CAACb,QAAQ,EAAEC,QAAQ,IAAI,CAAC,EAAEA,QAAQ,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC5B,kBAAkB,CAAC,mBAAmB,EAAE2B,QAAQ,CAACc,UAAU,CAAC;MACnE,CAAC,MAAM;QACL;QACAC,OAAO,CAACC,IAAI,CAAC,sBAAsB,EAAEhB,QAAQ,EAAEA,QAAQ,EAAEc,UAAU,CAAC;MACtE;IACF;IAEA,IAAI,CAAC1E,qBAAqB,CAAC,CAAC;IAE5B,IAAIyC,UAAU,CAACoC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC3I,OAAO,CAACgB,UAAU,EAAE;MAC3D,IAAI,CAAC6C,iBAAiB,CAAC,CAAC;IAC1B;EACF;EAEAxF,YAAYA,CAACsH,KAAY,EAAE;IACzB,MAAME,MAAM,GAAGF,KAAK,CAACE,MAAM;IAC3B,IAAIA,MAAM,YAAY+C,cAAc,IAAIjD,KAAK,YAAYkD,UAAU,EAAE;MACnE,MAAMC,KAAK,GAAG,IAAI,CAAChK,QAAQ,CAAC+C,UAAU;MACtC,MAAMkH,SAAS,GAAGD,KAAK,CAACxF,IAAI,CAAC,CAAC,CAAC;MAC/B,MAAM0F,UAAU,GAAGF,KAAK,CAACxF,IAAI,CAAC,CAAC,CAAC;MAChC,MAAMoD,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;MAEzC,IAAIoC,SAAS,YAAYvB,IAAI,EAAE;QAC7B,MAAMyB,QAAQ,GAAGF,SAAS,CAACxJ,WAAW,IAAI,EAAE;QAC5C,MAAM2J,QAAQ,GAAG/F,QAAQ,CAACyB,aAAa,CAAC,GAAG,CAAC;QAC5C,MAAMuE,IAAI,GAAGhG,QAAQ,CAACC,cAAc,CAAC6F,QAAQ,CAAC;QAC9CC,QAAQ,CAAC/I,MAAM,CAACgJ,IAAI,CAAC;QACrBJ,SAAS,CAACK,WAAW,CAACF,QAAQ,CAAC;QAE/BxC,SAAS,EAAE2C,WAAW,CAACH,QAAQ,EAAED,QAAQ,CAACvG,MAAM,CAAC;MACnD,CAAC,MAAM,IAAI,CAACqG,SAAS,IAAKA,SAAS,YAAYO,aAAa,IAAIR,KAAK,CAACpG,MAAM,KAAK,CAAE,EAAE;QACnF,IAAI,CAAC5D,QAAQ,CAACS,WAAW,GAAG,EAAE;QAC9B,IAAI,CAAC2G,QAAQ,CAAC;UAAEjI,iBAAiB,EAAE;QAAE,CAAC,CAAC;MACzC,CAAC,MAAM,IAAI8K,SAAS,YAAY/G,oBAAoB,IAAI,CAAC+G,SAAS,CAACxJ,WAAW,EAAE0I,IAAI,CAAC,CAAC,EAAE;QACtF,IAAIa,KAAK,CAACpG,MAAM,IAAI,CAAC,IAAIsG,UAAU,YAAYM,aAAa,EAAE;UAC5D,IAAI,CAACxK,QAAQ,CAACS,WAAW,GAAG,EAAE;UAC9B,IAAI,CAAC2G,QAAQ,CAAC;YAAEjI,iBAAiB,EAAE;UAAE,CAAC,CAAC;QACzC;MACF;MAEA,IAAIsL,OAAO,GAAG,EAAE;MAChB,IAAInD,OAAO,GAAGM,SAAS,EAAEG,SAAS;MAElC,OAAOT,OAAO,EAAEoC,UAAU,KAAK,IAAI,CAAC1J,QAAQ,IAAIyK,OAAO,GAAG,CAAC,EAAE;QAC3DnD,OAAO,GAAGA,OAAO,EAAEoC,UAAU;QAC7Be,OAAO,EAAE;MACX;MAEA,IAAInD,OAAO,YAAYpE,oBAAoB,EAAE;QAC3C,MAAMH,UAAU,GAAGuE,OAAO,CAACvE,UAAU;QACrC,MAAMtC,WAAW,GAAG6G,OAAO,CAAC7G,WAAW,IAAI,EAAE;QAE7C,IAAIsC,UAAU,CAACa,MAAM,GAAG,CAAC,EAAE;UACzB,MAAM8G,MAAM,GAAG3H,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC,CAAC/D,WAAW,EAAEmD,MAAM;UAErD0D,OAAO,CAAC7G,WAAW,GAAGA,WAAW;UAEjC,IAAIiK,MAAM,EAAE;YACV,IAAI,CAACjB,YAAY,CAACnC,OAAO,CAACvE,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC,EAAEkG,MAAM,EAAEA,MAAM,CAAC;UAC/D;QACF;QAEA,IAAIjK,WAAW,CAACmD,MAAM,GAAG,CAAC,EAAE;UAC1B,MAAM+G,WAAW,GAAGlK,WAAW,CAACmK,EAAE,CAAC,CAAC,CAAC;UACrC,MAAMC,UAAU,GAAGpK,WAAW,CAACmK,EAAE,CAACnK,WAAW,CAACmD,MAAM,GAAG,CAAC,CAAC;UAEzD,IACE+G,WAAW,KAAK,IAAI,CAACG,iBAAiB,CAAC,CAAC,CAACrK,WAAW,IACpDoK,UAAU,KAAK,IAAI,CAACC,iBAAiB,CAAC,CAAC,CAACrK,WAAW,EACnD;YACA,IAAIiK,MAAqB,GAAG,IAAI;YAChC,IAAIC,WAAW,KAAK,IAAI,CAACG,iBAAiB,CAAC,CAAC,CAACrK,WAAW,EAAE;cACxD6G,OAAO,CAAC7G,WAAW,GAAGA,WAAW,CAACuI,SAAS,CAAC,CAAC,CAAC;cAC9C0B,MAAM,GACJ7D,KAAK,CAACkE,SAAS,KAAK,uBAAuB,IAC3ClE,KAAK,CAACkE,SAAS,KAAK,sBAAsB,GACtC,CAAC,GACDzD,OAAO,CAAC7G,WAAW,CAACmD,MAAM;YAClC,CAAC,MAAM,IAAIiH,UAAU,KAAK,IAAI,CAACC,iBAAiB,CAAC,CAAC,CAACrK,WAAW,EAAE;cAC9D6G,OAAO,CAAC7G,WAAW,GAAGA,WAAW,CAACuI,SAAS,CAAC,CAAC,EAAEvI,WAAW,CAACmD,MAAM,GAAG,CAAC,CAAC;cACtE8G,MAAM,GAAGpD,OAAO,CAAC7G,WAAW,CAACmD,MAAM;YACrC;YAEA,IAAI8G,MAAM,EAAE;cACV,IAAI,CAACjB,YAAY,CAACnC,OAAO,CAACvE,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC,EAAEkG,MAAM,EAAEA,MAAM,CAAC;YAC/D;UACF;QACF,CAAC,MAAM,IAAI3H,UAAU,CAACa,MAAM,KAAK,CAAC,IAAIb,UAAU,CAAC,CAAC,CAAC,YAAYyH,aAAa,EAAE;UAC5ElD,OAAO,CAAC7C,SAAS,GAAG,IAAI,CAACC,cAAc;QACzC;QAEA,MAAM;UAAEzC,MAAM;UAAEC;QAAW,CAAC,GAAG,IAAI,CAAChB,OAAO;QAC3C,MAAM8J,OAAO,GAAG,IAAI,CAACpG,YAAY,CAAC0C,OAAO,CAAC;QAC1C,IAAI,CAACvC,iBAAiB,CAAC,CAAC;QACxB,IAAI,CAACD,aAAa,CAACwC,OAAO,CAAC;QAE3B,IAAI,CAAC0D,OAAO,IAAI9I,UAAU,EAAE;UAC1B,IAAI,CAAC+E,kBAAkB,CAAC,mBAAmB,EAAEK,OAAO,EAAE,CAAC,CAAC;QAC1D;QAEA,MAAM2D,OAAO,GACX,CAACD,OAAO,IAAKA,OAAO,IAAI/I,MAAM,CAAC2B,MAAM,KAAK,CAAC,IAAI3B,MAAM,CAAC,CAAC,CAAC,CAACiJ,QAAQ,KAAK5D,OAAQ,GAC1EA,OAAO,GACP,IAAI,CAACtH,QAAQ;QAEnB,IAAIkC,UAAU,IAAI,IAAI,CAACiJ,MAAM,EAAE/J,OAAO,EAAE6C,KAAK,CAACmH,QAAQ,CAACC,SAAS,KAAKJ,OAAO,EAAE;UAC5E,IAAI,IAAI,CAACK,yBAAyB,CAACL,OAAO,CAAC,EAAE;YAC3C,IAAI,CAACM,gBAAgB,GAAGN,OAAO,CAAC;UAClC,CAAC,MAAM;YACL,IAAI,CAAC7D,QAAQ,CAAC;cAAElI,kBAAkB,EAAE;YAAM,CAAC,CAAC;UAC9C;QACF;MACF,CAAC,MAAM,IAAIoI,OAAO,KAAK,IAAI,EAAE;QAC3B,IAAI,CAACiE,gBAAgB,GAAG,IAAI,CAACvL,QAAQ,CAAC;QAEtC,IAAI4H,SAAS,EAAEG,SAAS,KAAK,IAAI,CAAC/H,QAAQ,IAAI,IAAI,CAACA,QAAQ,CAAC+C,UAAU,CAACa,MAAM,GAAG,CAAC,EAAE;UACjF,MAAM4H,SAAS,GAAG5D,SAAS,CAACK,WAAW;UACvC,MAAMwD,cAAc,GAAG,IAAI,CAACzL,QAAQ,CAAC+C,UAAU,CAACyB,IAAI,CAACgH,SAAS,GAAG,CAAC,CAAC;UACnE,MAAME,OAAO,GAAG,IAAI,CAAC1L,QAAQ,CAAC+C,UAAU,CAACyB,IAAI,CAACgH,SAAS,CAAC;UAExD,IAAI,CAACxL,QAAQ,CAACsJ,WAAW,CAACoC,OAAO,CAAC;UAElC,IAAID,cAAc,YAAYvI,oBAAoB,EAAE;YAClDuI,cAAc,CAAChH,SAAS,GAAG,IAAI,CAACC,cAAc;UAChD;UAEA,IAAI+G,cAAc,EAAE;YAClB,IAAI,CAAChC,YAAY,CAACgC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;UACzC;QACF,CAAC,MAAM;UACL,IAAI,CAAChC,YAAY,CAAC,IAAI,CAACzJ,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACxC;MACF;MAEA,IAAI,CAACgF,qBAAqB,CAAC,CAAC;IAC9B;EACF;EAEAxF,WAAWA,CAAA,EAAG;IACZ,IAAI,CAAC0H,UAAU,GAAG,IAAI;IACtB,IAAI,CAACxB,kBAAkB,GAAG,UAAU;IAEpC,IAAI,IAAI,CAACxE,OAAO,CAACgB,UAAU,EAAE;MAC3B,IAAI,CAACyJ,4BAA4B,CAAC,GAAG,CAAC;IACxC,CAAC,MAAM;MACL,IAAI,CAAC1E,kBAAkB,CAAC,mBAAmB,EAAE,IAAI,CAACjH,QAAQ,CAAC;IAC7D;EACF;EAEAP,UAAUA,CAACoH,KAAY,EAAE;IACvB,IAAI,CAACK,UAAU,GAAG,KAAK;IACvB,IAAI,CAACE,QAAQ,CAAC;MAAElI,kBAAkB,EAAE;IAAM,CAAC,CAAC;IAE5C,MAAM;MAAEuI,UAAU;MAAEmE,MAAM;MAAEjL;IAAM,CAAC,GAAG,IAAI,CAACO,OAAO;IAElD,IAAIuG,UAAU,CAACoC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC/B,IAAI,CAAC9E,iBAAiB,CAAC,CAAC;IAC1B;IAEA,MAAM8G,aAAa,GACjB,OAAOlL,KAAK,KAAK,QAAQ,GAAG,IAAI,CAACH,SAAS,CAAC,CAAC,CAAC+B,IAAI,CAAC,IAAI,CAACC,SAAS,CAAC,GAAG,IAAI,CAAChC,SAAS,CAAC,CAAC;IAEtFoL,MAAM,CAACC,aAAa,EAAOhF,KAAK,CAAC;IAEjCjF,UAAU,CAAC,MAAM;MACf,IAAI,CAACwF,QAAQ,CAAC;QAAEjI,iBAAiB,EAAE,CAAC;MAAE,CAAC,CAAC;IAC1C,CAAC,EAAE,GAAG,CAAC;EACT;EAEAO,aAAaA,CAACmH,KAAoB,EAAE;IAClC,IAAI,CAACnB,kBAAkB,GAAG,UAAU;IACpC,MAAM;MAAEoG;IAAgB,CAAC,GAAG,IAAI,CAAC5K,OAAO;IAExC,MAAM6K,WAAW,GAAG,IAAI,CAACxE,oBAAoB,CAAC,CAAC;IAE/C,IAAIV,KAAK,CAACX,GAAG,KAAK,OAAO,IAAI4F,eAAe,EAAEjC,QAAQ,CAAChD,KAAK,CAACX,GAAG,CAAC,EAAE;MACjE,IAAI6F,WAAW,KAAK,IAAI,CAAC/L,QAAQ,EAAE;QACjC6G,KAAK,CAACW,cAAc,CAAC,CAAC;MACxB;MACA,IAAIuE,WAAW,YAAY7I,oBAAoB,EAAE;QAC/C,MAAM8I,eAAe,GAAGD,WAAW,CAACtL,WAAW,EAAE0I,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC6C,eAAe,EAAE;UACpBnF,KAAK,CAACW,cAAc,CAAC,CAAC;QACxB,CAAC,MAAM;UACLX,KAAK,CAACW,cAAc,CAAC,CAAC;UACtB,MAAMI,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;UACzC,MAAMoE,aAAa,GACjBrE,SAAS,EAAEG,SAAS,YAAYW,IAAI,GAChCd,SAAS,CAACG,SAAS,GACnBH,SAAS,EAAEG,SAAS,EAAEhF,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC;UAC9C,MAAM0H,eAAe,GAAGtE,SAAS,EAAEK,WAAW;UAE9C,IAAIkE,WAAW,GAAG,EAAE;UAEpB,IACEF,aAAa,YAAYvD,IAAI,IAC7BwD,eAAe,KAAKxI,SAAS,IAC7BwI,eAAe,KAAKD,aAAa,CAACxL,WAAW,EAAEmD,MAAM,EACrD;YACAuI,WAAW,GACTF,aAAa,CAACxL,WAAW,EAAEuI,SAAS,CAACkD,eAAe,CAAC,IAAI,IAAI,CAACxH,cAAc;YAE9E,IAAIuH,aAAa,CAACxL,WAAW,EAAE;cAC7BwL,aAAa,CAACxL,WAAW,GAAGwL,aAAa,CAACxL,WAAW,CAACuI,SAAS,CAAC,CAAC,EAAEkD,eAAe,CAAC;YACrF;UACF;UAEA,IAAIH,WAAW,CAACtL,WAAW,EAAE0I,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C4C,WAAW,CAACtH,SAAS,GAAG,IAAI,CAACC,cAAc;UAC7C;UAEA,MAAM0H,GAAG,GAAG/H,QAAQ,CAACyB,aAAa,CAAC,GAAG,CAAC;UACvC,IAAIqG,WAAW,EAAE;YACfC,GAAG,CAAC3L,WAAW,GAAG0L,WAAW;UAC/B,CAAC,MAAM;YACLC,GAAG,CAAC3H,SAAS,GAAG,IAAI,CAACC,cAAc;UACrC;UACAqH,WAAW,CAAC9C,KAAK,CAACmD,GAAG,CAAC;UAEtB,IAAI,CAAC3C,YAAY,CAAC2C,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;UAE5B,IAAI,CAACxH,YAAY,CAACmH,WAAW,CAAC;UAC9B,IAAI,CAACnH,YAAY,CAACwH,GAAG,CAAC;UACtB,IAAIL,WAAW,CAACM,eAAe,EAAE;YAC/B,IAAI,CAACzH,YAAY,CAACmH,WAAW,CAACM,eAAe,CAAC;UAChD;UACA,IAAI,CAACvH,aAAa,CAACsH,GAAG,CAAC;UAEvB,IAAIA,GAAG,CAAC3L,WAAW,EAAE0I,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAClC,IAAI,CAACnE,qBAAqB,CAAC,CAAC;UAC9B;UAEApD,UAAU,CAAC,MAAM;YACf,IAAI,CAACmD,iBAAiB,CAAC,CAAC;UAC1B,CAAC,EAAE,CAAC,CAAC;UAEL,IAAI,CAAC4G,4BAA4B,CAAC,CAAC,CAAC;QACtC;MACF;IACF,CAAC,MAAM,IACL9E,KAAK,CAACX,GAAG,KAAK,WAAW,IACzBW,KAAK,CAACX,GAAG,KAAK,SAAS,IACvBW,KAAK,CAACX,GAAG,KAAK,WAAW,IACzBW,KAAK,CAACX,GAAG,KAAK,YAAY,EAC1B;MACA,IAAI6F,WAAW,YAAY7I,oBAAoB,EAAE;QAC/C,IAAI,CAACoJ,oBAAoB,CAACP,WAAW,EAAElF,KAAK,CAAC;MAC/C;MACA,IAAI,CAAC8E,4BAA4B,CAAC,GAAG,CAAC;IACxC,CAAC,MAAM,IAAI,IAAI,CAACY,WAAW,CAAC1F,KAAK,CAAC,IAAIkF,WAAW,YAAY7I,oBAAoB,EAAE;MACjF,IAAI6I,WAAW,CAACtL,WAAW,EAAE0I,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAACqD,gBAAgB,CAAC,CAAC,EAAE;QACtE;QACA,MAAMC,QAAQ,GAAGV,WAAW,CAACM,eAAe;QAC5C,IAAII,QAAQ,YAAYvJ,oBAAoB,EAAE;UAC5C2D,KAAK,CAACW,cAAc,CAAC,CAAC;UACtB,IAAI,CAACxH,QAAQ,CAACsJ,WAAW,CAACyC,WAAW,CAAC;UACtC,IAAI,CAACJ,4BAA4B,CAAC,CAAC,CAAC;UAEpC,IACEc,QAAQ,CAAChM,WAAW,EAAE0I,IAAI,CAAC,CAAC,KAAK,EAAE,IACnCsD,QAAQ,CAACJ,eAAe,KAAK,IAAI,IACjC,IAAI,CAACrM,QAAQ,CAAC+C,UAAU,CAACa,MAAM,KAAK,CAAC,EACrC;YACA,IAAI,CAAC5D,QAAQ,CAACS,WAAW,GAAG,EAAE;YAC9B,IAAI,CAACgJ,YAAY,CAAC,IAAI,CAACzJ,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;UACxC,CAAC,MAAM;YACL,IAAIyM,QAAQ,YAAYvJ,oBAAoB,EAAE;cAC5C,MAAMmH,IAAI,GAAGoC,QAAQ,CAAC1J,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC;cACxC,MAAMkG,MAAM,GAAGL,IAAI,CAAC5J,WAAW,EAAEmD,MAAM,IAAI,CAAC;cAC5C,IAAI,CAAC6F,YAAY,CAACY,IAAI,EAAEK,MAAM,EAAEA,MAAM,CAAC;YACzC,CAAC,MAAM;cACL;cACAf,OAAO,CAACC,IAAI,CAAC,yBAAyB,EAAE6C,QAAQ,CAAC;YACnD;UACF;UAEA7K,UAAU,CAAC,MAAM;YACf,IAAI,CAACmD,iBAAiB,CAAC,CAAC;UAC1B,CAAC,EAAE,CAAC,CAAC;UAEL,IAAI,CAAC4G,4BAA4B,CAAC,CAAC,CAAC;QACtC;MACF,CAAC,MAAM,IAAI,IAAI,CAACa,gBAAgB,CAAC,CAAC,EAAE;QAClC,MAAM5E,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;QAEzC,MAAMO,SAAS,GAAG,IAAI,CAACC,qBAAqB,CAAC,CAAC;QAC9C,MAAMC,aAAa,GACjBF,SAAS,KAAK,UAAU,GAAGR,SAAS,EAAEG,SAAS,GAAGH,SAAS,EAAEE,UAAU;QACzE,MAAMS,YAAY,GAChBH,SAAS,KAAK,UAAU,GAAGR,SAAS,EAAEE,UAAU,GAAGF,SAAS,EAAEG,SAAS;QACzE,MAAMC,YAAY,GAChBI,SAAS,KAAK,UAAU,GAAGR,SAAS,EAAEK,WAAW,GAAGL,SAAS,EAAEI,YAAY;QAC7E,MAAMC,WAAW,GACfG,SAAS,KAAK,UAAU,GAAGR,SAAS,EAAEI,YAAY,GAAGJ,SAAS,EAAEK,WAAW;;QAE7E;QACA,IACEK,aAAa,KAAKC,YAAY,IAC9BP,YAAY,KAAK,CAAC,KAChBO,YAAY,KAAKwD,WAAW,IAAI9D,WAAW,KAAK,CAAC,IACjDA,WAAW,KAAK8D,WAAW,CAACtL,WAAW,EAAEmD,MAAM,CAAC,EAClD;UACAiD,KAAK,CAACW,cAAc,CAAC,CAAC;UAEtB,MAAMkF,eAAe,GAAGpE,aAAa,EAAEK,aAAa;UACpD,MAAMgE,cAAc,GAAGpE,YAAY,EAAEI,aAAa;UAClD,MAAM5F,UAAU,GAAG,IAAI,CAAC/C,QAAQ,CAAC+C,UAAU;UAC3C,IACE2J,eAAe,KAAK3J,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC,IACtCmI,cAAc,KAAK5J,UAAU,CAACyB,IAAI,CAACzB,UAAU,CAACa,MAAM,GAAG,CAAC,CAAC,EACzD;YACA,IAAI,CAAC5D,QAAQ,CAACS,WAAW,GAAG,EAAE;YAC9B,IAAI,CAACgJ,YAAY,CAAC,IAAI,CAACzJ,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;UACxC,CAAC,MAAM;YACL+L,WAAW,CAACtH,SAAS,GAAG,IAAI,CAACC,cAAc;YAC3C,IAAI,CAACE,YAAY,CAACmH,WAAW,CAAC;UAChC;UAEA,IAAI,CAACjH,aAAa,CAACiH,WAAW,CAAC;UAC/B,IAAI,CAAC/G,qBAAqB,CAAC,CAAC;UAE5BpD,UAAU,CAAC,MAAM;YACf,IAAI,CAACmD,iBAAiB,CAAC,CAAC;UAC1B,CAAC,EAAE,CAAC,CAAC;UAEL,IAAI,CAAC4G,4BAA4B,CAAC,CAAC,CAAC;QACtC,CAAC,MAAM,IACLpD,YAAY,KAAKD,aAAa,IAC9BC,YAAY,YAAYG,IAAI,IAC5BJ,aAAa,YAAYI,IAAI,IAC7BH,YAAY,EAAE9H,WAAW,KAAK8H,YAAY,EAAEmB,UAAU,EAAEjJ,WAAW,IACnE6H,aAAa,EAAE7H,WAAW,KAAK6H,aAAa,EAAEoB,UAAU,EAAEjJ,WAAW,IACrEuH,YAAY,KAAK,CAAC,IAClBC,WAAW,KAAKM,YAAY,EAAEmB,UAAU,EAAEjJ,WAAW,EAAEmD,MAAM,EAC7D;UAAE;UACFiD,KAAK,CAACW,cAAc,CAAC,CAAC;UAEtB,MAAMoF,UAAU,GAAGC,KAAK,CAACC,IAAI,CAAC,IAAI,CAAC9M,QAAQ,CAAC+M,QAAQ,CAAC;UACrD,MAAML,eAAe,GAAGpE,aAAa,CAACK,aAAa;UACnD,MAAMgE,cAAc,GAAGpE,YAAY,CAACI,aAAa;UACjD,MAAM5F,UAAU,GAAG,IAAI,CAAC/C,QAAQ,CAAC+C,UAAU;UAE3C,IACE2J,eAAe,KAAK3J,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC,IACtCmI,cAAc,KAAK5J,UAAU,CAACyB,IAAI,CAACzB,UAAU,CAACa,MAAM,GAAG,CAAC,CAAC,EACzD;YACA,IAAI,CAAC5D,QAAQ,CAACS,WAAW,GAAG,EAAE;YAC9B,IAAI,CAACgJ,YAAY,CAAC,IAAI,CAACzJ,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;UACxC,CAAC,MAAM;YACL,IAAIgN,UAAU,GAAG,KAAK;YAEtB,KAAK,MAAMzI,SAAS,IAAIqI,UAAU,EAAE;cAClC,IAAIrI,SAAS,KAAKmI,eAAe,IAAIM,UAAU,EAAE;gBAC/CA,UAAU,GAAG,IAAI;gBAEjB,IAAIzI,SAAS,KAAKoI,cAAc,EAAE;kBAChCA,cAAc,CAAClI,SAAS,GAAG,IAAI,CAACC,cAAc;kBAC9C,IAAI,CAAC+E,YAAY,CAACkD,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;kBACvC;gBACF,CAAC,MAAM;kBACL,IAAI,CAAC3M,QAAQ,CAACsJ,WAAW,CAAC/E,SAAS,CAAC;gBACtC;cACF;YACF;YAEA,IAAI,CAACK,YAAY,CAACmH,WAAW,CAAC;UAChC;UAEA,IAAI,CAACjH,aAAa,CAACiH,WAAW,CAAC;UAC/B,IAAI,CAAC/G,qBAAqB,CAAC,CAAC;UAE5BpD,UAAU,CAAC,MAAM;YACf,IAAI,CAACmD,iBAAiB,CAAC,CAAC;UAC1B,CAAC,EAAE,CAAC,CAAC;UAEL,IAAI,CAAC4G,4BAA4B,CAAC,CAAC,CAAC;QACtC;MACF;IACF,CAAC,MAAM,IAAI9E,KAAK,CAACX,GAAG,KAAK,GAAG,KAAKW,KAAK,CAACoG,OAAO,IAAIpG,KAAK,CAACqG,OAAO,CAAC,EAAE;MAChErG,KAAK,CAACW,cAAc,CAAC,CAAC;IACxB;EACF;EAEA2F,MAAMA,CAAA,EAAG;IAAA,IAAAC,IAAA,QAAAlM,OAAA;MAAAmM,KAAA;IACP,MAAMC,WAAW,GAkCHrP,GAAG;IAjCjB,MAAM;MAAEsP,MAAM;MAAErL;IAAW,CAAC,GAAG,IAAI,CAAChB,OAAO;IAC3C,MAAM;MAAEhC;IAAmB,CAAC,GAAG,IAAI,CAAC+E,KAAK;IAEzC,MAAM;MAAET,YAAY;MAAEqC;IAAc,CAAC,GAAG,IAAI,CAACrC,YAAY;IACzD,MAAMgK,mBAAmB,GACvBtL,UAAU,IAAIhD,kBAAkB,IAAIkG,OAAO,CAAC5B,YAAY,CAAC,IAAI,CAAC,IAAI,CAACM,UAAU;IAE/E,MAAM;MAAE2J;IAAe,CAAC,GAAGpP,gBAAgB,CAAC,IAAI,CAAC6C,OAAO,CAAC;IAEzD,OAAAmM,KAAA,GAAOlP,OAAO,CAACoP,MAAM,CAAC,eACpB9O,KAAA,CAAAqH,aAAA,CAAArH,KAAA,CAAAiP,QAAA,qBACEjP,KAAA,CAAAqH,aAAA,CAACvH,OAAO,EAAA8O,KAAA,CAAAM,EAAA;MAAA,eACM,MAAM;MAAA,aACP9H,aAAa,GAAG,aAAa,GAAG,OAAO;MAAA,WACzC2H,mBAAmB;MAAA,SACtB,SAAS;MAAA,UACP3H,aAAa,GAAGnC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;MAAA,mBAC1B;QACfkK,QAAQ,EAAE,IAAI,CAACzM,YAAY,CAACC,OAAO,IAAIsC,SAAS;QAChDmK,MAAM,EAAE;MACV;IAAC,IAEA,CAAC;MAAE1C,MAAM;MAAE2C;IAAW,CAAC,KAAK;MAC3B,IAAI,CAAC,IAAI,CAAC3C,MAAM,EAAE;QAChB,IAAI,CAACI,gBAAgB,GAAGuC,UAAU;QAClC;QACA,IAAI,CAAC3C,MAAM,GAAGA,MAAM;MACtB;MAEA,oBAAO1M,KAAA,CAAAqH,aAAA,CAACvH,OAAO,CAACwP,MAAM;QAAChI,EAAE,EAAE,IAAI,CAACV;MAAkB,GAAE7B,YAA6B,CAAC;IACpF,CACO,CAAC,eACV/E,KAAA,CAAAqH,aAAA,CAACwH,WAAW,EAAAD,KAAA,CAAAM,EAAA;MAAA,GAAAK,YAAA;QAAA,OAEL,IAAI,CAAC7M,YAAY;QAAA,kBACN,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAGsM,cAAc;MAAC,GAAAL,IAAA;IAAA,EACvD,CACD,CAAC;EAEP;EAEQ7G,oBAAoBA,CAAC5F,KAAwB,EAA0B;IAC7E,MAAM2F,WAAmC,GAAG,EAAE;IAC9C,MAAM;MAAE2H;IAAW,CAAC,GAAG,IAAI,CAAC/M,OAAO;IACnC,MAAMkB,cAAc,GAClB6L,UAAU,EAAE7L,cAAc,KACxB8L,IAAY,IAAK;MACjB,MAAMC,WAAW,GAAGD,IAAI,CAAC/E,IAAI,CAAC,CAAC;MAC/B,OAAOgF,WAAW,KAAK,EAAE,GAAGD,IAAI,GAAGC,WAAW;IAChD,CAAC,CAAC;IACJ,MAAMC,cAAc,GAAGH,UAAU,EAAEG,cAAc,IAAI,IAAI,CAACA,cAAc;IACxE,MAAM5L,SAAS,GAAGyL,UAAU,EAAEzL,SAAS,IAAI,IAAI,CAACA,SAAS;IACzD,MAAM0B,KAAe,GAAG2I,KAAK,CAACwB,OAAO,CAAC1N,KAAK,CAAC,GAAGA,KAAK,GAAGA,KAAK,CAAC2N,KAAK,CAAC9L,SAAS,CAAC;IAE7E0B,KAAK,CAACvB,OAAO,CAAC,CAACuL,IAAI,EAAEjL,KAAK,KAAK;MAC7B,MAAMsL,YAAY,GAAGnM,cAAc,CAAC8L,IAAI,EAAEjL,KAAK,EAAEiB,KAAK,CAACN,MAAM,CAAC;MAE9D,IAAK2K,YAAY,KAAK,EAAE,IAAIH,cAAc,KAAK,KAAK,IAAKG,YAAY,KAAK,EAAE,EAAE;QAC5E,MAAMvL,IAAI,GAAGqB,QAAQ,CAACyB,aAAa,CAAC,GAAG,CAAC;QAExC,IAAIyI,YAAY,KAAK,EAAE,EAAE;UACvBvL,IAAI,CAACyB,SAAS,GAAG,IAAI,CAACC,cAAc;QACtC,CAAC,MAAM,IAAI6J,YAAY,CAACpF,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;UACrC,MAAMqF,eAAe,GAAG,IAAIC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;UAC9CzL,IAAI,CAACyB,SAAS,GAAGjG,SAAS,CAACkQ,QAAQ,CACjCH,YAAY,CAACI,OAAO,CAACH,eAAe,EAAE,IAAI,CAACI,cAAc,CAC3D,CAAC;QACH,CAAC,MAAM;UACL5L,IAAI,CAAC3B,MAAM,CAACgD,QAAQ,CAACC,cAAc,CAACiK,YAAY,CAAC,CAAC;QACpD;QAEAjI,WAAW,CAACuI,IAAI,CAAC7L,IAAI,CAAC;QAEtB,IAAI,CAAC4B,YAAY,CAAC5B,IAAI,CAAC;MACzB;IACF,CAAC,CAAC;IAEF,OAAOsD,WAAW;EACpB;EAEQvB,iBAAiBA,CAAA,EAAS;IAChC,MAAM9C,MAAmB,GAAG,EAAE;IAE9B,IAAI,CAACjC,QAAQ,CAAC+C,UAAU,CAACJ,OAAO,CAAC,CAACK,IAAI,EAAEC,KAAK,KAAK;MAChD,IAAID,IAAI,YAAYE,oBAAoB,IAAIF,IAAI,CAACmE,YAAY,CAAC,cAAc,CAAC,KAAK,MAAM,EAAE;QACxF,MAAMhE,SAAS,GAAG;UAChBK,YAAY,EAAER,IAAI,CAACM,OAAO,CAACC,YAAY,IAAI,EAAE;UAC7C2H,QAAQ,EAAElI,IAAI;UACdF,SAAS,EAAEG;QACb,CAAC;QACDhB,MAAM,CAAC4M,IAAI,CAAC1L,SAAS,CAAC;MACxB;IACF,CAAC,CAAC;IAEF,IAAI,CAACjC,OAAO,CAAC4N,cAAc,CAAC7M,MAAM,CAAC;EACrC;EAEQ+C,qBAAqBA,CAAA,EAAS;IACpC,IAAI,IAAI,CAAC+J,iBAAiB,EAAE;MAC1BrI,YAAY,CAAC,IAAI,CAACqI,iBAAiB,CAAC;IACtC;IAEA,IAAI,CAACA,iBAAiB,GAAGnI,MAAM,CAAChF,UAAU,CAAC,MAAM;MAC/C,IAAIsC,KAAK,GAAG,CAAC;MACb,MAAM;QAAE8K,QAAQ;QAAEpO;MAAW,CAAC,GAAG,IAAI,CAACM,OAAO;MAE7C,IAAI,CAAClB,QAAQ,CAAC+C,UAAU,CAACJ,OAAO,CAAEK,IAAI,IAAK;QACzC,IAAIA,IAAI,YAAYE,oBAAoB,EAAE;UACxCF,IAAI,CAACM,OAAO,CAAC2L,WAAW,GAAG,OAAO;UAElC,IACEjM,IAAI,CAACvC,WAAW,KAAK,IAAI,CAACqK,iBAAiB,CAAC,CAAC,CAACrK,WAAW,IACzDuC,IAAI,CAACvC,WAAW,KAAK,EAAE,EACvB;YACAyD,KAAK,EAAE;YAEP,IAAIA,KAAK,GAAG8K,QAAQ,EAAE;cACpBhM,IAAI,CAACM,OAAO,CAAC2L,WAAW,GAAG,MAAM;YACnC;UACF;QACF;MACF,CAAC,CAAC;MAEF,IAAIrO,UAAU,KAAKsD,KAAK,EAAE;QACxB,IAAI,CAAChD,OAAO,CAACmF,kBAAkB,CAACnC,KAAK,CAAC;MACxC;IACF,CAAC,EAAE,GAAG,CAAC;EACT;EAEQ1D,SAASA,CAAA,EAAa;IAC5B,MAAM0O,MAAgB,GAAG,EAAE;IAC3B,IAAI,CAAClP,QAAQ,CAAC+C,UAAU,CAACJ,OAAO,CAAEK,IAAI,IAAK;MACzC,IAAIA,IAAI,CAACvC,WAAW,EAAE0I,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACnC+F,MAAM,CAACL,IAAI,CAAC,EAAE,CAAC;MACjB,CAAC,MAAM;QACLK,MAAM,CAACL,IAAI,CAAC7L,IAAI,CAACvC,WAAW,IAAI,EAAE,CAAC;MACrC;IACF,CAAC,CAAC;IAEF,OAAOyO,MAAM;EACf;EAEQ5D,yBAAyBA,CAACtI,IAAiB,EAAW;IAC5D,OACE,IAAI,CAAChD,QAAQ,KAAKgD,IAAI,IAAK,IAAI,CAAChD,QAAQ,KAAKgD,IAAI,IAAIoC,OAAO,CAAC,IAAI,CAAClE,OAAO,CAACqE,kBAAkB,CAAE;EAElG;EAEQoG,4BAA4BA,CAACwD,KAAa,EAAE;IAClD,IAAI,IAAI,CAACC,yBAAyB,EAAE;MAClC1I,YAAY,CAAC,IAAI,CAAC0I,yBAAyB,CAAC;IAC9C;IAEA,IAAI,CAAC,IAAI,CAACzI,WAAW,EAAE;MACrB/E,UAAU,CAAC,MAAM;QACf,MAAM0F,OAAO,GAAG,IAAI,CAACC,oBAAoB,CAAC,CAAC;QAE3C,IAAI,CAACN,kBAAkB,CAAC,mBAAmB,EAAEK,OAAO,EAAE6H,KAAK,CAAC;MAC9D,CAAC,EAAE,CAAC,CAAC;IACP,CAAC,MAAM;MACL,IAAI,CAACC,yBAAyB,GAAGxI,MAAM,CAAChF,UAAU,CAAC,MAAM;QACvD,IAAI,CAAC+J,4BAA4B,CAACwD,KAAK,CAAC;MAC1C,CAAC,EAAE,EAAE,CAAC;IACR;EACF;EAEQlI,kBAAkBA,CAACf,GAAc,EAAEa,MAAgB,EAAEoI,KAAc,EAAE;IAC3E,IAAIpI,MAAM,YAAY+C,cAAc,IAAI/C,MAAM,YAAY7D,oBAAoB,EAAE;MAC9E,IAAI,IAAI,CAACmE,oBAAoB,EAAE;QAC7BX,YAAY,CAAC,IAAI,CAACW,oBAAoB,CAAC;MACzC;MAEA,IAAI,CAACA,oBAAoB,GAAGT,MAAM,CAAChF,UAAU,CAAC,MAAM;QAClD,MAAMyN,aAAa,GAAGtI,MAAM,KAAK,IAAI,CAAC/G,QAAQ,GAAG,IAAI,CAACuH,oBAAoB,CAAC,CAAC,GAAGR,MAAM;QAErF,IAAIjE,SAAS,GAAG,CAAC,CAAC;QAClB,IAAIwM,YAAY,GAAG,KAAK;QAExB,IAAID,aAAa,YAAYnM,oBAAoB,EAAE;UACjDoM,YAAY,GAAGD,aAAa,CAAClI,YAAY,CAAC,cAAc,CAAC,KAAK,MAAM;UACpErE,SAAS,GAAG+J,KAAK,CAACC,IAAI,CAAC,IAAI,CAAC9M,QAAQ,CAAC+C,UAAU,CAAC,CAACwM,OAAO,CAACF,aAAa,CAAC;QACzE,CAAC,MAAM,IAAIA,aAAa,KAAK,IAAI,CAACrP,QAAQ,EAAE;UAC1C8C,SAAS,GAAG,CAAC;QACf;QAEA,IAAIuM,aAAa,YAAYrI,WAAW,EAAE;UACxC,IAAI,CAACI,QAAQ,CACVpF,SAAS,IAAK;YACb,MAAMwN,QAAe,GAAG;cACtBtQ,kBAAkB,EAChB,IAAI,CAACgI,UAAU,IAAI9B,OAAO,CAAC,IAAI,CAAClE,OAAO,CAACqE,kBAAkB,CAAC,GAAG,IAAI,GAAG+J,YAAY;cACnFlQ,cAAc,EAAE4C,SAAS,CAAC5C,cAAc;cACxCD,iBAAiB,EAAE6C,SAAS,CAAC7C;YAC/B,CAAC;YAED,IAAI,IAAI,CAAC+H,UAAU,IAAKhB,GAAG,KAAK,gBAAgB,IAAIoJ,YAAa,EAAE;cACjEE,QAAQ,CAACtJ,GAAG,CAAC,GAAGpD,SAAS;YAC3B;YAEA,OAAO0M,QAAQ;UACjB,CAAC,EACD,MAAM;YACJ,IAAI,CAAC9J,kBAAkB,GAAGQ,GAAG,KAAK,gBAAgB,GAAG,OAAO,GAAG,UAAU;YAEzE,MAAM+E,OAAO,GAAGqE,YAAY,GAAGD,aAAa,GAAG,IAAI,CAACrP,QAAQ;YAE5D,IAAI,IAAI,CAACsL,yBAAyB,CAACL,OAAO,CAAC,EAAE;cAC3C,IAAI,CAACM,gBAAgB,GAAGN,OAAO,CAAC;cAEhC,IAAI,CAACwE,WAAW,CAAC,CAAC;YACpB;UACF,CACF,CAAC;QACH;MACF,CAAC,EAAEN,KAAK,IAAI,EAAE,CAAC;IACjB,CAAC,MAAM;MACL,IAAI,CAAC/H,QAAQ,CAAC;QAAElI,kBAAkB,EAAE;MAAM,CAAC,CAAC;IAC9C;EACF;EAEQyE,iBAAiBA,CAACzB,UAAmB,EAAEwN,YAAoB,EAAQ;IACzE,IAAIxN,UAAU,IAAIwN,YAAY,GAAG,CAAC,EAAE;MAClC,IAAI,CAAC1P,QAAQ,CAACqD,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAACgC,iBAAiB,CAAC;MACtE,IAAI,CAACrF,QAAQ,CAACqD,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;IACpD,CAAC,MAAM;MACL,IAAI,CAACrD,QAAQ,CAACyD,eAAe,CAAC,cAAc,CAAC;MAC7C,IAAI,CAACzD,QAAQ,CAACyD,eAAe,CAAC,kBAAkB,CAAC;IACnD;EACF;EAEQI,sBAAsBA,CAAChD,UAAkB,EAAQ;IACvD,MAAM+B,KAA4B,GAAG,IAAI,CAAC1B,OAAO,CAACe,MAAM,CAACpB,UAAU,CAAC;IACpE,MAAMkC,UAAU,GAAG,IAAI,CAAC/C,QAAQ,CAAC+C,UAAU;IAE3C,MAAMC,IAAI,GAAGJ,KAAK,GAAGA,KAAK,CAACsI,QAAQ,IAAInI,UAAU,CAACyB,IAAI,CAAC5B,KAAK,CAACE,SAAS,CAAC,GAAG,IAAI;IAC9E,MAAM8E,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;IAEzC,IAAID,SAAS,IAAI5E,IAAI,YAAYE,oBAAoB,EAAE;MACrD,IAAI,CAACkE,QAAQ,CAAC;QAAElI,kBAAkB,EAAE;MAAM,CAAC,CAAC;MAE5C0C,UAAU,CAAC,MAAM;QACf,MAAMyI,IAAI,GAAGrH,IAAI,CAACD,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC;QACpC,IAAI6F,IAAI,YAAY3B,IAAI,EAAE;UACxB,IAAI,CAACe,YAAY,CAACY,IAAI,EAAE,CAAC,EAAEA,IAAI,CAACzG,MAAM,CAAC;QACzC,CAAC,MAAM;UACL,IAAI,CAAC6F,YAAY,CAACzG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/B;MACF,CAAC,EAAE,GAAG,CAAC;IACT;EACF;EAEQ4B,YAAYA,CAAC5B,IAAU,EAAW;IACxC,MAAM;MAAE2M;IAAe,CAAC,GAAG,IAAI,CAACzO,OAAO;IACvC,IAAIyO,cAAc,IAAI3M,IAAI,YAAYgE,WAAW,EAAE;MACjD,MAAM;QAAEgE,OAAO;QAAExH;MAAa,CAAC,GAAGmM,cAAc,CAAC3M,IAAI,CAACvC,WAAW,IAAI,EAAE,EAAE,IAAI,CAACD,SAAS,CAAC,CAAC,CAAC;MAE1F,IAAI,CAACwK,OAAO,EAAE;QACZhI,IAAI,CAACK,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;QACzCL,IAAI,CAACM,OAAO,CAACC,YAAY,GAAGC,YAAY;MAC1C,CAAC,MAAM;QACLR,IAAI,CAACS,eAAe,CAAC,cAAc,CAAC;QACpCT,IAAI,CAACM,OAAO,CAACC,YAAY,GAAGG,SAAS;MACvC;MAEA,OAAOsH,OAAO;IAChB;IAEA,OAAO,IAAI;EACb;EAEQvB,YAAYA,CAClBzG,IAAU,EACV4M,KAAa,EACbC,GAAW,EACXC,UAAgC,GAAG,QAAQ,EACrC;IACN,MAAMlI,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;IACzC,MAAMkI,KAAK,GAAG1L,QAAQ,CAAC2L,WAAW,CAAC,CAAC;IACpCD,KAAK,CAACE,QAAQ,CAACjN,IAAI,EAAE4M,KAAK,CAAC;IAC3BG,KAAK,CAACG,MAAM,CAAClN,IAAI,EAAE6M,GAAG,CAAC;IAEvBjI,SAAS,EAAEuI,eAAe,CAAC,CAAC;IAC5BvI,SAAS,EAAEwI,QAAQ,CAACL,KAAK,CAAC;IAE1B,MAAMM,YAAY,GAAGrN,IAAI,YAAY0F,IAAI,GAAG1F,IAAI,CAAC0G,UAAU,GAAG1G,IAAI;IAElE,IAAIqN,YAAY,YAAYrJ,WAAW,EAAE;MACvCqJ,YAAY,CAACC,cAAc,CAAC;QAC1BC,KAAK,EAAET,UAAU;QACjBU,MAAM,EAAEV,UAAU;QAClBW,QAAQ,EAAE;MACZ,CAAC,CAAC;IACJ;EACF;EAEQlJ,oBAAoBA,CAAA,EAAgB;IAC1C,MAAMK,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;IAEzC,MAAMP,OAAO,GACXM,SAAS,EAAEG,SAAS,YAAYW,IAAI,GAAGd,SAAS,CAACG,SAAS,CAAC2B,UAAU,GAAG9B,SAAS,EAAEG,SAAS;IAE9F,OAAOT,OAAO,IAAI,IAAI;EACxB;EAEQgF,oBAAoBA,CAACP,WAAiC,EAAElF,KAAoB,EAAQ;IAC1F,IAAI6J,QAA0B,GAAG,IAAI;IAErC,QAAQ7J,KAAK,CAACX,GAAG;MACf,KAAK,SAAS;QACZW,KAAK,CAACW,cAAc,CAAC,CAAC;QACtBkJ,QAAQ,GAAG3E,WAAW,CAACM,eAAe;QACtC;MACF,KAAK,WAAW;QACdxF,KAAK,CAACW,cAAc,CAAC,CAAC;QACtBkJ,QAAQ,GAAG3E,WAAW,CAAC4E,WAAW;QAClC;MACF,KAAK,WAAW;QAAE;UAChB,IAAI5E,WAAW,CAACtL,WAAW,KAAK,IAAI,CAACqK,iBAAiB,CAAC,CAAC,CAACrK,WAAW,EAAE;YACpEoG,KAAK,CAACW,cAAc,CAAC,CAAC;YACtBkJ,QAAQ,GAAG3E,WAAW,CAACM,eAAe;UACxC;UACA;QACF;MACA,KAAK,YAAY;QAAE;UACjB,IAAIN,WAAW,CAACtL,WAAW,KAAK,IAAI,CAACqK,iBAAiB,CAAC,CAAC,CAACrK,WAAW,EAAE;YACpEoG,KAAK,CAACW,cAAc,CAAC,CAAC;YACtBkJ,QAAQ,GAAG3E,WAAW,CAAC4E,WAAW;UACpC;QACF;IACF;IAEA,IAAID,QAAQ,YAAYxN,oBAAoB,EAAE;MAC5C,MAAM0E,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;MACzC,MAAMoC,SAAS,GAAGyG,QAAQ,CAAC3N,UAAU,CAACyB,IAAI,CAAC,CAAC,CAAC;MAC7C,MAAMoM,kBAAkB,GAAG3G,SAAS,YAAYvB,IAAI,GAAGuB,SAAS,GAAGyG,QAAQ;MAC3E,MAAM9H,QAAQ,GAAG8H,QAAQ,CAACjQ,WAAW,EAAE0I,IAAI,CAAC,CAAC,IAAI,EAAE;MACnD,MAAM0H,aAAa,GAAGjJ,SAAS,EAAEK,WAAW,IAAI,CAAC;MACjD,IAAIyC,MAAM,GAAGmG,aAAa,IAAIjI,QAAQ,CAAChF,MAAM,GAAGiN,aAAa,GAAGjI,QAAQ,CAAChF,MAAM;;MAE/E;MACA,IAAIiD,KAAK,CAACX,GAAG,KAAK,WAAW,EAAE;QAC7BwE,MAAM,GAAG9B,QAAQ,CAAChF,MAAM;MAC1B,CAAC,MAAM,IAAIiD,KAAK,CAACX,GAAG,KAAK,YAAY,EAAE;QACrCwE,MAAM,GAAG,CAAC;MACZ;MAEA,IAAI,CAACjB,YAAY,CAACmH,kBAAkB,EAAElG,MAAM,EAAEA,MAAM,EAAE,SAAS,CAAC;IAClE;EACF;EAEQ5F,aAAaA,CAACgM,aAAmB,EAAQ;IAC/C,MAAMjQ,UAAU,GAAGgM,KAAK,CAACC,IAAI,CAAC,IAAI,CAAC9M,QAAQ,CAAC+C,UAAU,CAAC,CACpDgO,MAAM,CAAE/N,IAAI,IAAK;MAChB,OAAOA,IAAI,YAAYgO,OAAO,IAAIhO,IAAI,CAACmE,YAAY,CAAC,cAAc,CAAC,KAAK,MAAM;IAChF,CAAC,CAAC,CACD8J,SAAS,CAAEjO,IAAI,IAAK;MACnB,OAAOA,IAAI,KAAK8N,aAAa;IAC/B,CAAC,CAAC;IAEJ,IAAI,CAACI,QAAQ,CAACrQ,UAAU,CAACA,UAAU,CAAC;EACtC;EAEQ0L,WAAWA,CAAC1F,KAAoB,EAAW;IACjD,OAAOA,KAAK,CAACX,GAAG,KAAK,WAAW,IAAKW,KAAK,CAACX,GAAG,KAAK,GAAG,KAAKW,KAAK,CAACoG,OAAO,IAAIpG,KAAK,CAACqG,OAAO,CAAE;EAC7F;EAEQpC,iBAAiBA,CAAA,EAAG;IAC1B,MAAMhE,OAAO,GAAGzC,QAAQ,CAACyB,aAAa,CAAC,GAAG,CAAC;IAE3CgB,OAAO,CAACrC,SAAS,GAAG,IAAI,CAACC,cAAc;IAEvC,OAAOoC,OAAO;EAChB;EAEQ9C,iBAAiBA,CAAChE,QAAqB,EAAE;IAC/CA,QAAQ,CAACoG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC/G,WAAW,CAAC;IACpDW,QAAQ,CAACoG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC7G,YAAY,CAAC;IACrDS,QAAQ,CAACoG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC5G,WAAW,CAAC;IACpDQ,QAAQ,CAACoG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC3G,UAAU,CAAC;IAClDO,QAAQ,CAACoG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC1G,aAAa,CAAC;IACxDM,QAAQ,CAACoG,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAACzG,eAAe,CAAC;IAC5DK,QAAQ,CAACoG,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAACxG,eAAe,CAAC;IAC5DI,QAAQ,CAACoG,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAACvG,gBAAgB,CAAC;IAC9DG,QAAQ,CAACoG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACtG,YAAY,CAAC;IAEtDE,QAAQ,CAACmR,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACpR,eAAe,CAAC;EAC/D;EAEQgE,oBAAoBA,CAAC/D,QAAqB,EAAE;IAClDA,QAAQ,CAACmR,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC9R,WAAW,CAAC;IACvDW,QAAQ,CAACmR,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC5R,YAAY,CAAC;IACxDS,QAAQ,CAACmR,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC3R,WAAW,CAAC;IACvDQ,QAAQ,CAACmR,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC1R,UAAU,CAAC;IACrDO,QAAQ,CAACmR,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACzR,aAAa,CAAC;IAC3DM,QAAQ,CAACmR,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAACxR,eAAe,CAAC;IAC/DK,QAAQ,CAACmR,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAACvR,eAAe,CAAC;IAC/DI,QAAQ,CAACmR,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAACtR,gBAAgB,CAAC;IACjEG,QAAQ,CAACmR,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACrR,YAAY,CAAC;IAEzDE,QAAQ,CAACoG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACrG,eAAe,CAAC;EAC5D;EAEQA,eAAeA,CAAC8G,KAAoB,EAAE;IAC5C,IAAIA,KAAK,CAACX,GAAG,KAAK,GAAG,KAAKW,KAAK,CAACqG,OAAO,IAAIrG,KAAK,CAACoG,OAAO,CAAC,EAAE;MACzDpG,KAAK,CAACW,cAAc,CAAC,CAAC;MAEtB,MAAMxE,IAAI,GAAG6D,KAAK,CAACE,MAAM;MACzB,IAAI/D,IAAI,YAAYgE,WAAW,IAAIhE,IAAI,KAAK,IAAI,CAAChD,QAAQ,EAAE;QACzD,IAAI,CAACyJ,YAAY,CAACzG,IAAI,EAAE,CAAC,EAAEA,IAAI,CAACD,UAAU,CAACa,MAAM,CAAC;MACpD;IACF;EACF;EAEQ4I,gBAAgBA,CAAA,EAAY;IAClC,MAAM5E,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;IAEzC,OACED,SAAS,EAAEG,SAAS,KAAKH,SAAS,EAAEE,UAAU,IAC9CF,SAAS,EAAEK,WAAW,KAAKL,SAAS,EAAEI,YAAY;EAEtD;EAEQK,qBAAqBA,CAAA,EAAkC;IAC7D,MAAMT,SAAS,GAAGvD,QAAQ,CAACwD,YAAY,CAAC,CAAC;IAEzC,IAAID,SAAS,EAAEE,UAAU,IAAIF,SAAS,EAAEG,SAAS,EAAE;MACjD,MAAMG,gBAAgB,GAAGN,SAAS,CAACE,UAAU,CAACK,uBAAuB,CAACP,SAAS,CAACG,SAAS,CAAC;MAE1F,IACGG,gBAAgB,KAAK,CAAC,IAAIN,SAAS,CAACI,YAAY,GAAGJ,SAAS,CAACK,WAAW;MAAK;MAC9EC,gBAAgB,KAAKkJ,IAAI,CAACC,2BAA2B,EACrD;QACA,OAAO,UAAU;MACnB;MAEA,OAAO,SAAS;IAClB;IAEA,OAAO,IAAI;EACb;AACF;AAACrS,eAAA,CA/vCKH,UAAU,iBAWO,UAAU;AAAAG,eAAA,CAX3BH,UAAU,WAYCH,KAAK;AAAAM,eAAA,CAZhBH,UAAU,aAcG,CAACP,mBAAmB,CAAC,CAAC,CAAC;AAAAU,eAAA,CAdpCH,UAAU,kBAgBQ;EACpByS,YAAY,EAAE,EAAE;EAChBC,IAAI,EAAE,GAAG;EACTtN,KAAK,EAAE,QAAQ;EACfuN,OAAO,EAAE,CAAC;EACVC,OAAO,EAAE,EAAE;EACXC,iBAAiB,EAAE,KAAK;EACxBC,iBAAiB,EAAE,CAAC,CAAC;EACrBC,iBAAiB,EAAE;AACrB,CAAC;AAwuCH,SAAS/S,UAAU","ignoreList":[]}
|
|
@@ -82,6 +82,11 @@ class InputField extends Component {
|
|
|
82
82
|
}
|
|
83
83
|
componentDidMount() {
|
|
84
84
|
var _a;
|
|
85
|
+
const {
|
|
86
|
+
autoFocus,
|
|
87
|
+
disabled,
|
|
88
|
+
readonly
|
|
89
|
+
} = this.asProps;
|
|
85
90
|
(_a = this.containerRef.current) == null ? void 0 : _a.append(this.textarea);
|
|
86
91
|
this.handleValueOutChange();
|
|
87
92
|
const config = {
|
|
@@ -92,6 +97,9 @@ class InputField extends Component {
|
|
|
92
97
|
if (this.props.onImmediatelyChange) {
|
|
93
98
|
this.observer.observe(this.textarea, config);
|
|
94
99
|
}
|
|
100
|
+
if (autoFocus && !disabled) {
|
|
101
|
+
setTimeout(() => this.textarea.focus(), 10);
|
|
102
|
+
}
|
|
95
103
|
}
|
|
96
104
|
componentDidUpdate(prevProps, prevState) {
|
|
97
105
|
const {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semcore/bulk-textarea",
|
|
3
3
|
"description": "Semrush BulkTextarea Component",
|
|
4
|
-
"version": "17.0.0-prerelease.
|
|
4
|
+
"version": "17.0.0-prerelease.31",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/es6/index.js",
|
|
7
7
|
"typings": "lib/types/index.d.ts",
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"types": "./lib/types/index.d.ts"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@semcore/button": "^17.0.0-prerelease.
|
|
18
|
-
"@semcore/typography": "^17.0.0-prerelease.
|
|
19
|
-
"@semcore/counter": "^17.0.0-prerelease.
|
|
20
|
-
"@semcore/tooltip": "^17.0.0-prerelease.
|
|
17
|
+
"@semcore/button": "^17.0.0-prerelease.31",
|
|
18
|
+
"@semcore/typography": "^17.0.0-prerelease.31",
|
|
19
|
+
"@semcore/counter": "^17.0.0-prerelease.31",
|
|
20
|
+
"@semcore/tooltip": "^17.0.0-prerelease.31",
|
|
21
21
|
"dompurify": "3.2.3"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/dompurify": "3.2.0",
|
|
34
|
-
"@semcore/core": "17.0.0-prerelease.
|
|
35
|
-
"@semcore/base-components": "17.0.0-prerelease.
|
|
34
|
+
"@semcore/core": "17.0.0-prerelease.31",
|
|
35
|
+
"@semcore/base-components": "17.0.0-prerelease.31",
|
|
36
36
|
"@semcore/testing-utils": "1.0.0",
|
|
37
|
-
"@semcore/icon": "16.7.2-prerelease.
|
|
37
|
+
"@semcore/icon": "16.7.2-prerelease.31"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
40
|
"build": "pnpm semcore-builder --source=ts && pnpm vite build"
|