@startlibs/form 1.1.1 → 1.1.3
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/lib/AutoComplete.mjs +16 -4
- package/lib/AutoComplete.mjs.map +1 -1
- package/lib/RichText.mjs +4 -1
- package/lib/RichText.mjs.map +1 -1
- package/lib/index.cjs +23 -8
- package/lib/index.cjs.map +1 -1
- package/lib/useDraftConfirmation.mjs +1 -1
- package/lib/useDraftConfirmation.mjs.map +1 -1
- package/package.json +1 -1
- package/src/AutoComplete.jsx +17 -4
- package/src/RichText.jsx +4 -1
- package/src/useDraftConfirmation.jsx +1 -1
package/lib/RichText.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichText.mjs","sources":["../src/RichText.jsx"],"sourcesContent":["import React, {useContext, useEffect, useRef, useState} from 'react'\nimport styled, {css} from 'styled-components'\nimport ContentEditable from 'react-contenteditable'\nimport {darken} from 'polished'\nimport _ from 'lodash/fp'\nimport {getColor, linkRegex, stopPropagation} from '@startlibs/utils'\nimport {StartlibsContext, useEnsureRef, useLazyConstant, useToggle, usePopupToggle, useRefState} from '@startlibs/core'\nimport {Errors} from './Errors'\nimport {Field} from './Field'\nimport {WithForm} from './Form'\nimport {TextInput} from './TextInput'\nimport {useInput} from './enhanceInput'\nimport {Button, Icon} from '@startlibs/components'\n\nconst InputIcon = styled(Icon)`\n position: absolute;\n outline: none;\n bottom: 0;\n font-size: 21px;\n line-height: 3rem;\n right: 0;\n width: 2rem;\n pointer-events: none;\n color: ${getColor('gray150')};\n`\n\nconst FORMAT_TOOLS = {\n 'bold': ['b', 'strong'],\n 'italic': 'i',\n 'underline': 'u',\n 'strikethrough': 'strike',\n 'link': 'a',\n 'insertUnorderedList': ['ul', 'li'],\n 'insertOrderedList': ['ol', 'li'],\n 'outdent': '',\n 'indent': 'blockquote',\n 'fontSizeUp': 'font',\n 'fontSizeDown': 'font'\n}\n\nconst TAG_TO_STYLE_PROPERTY = {\n 'b': 'fontWeight',\n 'strong': 'fontWeight',\n 'u': 'textDecoration',\n 'strike': 'textDecoration',\n 'font': 'fontSize',\n 'i': 'fontStyle'\n}\n\nlet GET_LIMITS_FONT_SIZE_PX = () => {\n const s = document.createElement('span')\n s.style.fontSize = 'medium'\n document.body.appendChild(s)\n const fontSize = parseInt(getComputedStyle(s).fontSize)\n document.body.removeChild(s)\n const limits = [fontSize * 3 / 5, fontSize * 3]\n GET_LIMITS_FONT_SIZE_PX = () => limits\n return limits\n}\n\nconst wrapWith = (el,wrapper) => {\n el.parentNode.insertBefore(wrapper, el);\n wrapper.appendChild(el)\n}\n\nconst FIX_STYLE = {\n 'fontWeight': (v, el) => {\n const intFontWeight = parseInt(window.getComputedStyle(el).fontWeight)\n return intFontWeight <= 400 ? 400 : 600\n },\n 'fontSize': (v, el) => {\n const [min, max] = GET_LIMITS_FONT_SIZE_PX()\n const intFontSize = parseInt(window.getComputedStyle(el).fontSize)\n return Math.min(max, Math.max(min, intFontSize)) + 'px'\n },\n 'textDecoration': (v,el) => {\n const values = v.split(' ').filter(v => v === 'underline' || v === 'line-through')\n if (values.indexOf('underline')>=0) {\n wrapWith(el,document.createElement('u'))\n }\n if (values.indexOf('line-through')>=0) {\n wrapWith(el,document.createElement('strike'))\n }\n return ''\n }\n}\n\nexport const RichTextContainer = styled.div`\n position:relative;\n width: 100%;\n border: 1px solid ${getColor('gray210')};\n border-radius: 8px;\n background: white;\n ${props => props.hasErrors && `border-color: ${getColor(props)('alert')}`};\n ${props => props.showToolbar && `\n ${ToolsContainer} {\n transition: 0.5s;\n max-height: 7.5rem;\n transition: 0.6s;\n pointer-events: auto;\n }\n `};\n ${props => props.focus && `\n border-color: ${getColor('gray180')};\n box-shadow: 0px 0px 0px 2px rgba(0,0,0,0.1);\n `}\n ${props => props.locked && css`\n padding-right: 2.25rem;\n background: rgba(0,0,0,0.075);\n `}\n ${props => props.linkColor && css`\n a, a:visited, a:focus, a:active {\n color: ${props.linkColor};\n }\n a:hover {\n color: ${darken(0.05, props.linkColor)};\n }\n `}\n ul {\n list-style-type: disc;\n }\n ul, ol {\n padding-inline-start: 25px;\n margin-block-start: 0.5em;\n margin-block-end: 0.5em;\n }\n`\n\nexport const RichTextInput = styled.div`\n font-size: 14px;\n color: ${getColor('gray60')};\n background: white;\n border-radius: 7px;\n > div {\n overflow: auto;\n width: 100%;\n outline: none;\n min-height: ${props=>props.minHeight || 60}px;\n padding: 0.7rem;\n }\n b, strong {\n font-weight: 600;\n }\n a {\n text-decoration: underline;\n }\n > div[contenteditable=true]:empty:before {\n content: attr(placeholder);\n color: rgba(0,0,0,0.3);\n }\n ${props => props.disabled && `\n &[disabled] {\n background: rgba(0, 0, 0, 0.075) !important;\n opacity: 0.75 !important;\n }\n `}\n`\n\nconst ToolsContainer = styled.div`\n background: ${getColor('lightBluishGray')};\n padding: 0 0.125rem;\n border-top-left-radius: 7px;\n border-top-right-radius: 7px;\n transition: 0.225s;\n max-height: 0;\n pointer-events: none;\n overflow: hidden;\n display: flex;\n align-items: center;\n`\n\nconst ToolButton = styled(Button)`\n min-height: 2rem;\n min-width: 2rem;\n background: transparent;\n box-shadow: none;\n margin: 0.25rem 0.125rem;\n & ~ & {\n margin-left: 0.125rem;\n }\n .icon {\n font-size: 23px;\n color: ${getColor('gray90')};\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%,-50%);\n transform: translate(-50%,-50%);\n }\n &:hover, &.activated:hover {\n background: rgba(0,0,0,0.11);\n }\n &.activated {\n background: rgba(0,0,0,0.09);\n }\n &:focus:after {\n content: none;\n }\n`\n\nconst ToolSeparator = styled.span`\n border-left: 1px solid rgba(0,0,0,0.1);\n margin-left: 0.75rem;\n margin-right: 0.5rem;\n height: 1.5rem;\n`\n\nconst JS_CLASS = \"EDITOR--JS\"\n\nconst getNextRegularCharIndex = (text, offset, direction) => {\n const regex = /[A-Za-z0-9ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏàáâãäåæçèéêëìíîïÐÑÒÓÔÕÖØÙÚÛÜÝÞßðñòóôõöøùúûüýþÿ]/g\n let cursor = offset\n while ((text[cursor + direction] || '').match(regex)) {\n cursor += direction\n }\n return cursor\n}\n\nconst addHttp = (s) => {\n s = s.replace(/^\\s/, '')\n if (s.indexOf('http://') === 0 || s.indexOf('https://') === 0) {\n return s\n } else {\n return 'http://' + s\n }\n}\n\nconst getRightMostElement = (node) => {\n if (node.childNodes.length) {\n return getRightMostElement(node.childNodes[node.childNodes.length - 1])\n } else {\n return node\n }\n}\n\nconst setSelectionRange = (input, selectionStart, selectionEnd = 0) => {\n if (!input) return\n let range = document.createRange()\n let sel = window.getSelection()\n range.setStart(input, selectionStart)\n if (selectionEnd) {\n range.setEnd(input, selectionEnd)\n } else {\n range.collapse(true)\n }\n sel.removeAllRanges()\n sel.addRange(range)\n}\n\nconst cleanEditor = (editor, acceptedTags) => {\n Array.prototype.slice.call(editor.querySelectorAll('.Apple-interchange-newline')).forEach(el => el.remove())\n Array.prototype.slice.call(editor.querySelectorAll('iframe')).forEach(el => el.remove())\n\n const acceptedStyles = acceptedTags.map(t => TAG_TO_STYLE_PROPERTY[t]).filter(_.identity)\n\n const newSpace = document.createTextNode('\\u00A0')\n if (window.getSelection().rangeCount) {\n const container = window.getSelection().getRangeAt(0).startContainer\n if (container.nodeType === 3) {\n container.parentNode.insertBefore(newSpace, container.nextSibling)\n } else {\n container.appendChild(newSpace)\n }\n if (newSpace.previousSibling && newSpace.previousSibling.textContent === '\\u00A0') {\n newSpace.previousSibling.remove()\n }\n setSelectionRange(newSpace, 0)\n }\n\n const clean = (children) => {\n Array.prototype.slice.call(children).forEach(el => {\n try {\n if (el.nodeType === 3)\n return\n if (!el.tagName) {\n el.remove()\n return\n }\n let tagName = el.tagName.toLowerCase()\n const style = getComputedStyle(el)\n const rect = el.getBoundingClientRect()\n const isHidden = style.display === 'none' || rect.width === 0 || rect.height === 0\n if (isHidden && (el.children && !el.children.length) && tagName !== 'br') {\n el.remove()\n } else if (acceptedTags.indexOf(tagName) >= 0) {\n clean(el.childNodes)\n el.removeAttribute('class')\n if (tagName === 'a') {\n el.setAttribute('target', '_blank')\n }\n if (el.getAttribute('style')) {\n const usedStyles = _.toPairs(_.pick(acceptedStyles, el.style)).filter(([k, v]) => v !== \"\")\n const fixedStyle = _.fromPairs(usedStyles.map(([k, v]) => [k, (FIX_STYLE[k] || _.identity)(v, el)]))\n el.removeAttribute('style')\n Object.assign(el.style, fixedStyle)\n }\n } else if (tagName === 'a') {\n clean(el.childNodes)\n if (el.textContent !== el.href || el.textContent.length < 5)\n el.outerHTML = el.innerHTML\n } else {\n clean(el.childNodes)\n if (el.hasChildNodes()) {\n const newTagName = style.display === 'inline' ? 'span' : 'div'\n const newEl = document.createElement(newTagName)\n Array.prototype.slice.call(el.childNodes).forEach(child => newEl.appendChild(child))\n el.parentNode.replaceChild(newEl, el)\n } else {\n el.remove()\n }\n }\n } catch (e) {\n if (el && el.remove)\n el.remove()\n }\n })\n }\n clean(editor.childNodes)\n}\n\nconst insertToken = (node, offset) => {\n const parent = node.parentNode\n const token = document.createElement(\"span\")\n if (node.nodeType === Node.TEXT_NODE) {\n const splitted = node.splitText(offset)\n parent.insertBefore(token, splitted)\n } else {\n parent.insertBefore(token, node)\n }\n return token\n}\n\n/*\n* pagely reformat\n .replace(/^[a-z]/, function (e) {\n return e.toUpperCase()\n })\n* */\n\nconst parseAndExecCommand = (c) => {\n if (c === \"strikethrough\" || c === \"underline\") {\n document.execCommand('styleWithCSS', false, false)\n } else {\n document.execCommand('styleWithCSS', false, true)\n }\n if (c.indexOf('fontSize') === 0) {\n const direction = c.indexOf('Up') > 0 ? 1 : -1\n const newValue = Math.min(7, Math.max(1, parseInt(document.queryCommandValue('fontSize') || 3) + direction))\n document.execCommand('fontSize', false, newValue)\n } else {\n const sanitizedCommand = (c.indexOf(\"List\") >= 0 && document.queryCommandState(c)) ? 'outdent' : c // FIX CHROME HANGS when list is called and already active\n\n document.execCommand(sanitizedCommand)\n }\n}\n\nexport const RichText = ({path, inputRef, label, autoHideToolbar, autoFocus, disabled, minHeight, placeholder, className, formatTools = ['bold', 'italic', 'underline', 'strikethrough', 'separator', 'link'], reformatText = _.identity, mandatory, descText, helpText, linkColor, tabIndex = 1, value, setValue,raw, locked}) => {\n\n const linkPopup = usePopupToggle()\n\n const input = useEnsureRef(inputRef)\n const activeLinkNode = useRef()\n const container = useRef()\n const linkJustCreated = useRefState()\n\n // auto-hide needs\n const startSelectionToken = useRefState()\n const endSelectionToken = useRefState()\n const commands = useRefState([])\n const containerFocused = useToggle()\n\n const needsNormalize = useRefState()\n const alreadyCancelled = useRefState()\n\n // const [formValue, setFormValue] = useInput({path})\n const [formValue, _setFormValue, {hasErrors}] = useInput({path,value,setValue},raw)\n\n // const tempValue = useConstant(formValue)\n const tempValue = useRef(formValue)\n const setFormValue = (v) => {\n tempValue.current = v\n _setFormValue(v)\n }\n\n useEffect(() => {\n if((value === formValue) && (formValue !== tempValue)){\n tempValue.current = formValue\n }\n },[path])\n\n const [activatedTools, setActivatedTools] = useState({})\n\n const validElements = useLazyConstant(() => ['br', 'div', 'p', 'span'].concat(_.flatten(formatTools.map(tool => FORMAT_TOOLS[tool] || []))))\n\n useEffect(() => {\n cleanEditor(input.current, validElements)\n }, [])\n\n const focus = () => input.current && input.current.focus()\n\n // Foco inicial opcional (ex.: abrir a dialog já no campo de descrição). Em\n // rAF pra rodar depois que a dialog termina de montar e não perder o foco.\n useEffect(() => {\n if (autoFocus) {\n requestAnimationFrame(focus)\n }\n }, [])\n\n useEffect(() => {\n if (needsNormalize.get()) {\n input.current.normalize()\n needsNormalize.set(false)\n }\n })\n\n const triggerScrollForPanel = (d) => {\n requestAnimationFrame((time) => {\n if (time > d + 250) return\n window.dispatchEvent(new Event('scroll'))\n triggerScrollForPanel(d)\n }\n )\n }\n\n const containerFocus = () => {\n containerFocused.openWith(2)\n triggerScrollForPanel(Date.now())\n }\n\n const containerBlur = (e) => {\n if (containerFocused.isOpen !== 1) {\n containerFocused.close()\n triggerScrollForPanel(Date.now())\n }\n }\n\n\n const onBlur = (e) => {\n const newValue = input.current.textContent.length === 0 ? '' : input.current.innerHTML\n // Só reescreve se o conteúdo mudou de fato: focar/desfocar sem editar não pode\n // marcar o form como alterado (senão dispara a confirmação de descarte à toa).\n // textContent vazio equivale a valor ausente/'' do form.\n if (newValue !== (formValue || '')) {\n setFormValue(newValue)\n }\n }\n\n const keydownHandler = (e) => {\n if (containerFocused.isOpen === 2){\n if (formatTools.indexOf('link') < 0) {\n return\n }\n if((e.key === \"k\" && e.ctrlKey) || (e.key === \"k\" && e.metaKey)){\n e.preventDefault();\n execCommand(null,'link')\n }\n }\n }\n\n useEffect(() => {\n document.addEventListener('keydown',keydownHandler);\n return () => document.removeEventListener('keydown',keydownHandler);\n }, [containerFocused.isOpen])\n\n const execCommand = (e, command) => {\n if (command === 'link') {\n let nodeEl\n if (!isSelectionInsideRichTextEditor()) {\n let anchor = document.createElement('a')\n anchor.innerHTML = '​'\n input.current.appendChild(anchor)\n nodeEl = anchor\n } else {\n const range = window.getSelection().getRangeAt(0)\n const selectedNode = range.startContainer\n if (range.collapsed) {\n const start = getNextRegularCharIndex(selectedNode.textContent, range.startOffset, -1)\n const end = getNextRegularCharIndex(selectedNode.textContent, range.startOffset - 1, 1)\n if (start < range.startOffset && end > range.startOffset - 1) {\n range.setStart(selectedNode, start)\n range.setEnd(selectedNode, end + 1)\n }\n }\n const selectedEl = selectedNode.nodeType === Node.TEXT_NODE ? selectedNode.parentNode : selectedNode\n const parent = selectedEl.closest('a,.'+JS_CLASS)\n if (parent && parent.matches('a')) {\n nodeEl = parent\n } else {\n let anchor = document.createElement('a')\n anchor.innerHTML = '​'\n if (range.collapsed) {\n range.insertNode(anchor)\n } else {\n if (range.commonAncestorContainer === input.current) {\n range.setStart(range.endContainer,0)\n }\n document.execCommand('createLink', false, '_')\n anchor = window.getSelection().anchorNode\n }\n const parent = range.commonAncestorContainer.nodeType === 3 ? range.commonAncestorContainer.parentNode : range.commonAncestorContainer\n const links = parent.querySelectorAll(\"a[href='_']\")\n Array.from(links).slice(0,-1).forEach(removeLinkFromNode)\n nodeEl = _.last(links)\n nodeEl.setAttribute('href', ' ')\n }\n }\n tempValue.current = input.current.innerHTML\n openDialog(nodeEl)\n } else {\n if (!isSelectionInsideRichTextEditor()) {\n input.current.focus()\n const last = document.createTreeWalker(input.current, NodeFilter.SHOW_TEXT).lastChild()\n const range = document.createRange()\n range.selectNodeContents(last || input.current)\n range.collapse(false)\n const sel = window.getSelection()\n sel.removeAllRanges()\n sel.addRange(range)\n }\n document.execCommand(command)\n setFormValue(input.current.innerHTML)\n toggleButtonsState()\n focus()\n }\n }\n\n const isSelectionInsideRichTextEditor = () => {\n const range = window.getSelection().getRangeAt(0)\n if (!range) return false\n const el = range.startContainer\n if (!el) return false\n const node = el.closest ? el : (el.parentNode || document.body)\n return node.closest('.'+JS_CLASS) === input.current\n }\n\n\n const saveRichTextLink = ({linkUrl, linkText}) => {\n const currentActiveLinkNode = activeLinkNode.current\n currentActiveLinkNode.setAttribute('href', addHttp(linkUrl))\n currentActiveLinkNode.setAttribute('target', '_blank')\n if (currentActiveLinkNode.textContent !== linkText) {\n currentActiveLinkNode.innerText = linkText\n }\n linkPopup.close()\n setSelectionRange(currentActiveLinkNode.lastChild, currentActiveLinkNode.textContent.length, 0)\n focus()\n setFormValue(input.current.innerHTML)\n }\n\n const cancelRichTextLink = (e) => {\n if (alreadyCancelled.get()) return\n const currentActiveLinkNode = activeLinkNode.current\n const span = document.createElement('span')\n if (currentActiveLinkNode.nextSibling)\n (currentActiveLinkNode.parentNode).insertBefore(span, currentActiveLinkNode.nextSibling)\n else\n (currentActiveLinkNode.parentNode).append(span)\n setSelectionRange(span, 0, 0)\n focus()\n if (currentActiveLinkNode.getAttribute('href') === ' ') {\n removeLink(e)\n }\n alreadyCancelled.set(true)\n span.remove()\n if (input.current) {\n input.current.normalize()\n } else {\n needsNormalize.set(true)\n }\n linkPopup.close()\n }\n\n const handleKeyUp = (e) => {\n toggleButtonsState()\n setFormValue(reformatText(input.current.innerHTML))\n }\n\n const handleKeyDown = (e) => {\n /*if (linkJustCreated.current && e.which === 8) {\n linkJustCreated.current.outerHTML = linkJustCreated.current.innerHTML\n input.current.normalize()\n return\n }\n commands.set([])\n linkJustCreated.set(null)\n const selectedRange = window.getSelection().getRangeAt(0)\n if (!selectedRange) return\n const possibleTextNode = selectedRange.startContainer\n const node = possibleTextNode.nodeType === Node.TEXT_NODE ? possibleTextNode.parentNode : possibleTextNode\n const parent = node.closest('a,.'+JS_CLASS)\n if ((e.key === 'Enter' || e.which === 32) && parent && parent.matches('.'+JS_CLASS)) {\n const range = document.createRange()\n range.setEnd(selectedRange.startContainer, selectedRange.startOffset)\n range.setStart(selectedRange.startContainer, 0)\n traverseAndAddLink(range)\n }*/\n }\n\n const traverseAndAddLink = (range) => {\n const match = range.toString().match(/[\\s\\t\\n\\r]([^\\s\\t\\n\\r]*)$/)\n if (match) {\n if ((/^(https?:\\/\\/|www\\.)/).test(match[1]) && linkRegex.test(match[1])) {\n range.setStart(range.startContainer, (match).index + 1);\n (range.endContainer).splitText(range.endContainer.textContent.length - 1)\n const newNode = document.createElement('a')\n newNode.href = match[1]\n newNode.appendChild(range.extractContents())\n range.insertNode(newNode)\n window.getSelection().getRangeAt(0).setEndAfter(newNode)\n window.getSelection().getRangeAt(0).setStartAfter(newNode)\n linkJustCreated.set(newNode)\n }\n } else {\n const previous = getPreviousElement(range.startContainer)\n if (previous) {\n range.setStart(previous, 0)\n traverseAndAddLink(range)\n }\n }\n }\n\n const getPreviousElement = (node) => {\n if (node.previousSibling) {\n const rightMost = getRightMostElement(node.previousSibling)\n if (rightMost.nodeType === Node.TEXT_NODE) {\n return rightMost\n } else {\n return getPreviousElement(rightMost)\n }\n } else if (node.parentNode && node !== input.current) {\n return getPreviousElement(node.parentNode)\n } else {\n return null\n }\n }\n\n const handlePasteDrop = (e) => setTimeout(() => pasted(e), 1)\n\n const handleClick = (e) => {\n toggleButtonsState()\n const el = e.target.closest('a,.'+JS_CLASS)\n if (el && el.matches('a') && el.getAttribute('href')) {\n openDialog(el)\n }\n }\n\n const openDialog = (el) => {\n activeLinkNode.current = el\n alreadyCancelled.set(false)\n linkPopup.openWith({linkText: el.textContent, linkUrl: (el.getAttribute('href') || '').trim()})\n }\n\n\n const removeLinkFromNode = (node) => {\n node.outerHTML = node.innerHTML === '\\u200b' ? '' : node.innerHTML\n }\n\n const removeLink = (e) => {\n if (e) e.preventDefault()\n alreadyCancelled.set(true)\n removeLinkFromNode(activeLinkNode.current)\n linkPopup.close()\n if (input.current) {\n setFormValue(input.current.innerHTML)\n input.current.normalize()\n }\n }\n\n const pasted = (e) => {\n cleanEditor(input.current, validElements)\n }\n\n const toggleButtonsState = () => {\n return setActivatedTools(_.zipObject(formatTools,formatTools.map((t)=>window.document.queryCommandState(t))))\n }\n\n const toolButton = (tool) => <ToolButton\n key={tool}\n tabIndex={-1}\n onClick={(e) => execCommand(e, tool)}\n className={'button exec-command rich-text-button only-icon ' + (activatedTools[tool] ? 'activated' : '')}\n type=\"button\"\n >\n <span className={'icon icon-' + tool}/>\n </ToolButton>\n\n const richTextElement = <RichTextContainer\n linkColor={linkColor}\n ref={container}\n onFocus={containerFocus}\n onBlur={containerBlur}\n focus={containerFocused.isOpen}\n showToolbar={!disabled & !autoHideToolbar || containerFocused.isOpen}\n className={className}\n >\n <ToolsContainer className=\"rich-text-tools\">\n {formatTools.map((t, i) => t === 'separator' ? <ToolSeparator className=\"separator\"\n key={\"separator-\" + i}/> : toolButton(t))}\n </ToolsContainer>\n <RichTextInput>\n <ContentEditable\n className={JS_CLASS}\n innerRef={input}\n html={tempValue.current || \"\"}\n onBlur={onBlur}\n onClick={handleClick}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDown}\n onPaste={handlePasteDrop}\n onDrop={handlePasteDrop}\n tabIndex={tabIndex}\n disabled={disabled}\n minHeight={minHeight}\n placeholder={placeholder}\n />\n </RichTextInput>\n {locked && <InputIcon icon=\"lock\"/>}\n {\n linkPopup.isOpen &&\n <EditLinkPopup\n input={input}\n activeLinkNode={activeLinkNode}\n cancel={cancelRichTextLink}\n values={linkPopup.isOpen}\n removeLink={removeLink}\n saveLink={saveRichTextLink}\n />\n }\n </RichTextContainer>\n return (label\n ? <Field labelClick={focus} descText={descText} helpText={helpText} label={label} mandatory={mandatory}>\n {richTextElement}\n </Field>\n : richTextElement\n )\n}\n\nconst EditLinkPopup = ({cancel, removeLink, activeLinkNode, input, saveLink, values}) => {\n const linkPopup = useRef()\n const formRef = useRef()\n const linkTextRef = useRef()\n const linkUrlRef = useRef()\n const LABELS = useContext(StartlibsContext).labels.RichText\n\n\n const preValidation = (formValues) => {\n let errors\n if (!formValues.linkText) {\n errors = {'linkText': [LABELS.linkTextError]}\n }\n if (!formValues.linkUrl || formValues.linkUrl === ' ' || !linkRegex.test(formValues.linkUrl.trim())) {\n errors = {...errors, 'linkUrl': [LABELS.linkUrlError]}\n }\n return errors\n }\n\n const checkEscOrEnter = (e) => {\n if (e.keyCode === 27) {\n e.stopPropagation()\n cancel(e)\n } else if (e.keyCode === 13) {\n e.preventDefault()\n e.stopPropagation()\n formRef.current.submitForm()\n }\n }\n\n useEffect(() => {\n const currentActiveLinkNode = activeLinkNode.current\n const currentLinkPopup = linkPopup.current\n const offsetLeft = currentActiveLinkNode.getClientRects().length > 1 ? input.offsetLeft : currentActiveLinkNode.offsetLeft\n const left = ((currentActiveLinkNode.offsetWidth) / 2) - (currentLinkPopup.offsetWidth / 2) + offsetLeft\n const top = (currentActiveLinkNode.offsetHeight) + currentActiveLinkNode.offsetTop\n Object.assign(currentLinkPopup.style, {\n 'position': 'absolute',\n 'left': left + 'px',\n 'top': top + 'px'\n })\n if (values.linkText) {\n linkUrlRef.current.focus()\n } else {\n linkTextRef.current.focus()\n }\n return cancel\n }, [])\n\n return <WithForm skipDom ref={formRef} action={saveLink} values={values} preValidation={preValidation}>{form =>\n <div onClick={stopPropagation()} ref={linkPopup} onKeyDown={checkEscOrEnter}\n className=\"popup rich-text-link-editor ignore-link\" contentEditable={false}>\n <TextInput\n ref={linkTextRef}\n mandatory\n path=\"linkText\"\n label={LABELS.popupLinkText}\n />\n <TextInput\n ref={linkUrlRef}\n mandatory\n path=\"linkUrl\"\n label={LABELS.popupLinkUrl}\n />\n <div className=\"popup-footer\">\n <Button className=\"remove-link\" icon=\"remove\" onClick={removeLink}>\n {LABELS.popupRemove}\n </Button>\n <Button onClick={cancel} tabIndex={0}>{LABELS.popupCancel}</Button>\n <Button highlight onClick={form.willSubmitForm}>{LABELS.popupConfirm}</Button>\n </div>\n <Errors/>\n </div>\n }</WithForm>\n}"],"names":["InputIcon","styled","Icon","withConfig","displayName","componentId","getColor","FORMAT_TOOLS","TAG_TO_STYLE_PROPERTY","GET_LIMITS_FONT_SIZE_PX","s","document","createElement","style","fontSize","body","appendChild","parseInt","getComputedStyle","removeChild","limits","wrapWith","el","wrapper","parentNode","insertBefore","FIX_STYLE","fontWeight","v","intFontWeight","window","min","max","intFontSize","Math","textDecoration","values","split","filter","indexOf","RichTextContainer","div","props","hasErrors","concat","showToolbar","ToolsContainer","focus","locked","css","linkColor","darken","RichTextInput","minHeight","disabled","ToolButton","Button","ToolSeparator","span","JS_CLASS","getNextRegularCharIndex","text","offset","direction","regex","cursor","match","addHttp","replace","setSelectionRange","input","selectionStart","selectionEnd","arguments","length","undefined","range","createRange","sel","getSelection","setStart","setEnd","collapse","removeAllRanges","addRange","cleanEditor","editor","acceptedTags","Array","prototype","slice","call","querySelectorAll","forEach","remove","acceptedStyles","map","t","_identity","newSpace","createTextNode","rangeCount","container","getRangeAt","startContainer","nodeType","nextSibling","previousSibling","textContent","clean","children","tagName","toLowerCase","rect","getBoundingClientRect","isHidden","display","width","height","childNodes","removeAttribute","setAttribute","getAttribute","usedStyles","_toPairs","_pick","_ref","k","fixedStyle","_fromPairs","_ref2","Object","assign","href","outerHTML","innerHTML","hasChildNodes","newTagName","newEl","child","replaceChild","e","RichText","_ref3","path","inputRef","label","autoHideToolbar","autoFocus","placeholder","className","formatTools","reformatText","mandatory","descText","helpText","tabIndex","value","setValue","raw","linkPopup","usePopupToggle","useEnsureRef","activeLinkNode","useRef","useRefState","containerFocused","useToggle","needsNormalize","alreadyCancelled","formValue","_setFormValue","useInput","tempValue","setFormValue","current","useEffect","activatedTools","setActivatedTools","useState","validElements","useLazyConstant","_flatten","tool","requestAnimationFrame","get","normalize","set","triggerScrollForPanel","d","time","dispatchEvent","Event","containerFocus","openWith","Date","now","containerBlur","isOpen","close","onBlur","newValue","keydownHandler","key","ctrlKey","metaKey","preventDefault","execCommand","addEventListener","removeEventListener","command","nodeEl","isSelectionInsideRichTextEditor","anchor","selectedNode","collapsed","start","startOffset","end","selectedEl","Node","TEXT_NODE","parent","closest","matches","insertNode","commonAncestorContainer","endContainer","anchorNode","links","from","removeLinkFromNode","_last","openDialog","last","createTreeWalker","NodeFilter","SHOW_TEXT","lastChild","selectNodeContents","toggleButtonsState","node","saveRichTextLink","_ref4","linkUrl","linkText","currentActiveLinkNode","innerText","cancelRichTextLink","append","removeLink","handleKeyUp","handleKeyDown","handlePasteDrop","setTimeout","pasted","handleClick","target","trim","_zipObject","queryCommandState","toolButton","React","onClick","type","richTextElement","ref","onFocus","i","ContentEditable","innerRef","html","onKeyUp","onKeyDown","onPaste","onDrop","icon","EditLinkPopup","cancel","saveLink","Field","labelClick","_ref5","formRef","linkTextRef","linkUrlRef","LABELS","useContext","StartlibsContext","labels","preValidation","formValues","errors","linkTextError","linkRegex","test","_objectSpread","linkUrlError","checkEscOrEnter","keyCode","stopPropagation","submitForm","currentLinkPopup","offsetLeft","getClientRects","left","offsetWidth","top","offsetHeight","offsetTop","WithForm","skipDom","action","form","contentEditable","TextInput","popupLinkText","popupLinkUrl","popupRemove","popupCancel","highlight","willSubmitForm","popupConfirm","Errors"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RichText.mjs","sources":["../src/RichText.jsx"],"sourcesContent":["import React, {useContext, useEffect, useRef, useState} from 'react'\nimport styled, {css} from 'styled-components'\nimport ContentEditableModule from 'react-contenteditable'\nimport {darken} from 'polished'\nimport _ from 'lodash/fp'\nimport {getColor, linkRegex, stopPropagation} from '@startlibs/utils'\nimport {StartlibsContext, useEnsureRef, useLazyConstant, useToggle, usePopupToggle, useRefState} from '@startlibs/core'\nimport {Errors} from './Errors'\nimport {Field} from './Field'\nimport {WithForm} from './Form'\nimport {TextInput} from './TextInput'\nimport {useInput} from './enhanceInput'\nimport {Button, Icon} from '@startlibs/components'\n\n// Node/esbuild interop em .mjs devolve module.exports; Rollup devolve o default. Cobre os dois.\nconst ContentEditable = ContentEditableModule.default || ContentEditableModule\n\nconst InputIcon = styled(Icon)`\n position: absolute;\n outline: none;\n bottom: 0;\n font-size: 21px;\n line-height: 3rem;\n right: 0;\n width: 2rem;\n pointer-events: none;\n color: ${getColor('gray150')};\n`\n\nconst FORMAT_TOOLS = {\n 'bold': ['b', 'strong'],\n 'italic': 'i',\n 'underline': 'u',\n 'strikethrough': 'strike',\n 'link': 'a',\n 'insertUnorderedList': ['ul', 'li'],\n 'insertOrderedList': ['ol', 'li'],\n 'outdent': '',\n 'indent': 'blockquote',\n 'fontSizeUp': 'font',\n 'fontSizeDown': 'font'\n}\n\nconst TAG_TO_STYLE_PROPERTY = {\n 'b': 'fontWeight',\n 'strong': 'fontWeight',\n 'u': 'textDecoration',\n 'strike': 'textDecoration',\n 'font': 'fontSize',\n 'i': 'fontStyle'\n}\n\nlet GET_LIMITS_FONT_SIZE_PX = () => {\n const s = document.createElement('span')\n s.style.fontSize = 'medium'\n document.body.appendChild(s)\n const fontSize = parseInt(getComputedStyle(s).fontSize)\n document.body.removeChild(s)\n const limits = [fontSize * 3 / 5, fontSize * 3]\n GET_LIMITS_FONT_SIZE_PX = () => limits\n return limits\n}\n\nconst wrapWith = (el,wrapper) => {\n el.parentNode.insertBefore(wrapper, el);\n wrapper.appendChild(el)\n}\n\nconst FIX_STYLE = {\n 'fontWeight': (v, el) => {\n const intFontWeight = parseInt(window.getComputedStyle(el).fontWeight)\n return intFontWeight <= 400 ? 400 : 600\n },\n 'fontSize': (v, el) => {\n const [min, max] = GET_LIMITS_FONT_SIZE_PX()\n const intFontSize = parseInt(window.getComputedStyle(el).fontSize)\n return Math.min(max, Math.max(min, intFontSize)) + 'px'\n },\n 'textDecoration': (v,el) => {\n const values = v.split(' ').filter(v => v === 'underline' || v === 'line-through')\n if (values.indexOf('underline')>=0) {\n wrapWith(el,document.createElement('u'))\n }\n if (values.indexOf('line-through')>=0) {\n wrapWith(el,document.createElement('strike'))\n }\n return ''\n }\n}\n\nexport const RichTextContainer = styled.div`\n position:relative;\n width: 100%;\n border: 1px solid ${getColor('gray210')};\n border-radius: 8px;\n background: white;\n ${props => props.hasErrors && `border-color: ${getColor(props)('alert')}`};\n ${props => props.showToolbar && `\n ${ToolsContainer} {\n transition: 0.5s;\n max-height: 7.5rem;\n transition: 0.6s;\n pointer-events: auto;\n }\n `};\n ${props => props.focus && `\n border-color: ${getColor('gray180')};\n box-shadow: 0px 0px 0px 2px rgba(0,0,0,0.1);\n `}\n ${props => props.locked && css`\n padding-right: 2.25rem;\n background: rgba(0,0,0,0.075);\n `}\n ${props => props.linkColor && css`\n a, a:visited, a:focus, a:active {\n color: ${props.linkColor};\n }\n a:hover {\n color: ${darken(0.05, props.linkColor)};\n }\n `}\n ul {\n list-style-type: disc;\n }\n ul, ol {\n padding-inline-start: 25px;\n margin-block-start: 0.5em;\n margin-block-end: 0.5em;\n }\n`\n\nexport const RichTextInput = styled.div`\n font-size: 14px;\n color: ${getColor('gray60')};\n background: white;\n border-radius: 7px;\n > div {\n overflow: auto;\n width: 100%;\n outline: none;\n min-height: ${props=>props.minHeight || 60}px;\n padding: 0.7rem;\n }\n b, strong {\n font-weight: 600;\n }\n a {\n text-decoration: underline;\n }\n > div[contenteditable=true]:empty:before {\n content: attr(placeholder);\n color: rgba(0,0,0,0.3);\n }\n ${props => props.disabled && `\n &[disabled] {\n background: rgba(0, 0, 0, 0.075) !important;\n opacity: 0.75 !important;\n }\n `}\n`\n\nconst ToolsContainer = styled.div`\n background: ${getColor('lightBluishGray')};\n padding: 0 0.125rem;\n border-top-left-radius: 7px;\n border-top-right-radius: 7px;\n transition: 0.225s;\n max-height: 0;\n pointer-events: none;\n overflow: hidden;\n display: flex;\n align-items: center;\n`\n\nconst ToolButton = styled(Button)`\n min-height: 2rem;\n min-width: 2rem;\n background: transparent;\n box-shadow: none;\n margin: 0.25rem 0.125rem;\n & ~ & {\n margin-left: 0.125rem;\n }\n .icon {\n font-size: 23px;\n color: ${getColor('gray90')};\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%,-50%);\n transform: translate(-50%,-50%);\n }\n &:hover, &.activated:hover {\n background: rgba(0,0,0,0.11);\n }\n &.activated {\n background: rgba(0,0,0,0.09);\n }\n &:focus:after {\n content: none;\n }\n`\n\nconst ToolSeparator = styled.span`\n border-left: 1px solid rgba(0,0,0,0.1);\n margin-left: 0.75rem;\n margin-right: 0.5rem;\n height: 1.5rem;\n`\n\nconst JS_CLASS = \"EDITOR--JS\"\n\nconst getNextRegularCharIndex = (text, offset, direction) => {\n const regex = /[A-Za-z0-9ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏàáâãäåæçèéêëìíîïÐÑÒÓÔÕÖØÙÚÛÜÝÞßðñòóôõöøùúûüýþÿ]/g\n let cursor = offset\n while ((text[cursor + direction] || '').match(regex)) {\n cursor += direction\n }\n return cursor\n}\n\nconst addHttp = (s) => {\n s = s.replace(/^\\s/, '')\n if (s.indexOf('http://') === 0 || s.indexOf('https://') === 0) {\n return s\n } else {\n return 'http://' + s\n }\n}\n\nconst getRightMostElement = (node) => {\n if (node.childNodes.length) {\n return getRightMostElement(node.childNodes[node.childNodes.length - 1])\n } else {\n return node\n }\n}\n\nconst setSelectionRange = (input, selectionStart, selectionEnd = 0) => {\n if (!input) return\n let range = document.createRange()\n let sel = window.getSelection()\n range.setStart(input, selectionStart)\n if (selectionEnd) {\n range.setEnd(input, selectionEnd)\n } else {\n range.collapse(true)\n }\n sel.removeAllRanges()\n sel.addRange(range)\n}\n\nconst cleanEditor = (editor, acceptedTags) => {\n Array.prototype.slice.call(editor.querySelectorAll('.Apple-interchange-newline')).forEach(el => el.remove())\n Array.prototype.slice.call(editor.querySelectorAll('iframe')).forEach(el => el.remove())\n\n const acceptedStyles = acceptedTags.map(t => TAG_TO_STYLE_PROPERTY[t]).filter(_.identity)\n\n const newSpace = document.createTextNode('\\u00A0')\n if (window.getSelection().rangeCount) {\n const container = window.getSelection().getRangeAt(0).startContainer\n if (container.nodeType === 3) {\n container.parentNode.insertBefore(newSpace, container.nextSibling)\n } else {\n container.appendChild(newSpace)\n }\n if (newSpace.previousSibling && newSpace.previousSibling.textContent === '\\u00A0') {\n newSpace.previousSibling.remove()\n }\n setSelectionRange(newSpace, 0)\n }\n\n const clean = (children) => {\n Array.prototype.slice.call(children).forEach(el => {\n try {\n if (el.nodeType === 3)\n return\n if (!el.tagName) {\n el.remove()\n return\n }\n let tagName = el.tagName.toLowerCase()\n const style = getComputedStyle(el)\n const rect = el.getBoundingClientRect()\n const isHidden = style.display === 'none' || rect.width === 0 || rect.height === 0\n if (isHidden && (el.children && !el.children.length) && tagName !== 'br') {\n el.remove()\n } else if (acceptedTags.indexOf(tagName) >= 0) {\n clean(el.childNodes)\n el.removeAttribute('class')\n if (tagName === 'a') {\n el.setAttribute('target', '_blank')\n }\n if (el.getAttribute('style')) {\n const usedStyles = _.toPairs(_.pick(acceptedStyles, el.style)).filter(([k, v]) => v !== \"\")\n const fixedStyle = _.fromPairs(usedStyles.map(([k, v]) => [k, (FIX_STYLE[k] || _.identity)(v, el)]))\n el.removeAttribute('style')\n Object.assign(el.style, fixedStyle)\n }\n } else if (tagName === 'a') {\n clean(el.childNodes)\n if (el.textContent !== el.href || el.textContent.length < 5)\n el.outerHTML = el.innerHTML\n } else {\n clean(el.childNodes)\n if (el.hasChildNodes()) {\n const newTagName = style.display === 'inline' ? 'span' : 'div'\n const newEl = document.createElement(newTagName)\n Array.prototype.slice.call(el.childNodes).forEach(child => newEl.appendChild(child))\n el.parentNode.replaceChild(newEl, el)\n } else {\n el.remove()\n }\n }\n } catch (e) {\n if (el && el.remove)\n el.remove()\n }\n })\n }\n clean(editor.childNodes)\n}\n\nconst insertToken = (node, offset) => {\n const parent = node.parentNode\n const token = document.createElement(\"span\")\n if (node.nodeType === Node.TEXT_NODE) {\n const splitted = node.splitText(offset)\n parent.insertBefore(token, splitted)\n } else {\n parent.insertBefore(token, node)\n }\n return token\n}\n\n/*\n* pagely reformat\n .replace(/^[a-z]/, function (e) {\n return e.toUpperCase()\n })\n* */\n\nconst parseAndExecCommand = (c) => {\n if (c === \"strikethrough\" || c === \"underline\") {\n document.execCommand('styleWithCSS', false, false)\n } else {\n document.execCommand('styleWithCSS', false, true)\n }\n if (c.indexOf('fontSize') === 0) {\n const direction = c.indexOf('Up') > 0 ? 1 : -1\n const newValue = Math.min(7, Math.max(1, parseInt(document.queryCommandValue('fontSize') || 3) + direction))\n document.execCommand('fontSize', false, newValue)\n } else {\n const sanitizedCommand = (c.indexOf(\"List\") >= 0 && document.queryCommandState(c)) ? 'outdent' : c // FIX CHROME HANGS when list is called and already active\n\n document.execCommand(sanitizedCommand)\n }\n}\n\nexport const RichText = ({path, inputRef, label, autoHideToolbar, autoFocus, disabled, minHeight, placeholder, className, formatTools = ['bold', 'italic', 'underline', 'strikethrough', 'separator', 'link'], reformatText = _.identity, mandatory, descText, helpText, linkColor, tabIndex = 1, value, setValue,raw, locked}) => {\n\n const linkPopup = usePopupToggle()\n\n const input = useEnsureRef(inputRef)\n const activeLinkNode = useRef()\n const container = useRef()\n const linkJustCreated = useRefState()\n\n // auto-hide needs\n const startSelectionToken = useRefState()\n const endSelectionToken = useRefState()\n const commands = useRefState([])\n const containerFocused = useToggle()\n\n const needsNormalize = useRefState()\n const alreadyCancelled = useRefState()\n\n // const [formValue, setFormValue] = useInput({path})\n const [formValue, _setFormValue, {hasErrors}] = useInput({path,value,setValue},raw)\n\n // const tempValue = useConstant(formValue)\n const tempValue = useRef(formValue)\n const setFormValue = (v) => {\n tempValue.current = v\n _setFormValue(v)\n }\n\n useEffect(() => {\n if((value === formValue) && (formValue !== tempValue)){\n tempValue.current = formValue\n }\n },[path])\n\n const [activatedTools, setActivatedTools] = useState({})\n\n const validElements = useLazyConstant(() => ['br', 'div', 'p', 'span'].concat(_.flatten(formatTools.map(tool => FORMAT_TOOLS[tool] || []))))\n\n useEffect(() => {\n cleanEditor(input.current, validElements)\n }, [])\n\n const focus = () => input.current && input.current.focus()\n\n // Foco inicial opcional (ex.: abrir a dialog já no campo de descrição). Em\n // rAF pra rodar depois que a dialog termina de montar e não perder o foco.\n useEffect(() => {\n if (autoFocus) {\n requestAnimationFrame(focus)\n }\n }, [])\n\n useEffect(() => {\n if (needsNormalize.get()) {\n input.current.normalize()\n needsNormalize.set(false)\n }\n })\n\n const triggerScrollForPanel = (d) => {\n requestAnimationFrame((time) => {\n if (time > d + 250) return\n window.dispatchEvent(new Event('scroll'))\n triggerScrollForPanel(d)\n }\n )\n }\n\n const containerFocus = () => {\n containerFocused.openWith(2)\n triggerScrollForPanel(Date.now())\n }\n\n const containerBlur = (e) => {\n if (containerFocused.isOpen !== 1) {\n containerFocused.close()\n triggerScrollForPanel(Date.now())\n }\n }\n\n\n const onBlur = (e) => {\n const newValue = input.current.textContent.length === 0 ? '' : input.current.innerHTML\n // Só reescreve se o conteúdo mudou de fato: focar/desfocar sem editar não pode\n // marcar o form como alterado (senão dispara a confirmação de descarte à toa).\n // textContent vazio equivale a valor ausente/'' do form.\n if (newValue !== (formValue || '')) {\n setFormValue(newValue)\n }\n }\n\n const keydownHandler = (e) => {\n if (containerFocused.isOpen === 2){\n if (formatTools.indexOf('link') < 0) {\n return\n }\n if((e.key === \"k\" && e.ctrlKey) || (e.key === \"k\" && e.metaKey)){\n e.preventDefault();\n execCommand(null,'link')\n }\n }\n }\n\n useEffect(() => {\n document.addEventListener('keydown',keydownHandler);\n return () => document.removeEventListener('keydown',keydownHandler);\n }, [containerFocused.isOpen])\n\n const execCommand = (e, command) => {\n if (command === 'link') {\n let nodeEl\n if (!isSelectionInsideRichTextEditor()) {\n let anchor = document.createElement('a')\n anchor.innerHTML = '​'\n input.current.appendChild(anchor)\n nodeEl = anchor\n } else {\n const range = window.getSelection().getRangeAt(0)\n const selectedNode = range.startContainer\n if (range.collapsed) {\n const start = getNextRegularCharIndex(selectedNode.textContent, range.startOffset, -1)\n const end = getNextRegularCharIndex(selectedNode.textContent, range.startOffset - 1, 1)\n if (start < range.startOffset && end > range.startOffset - 1) {\n range.setStart(selectedNode, start)\n range.setEnd(selectedNode, end + 1)\n }\n }\n const selectedEl = selectedNode.nodeType === Node.TEXT_NODE ? selectedNode.parentNode : selectedNode\n const parent = selectedEl.closest('a,.'+JS_CLASS)\n if (parent && parent.matches('a')) {\n nodeEl = parent\n } else {\n let anchor = document.createElement('a')\n anchor.innerHTML = '​'\n if (range.collapsed) {\n range.insertNode(anchor)\n } else {\n if (range.commonAncestorContainer === input.current) {\n range.setStart(range.endContainer,0)\n }\n document.execCommand('createLink', false, '_')\n anchor = window.getSelection().anchorNode\n }\n const parent = range.commonAncestorContainer.nodeType === 3 ? range.commonAncestorContainer.parentNode : range.commonAncestorContainer\n const links = parent.querySelectorAll(\"a[href='_']\")\n Array.from(links).slice(0,-1).forEach(removeLinkFromNode)\n nodeEl = _.last(links)\n nodeEl.setAttribute('href', ' ')\n }\n }\n tempValue.current = input.current.innerHTML\n openDialog(nodeEl)\n } else {\n if (!isSelectionInsideRichTextEditor()) {\n input.current.focus()\n const last = document.createTreeWalker(input.current, NodeFilter.SHOW_TEXT).lastChild()\n const range = document.createRange()\n range.selectNodeContents(last || input.current)\n range.collapse(false)\n const sel = window.getSelection()\n sel.removeAllRanges()\n sel.addRange(range)\n }\n document.execCommand(command)\n setFormValue(input.current.innerHTML)\n toggleButtonsState()\n focus()\n }\n }\n\n const isSelectionInsideRichTextEditor = () => {\n const range = window.getSelection().getRangeAt(0)\n if (!range) return false\n const el = range.startContainer\n if (!el) return false\n const node = el.closest ? el : (el.parentNode || document.body)\n return node.closest('.'+JS_CLASS) === input.current\n }\n\n\n const saveRichTextLink = ({linkUrl, linkText}) => {\n const currentActiveLinkNode = activeLinkNode.current\n currentActiveLinkNode.setAttribute('href', addHttp(linkUrl))\n currentActiveLinkNode.setAttribute('target', '_blank')\n if (currentActiveLinkNode.textContent !== linkText) {\n currentActiveLinkNode.innerText = linkText\n }\n linkPopup.close()\n setSelectionRange(currentActiveLinkNode.lastChild, currentActiveLinkNode.textContent.length, 0)\n focus()\n setFormValue(input.current.innerHTML)\n }\n\n const cancelRichTextLink = (e) => {\n if (alreadyCancelled.get()) return\n const currentActiveLinkNode = activeLinkNode.current\n const span = document.createElement('span')\n if (currentActiveLinkNode.nextSibling)\n (currentActiveLinkNode.parentNode).insertBefore(span, currentActiveLinkNode.nextSibling)\n else\n (currentActiveLinkNode.parentNode).append(span)\n setSelectionRange(span, 0, 0)\n focus()\n if (currentActiveLinkNode.getAttribute('href') === ' ') {\n removeLink(e)\n }\n alreadyCancelled.set(true)\n span.remove()\n if (input.current) {\n input.current.normalize()\n } else {\n needsNormalize.set(true)\n }\n linkPopup.close()\n }\n\n const handleKeyUp = (e) => {\n toggleButtonsState()\n setFormValue(reformatText(input.current.innerHTML))\n }\n\n const handleKeyDown = (e) => {\n /*if (linkJustCreated.current && e.which === 8) {\n linkJustCreated.current.outerHTML = linkJustCreated.current.innerHTML\n input.current.normalize()\n return\n }\n commands.set([])\n linkJustCreated.set(null)\n const selectedRange = window.getSelection().getRangeAt(0)\n if (!selectedRange) return\n const possibleTextNode = selectedRange.startContainer\n const node = possibleTextNode.nodeType === Node.TEXT_NODE ? possibleTextNode.parentNode : possibleTextNode\n const parent = node.closest('a,.'+JS_CLASS)\n if ((e.key === 'Enter' || e.which === 32) && parent && parent.matches('.'+JS_CLASS)) {\n const range = document.createRange()\n range.setEnd(selectedRange.startContainer, selectedRange.startOffset)\n range.setStart(selectedRange.startContainer, 0)\n traverseAndAddLink(range)\n }*/\n }\n\n const traverseAndAddLink = (range) => {\n const match = range.toString().match(/[\\s\\t\\n\\r]([^\\s\\t\\n\\r]*)$/)\n if (match) {\n if ((/^(https?:\\/\\/|www\\.)/).test(match[1]) && linkRegex.test(match[1])) {\n range.setStart(range.startContainer, (match).index + 1);\n (range.endContainer).splitText(range.endContainer.textContent.length - 1)\n const newNode = document.createElement('a')\n newNode.href = match[1]\n newNode.appendChild(range.extractContents())\n range.insertNode(newNode)\n window.getSelection().getRangeAt(0).setEndAfter(newNode)\n window.getSelection().getRangeAt(0).setStartAfter(newNode)\n linkJustCreated.set(newNode)\n }\n } else {\n const previous = getPreviousElement(range.startContainer)\n if (previous) {\n range.setStart(previous, 0)\n traverseAndAddLink(range)\n }\n }\n }\n\n const getPreviousElement = (node) => {\n if (node.previousSibling) {\n const rightMost = getRightMostElement(node.previousSibling)\n if (rightMost.nodeType === Node.TEXT_NODE) {\n return rightMost\n } else {\n return getPreviousElement(rightMost)\n }\n } else if (node.parentNode && node !== input.current) {\n return getPreviousElement(node.parentNode)\n } else {\n return null\n }\n }\n\n const handlePasteDrop = (e) => setTimeout(() => pasted(e), 1)\n\n const handleClick = (e) => {\n toggleButtonsState()\n const el = e.target.closest('a,.'+JS_CLASS)\n if (el && el.matches('a') && el.getAttribute('href')) {\n openDialog(el)\n }\n }\n\n const openDialog = (el) => {\n activeLinkNode.current = el\n alreadyCancelled.set(false)\n linkPopup.openWith({linkText: el.textContent, linkUrl: (el.getAttribute('href') || '').trim()})\n }\n\n\n const removeLinkFromNode = (node) => {\n node.outerHTML = node.innerHTML === '\\u200b' ? '' : node.innerHTML\n }\n\n const removeLink = (e) => {\n if (e) e.preventDefault()\n alreadyCancelled.set(true)\n removeLinkFromNode(activeLinkNode.current)\n linkPopup.close()\n if (input.current) {\n setFormValue(input.current.innerHTML)\n input.current.normalize()\n }\n }\n\n const pasted = (e) => {\n cleanEditor(input.current, validElements)\n }\n\n const toggleButtonsState = () => {\n return setActivatedTools(_.zipObject(formatTools,formatTools.map((t)=>window.document.queryCommandState(t))))\n }\n\n const toolButton = (tool) => <ToolButton\n key={tool}\n tabIndex={-1}\n onClick={(e) => execCommand(e, tool)}\n className={'button exec-command rich-text-button only-icon ' + (activatedTools[tool] ? 'activated' : '')}\n type=\"button\"\n >\n <span className={'icon icon-' + tool}/>\n </ToolButton>\n\n const richTextElement = <RichTextContainer\n linkColor={linkColor}\n ref={container}\n onFocus={containerFocus}\n onBlur={containerBlur}\n focus={containerFocused.isOpen}\n showToolbar={!disabled & !autoHideToolbar || containerFocused.isOpen}\n className={className}\n >\n <ToolsContainer className=\"rich-text-tools\">\n {formatTools.map((t, i) => t === 'separator' ? <ToolSeparator className=\"separator\"\n key={\"separator-\" + i}/> : toolButton(t))}\n </ToolsContainer>\n <RichTextInput>\n <ContentEditable\n className={JS_CLASS}\n innerRef={input}\n html={tempValue.current || \"\"}\n onBlur={onBlur}\n onClick={handleClick}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDown}\n onPaste={handlePasteDrop}\n onDrop={handlePasteDrop}\n tabIndex={tabIndex}\n disabled={disabled}\n minHeight={minHeight}\n placeholder={placeholder}\n />\n </RichTextInput>\n {locked && <InputIcon icon=\"lock\"/>}\n {\n linkPopup.isOpen &&\n <EditLinkPopup\n input={input}\n activeLinkNode={activeLinkNode}\n cancel={cancelRichTextLink}\n values={linkPopup.isOpen}\n removeLink={removeLink}\n saveLink={saveRichTextLink}\n />\n }\n </RichTextContainer>\n return (label\n ? <Field labelClick={focus} descText={descText} helpText={helpText} label={label} mandatory={mandatory}>\n {richTextElement}\n </Field>\n : richTextElement\n )\n}\n\nconst EditLinkPopup = ({cancel, removeLink, activeLinkNode, input, saveLink, values}) => {\n const linkPopup = useRef()\n const formRef = useRef()\n const linkTextRef = useRef()\n const linkUrlRef = useRef()\n const LABELS = useContext(StartlibsContext).labels.RichText\n\n\n const preValidation = (formValues) => {\n let errors\n if (!formValues.linkText) {\n errors = {'linkText': [LABELS.linkTextError]}\n }\n if (!formValues.linkUrl || formValues.linkUrl === ' ' || !linkRegex.test(formValues.linkUrl.trim())) {\n errors = {...errors, 'linkUrl': [LABELS.linkUrlError]}\n }\n return errors\n }\n\n const checkEscOrEnter = (e) => {\n if (e.keyCode === 27) {\n e.stopPropagation()\n cancel(e)\n } else if (e.keyCode === 13) {\n e.preventDefault()\n e.stopPropagation()\n formRef.current.submitForm()\n }\n }\n\n useEffect(() => {\n const currentActiveLinkNode = activeLinkNode.current\n const currentLinkPopup = linkPopup.current\n const offsetLeft = currentActiveLinkNode.getClientRects().length > 1 ? input.offsetLeft : currentActiveLinkNode.offsetLeft\n const left = ((currentActiveLinkNode.offsetWidth) / 2) - (currentLinkPopup.offsetWidth / 2) + offsetLeft\n const top = (currentActiveLinkNode.offsetHeight) + currentActiveLinkNode.offsetTop\n Object.assign(currentLinkPopup.style, {\n 'position': 'absolute',\n 'left': left + 'px',\n 'top': top + 'px'\n })\n if (values.linkText) {\n linkUrlRef.current.focus()\n } else {\n linkTextRef.current.focus()\n }\n return cancel\n }, [])\n\n return <WithForm skipDom ref={formRef} action={saveLink} values={values} preValidation={preValidation}>{form =>\n <div onClick={stopPropagation()} ref={linkPopup} onKeyDown={checkEscOrEnter}\n className=\"popup rich-text-link-editor ignore-link\" contentEditable={false}>\n <TextInput\n ref={linkTextRef}\n mandatory\n path=\"linkText\"\n label={LABELS.popupLinkText}\n />\n <TextInput\n ref={linkUrlRef}\n mandatory\n path=\"linkUrl\"\n label={LABELS.popupLinkUrl}\n />\n <div className=\"popup-footer\">\n <Button className=\"remove-link\" icon=\"remove\" onClick={removeLink}>\n {LABELS.popupRemove}\n </Button>\n <Button onClick={cancel} tabIndex={0}>{LABELS.popupCancel}</Button>\n <Button highlight onClick={form.willSubmitForm}>{LABELS.popupConfirm}</Button>\n </div>\n <Errors/>\n </div>\n }</WithForm>\n}"],"names":["ContentEditable","ContentEditableModule","default","InputIcon","styled","Icon","withConfig","displayName","componentId","getColor","FORMAT_TOOLS","TAG_TO_STYLE_PROPERTY","GET_LIMITS_FONT_SIZE_PX","s","document","createElement","style","fontSize","body","appendChild","parseInt","getComputedStyle","removeChild","limits","wrapWith","el","wrapper","parentNode","insertBefore","FIX_STYLE","fontWeight","v","intFontWeight","window","min","max","intFontSize","Math","textDecoration","values","split","filter","indexOf","RichTextContainer","div","props","hasErrors","concat","showToolbar","ToolsContainer","focus","locked","css","linkColor","darken","RichTextInput","minHeight","disabled","ToolButton","Button","ToolSeparator","span","JS_CLASS","getNextRegularCharIndex","text","offset","direction","regex","cursor","match","addHttp","replace","setSelectionRange","input","selectionStart","selectionEnd","arguments","length","undefined","range","createRange","sel","getSelection","setStart","setEnd","collapse","removeAllRanges","addRange","cleanEditor","editor","acceptedTags","Array","prototype","slice","call","querySelectorAll","forEach","remove","acceptedStyles","map","t","_identity","newSpace","createTextNode","rangeCount","container","getRangeAt","startContainer","nodeType","nextSibling","previousSibling","textContent","clean","children","tagName","toLowerCase","rect","getBoundingClientRect","isHidden","display","width","height","childNodes","removeAttribute","setAttribute","getAttribute","usedStyles","_toPairs","_pick","_ref","k","fixedStyle","_fromPairs","_ref2","Object","assign","href","outerHTML","innerHTML","hasChildNodes","newTagName","newEl","child","replaceChild","e","RichText","_ref3","path","inputRef","label","autoHideToolbar","autoFocus","placeholder","className","formatTools","reformatText","mandatory","descText","helpText","tabIndex","value","setValue","raw","linkPopup","usePopupToggle","useEnsureRef","activeLinkNode","useRef","useRefState","containerFocused","useToggle","needsNormalize","alreadyCancelled","formValue","_setFormValue","useInput","tempValue","setFormValue","current","useEffect","activatedTools","setActivatedTools","useState","validElements","useLazyConstant","_flatten","tool","requestAnimationFrame","get","normalize","set","triggerScrollForPanel","d","time","dispatchEvent","Event","containerFocus","openWith","Date","now","containerBlur","isOpen","close","onBlur","newValue","keydownHandler","key","ctrlKey","metaKey","preventDefault","execCommand","addEventListener","removeEventListener","command","nodeEl","isSelectionInsideRichTextEditor","anchor","selectedNode","collapsed","start","startOffset","end","selectedEl","Node","TEXT_NODE","parent","closest","matches","insertNode","commonAncestorContainer","endContainer","anchorNode","links","from","removeLinkFromNode","_last","openDialog","last","createTreeWalker","NodeFilter","SHOW_TEXT","lastChild","selectNodeContents","toggleButtonsState","node","saveRichTextLink","_ref4","linkUrl","linkText","currentActiveLinkNode","innerText","cancelRichTextLink","append","removeLink","handleKeyUp","handleKeyDown","handlePasteDrop","setTimeout","pasted","handleClick","target","trim","_zipObject","queryCommandState","toolButton","React","onClick","type","richTextElement","ref","onFocus","i","innerRef","html","onKeyUp","onKeyDown","onPaste","onDrop","icon","EditLinkPopup","cancel","saveLink","Field","labelClick","_ref5","formRef","linkTextRef","linkUrlRef","LABELS","useContext","StartlibsContext","labels","preValidation","formValues","errors","linkTextError","linkRegex","test","_objectSpread","linkUrlError","checkEscOrEnter","keyCode","stopPropagation","submitForm","currentLinkPopup","offsetLeft","getClientRects","left","offsetWidth","top","offsetHeight","offsetTop","WithForm","skipDom","action","form","contentEditable","TextInput","popupLinkText","popupLinkUrl","popupRemove","popupCancel","highlight","willSubmitForm","popupConfirm","Errors"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAcA;AACA,MAAMA,eAAe,GAAGC,qBAAqB,CAACC,OAAO,IAAID,qBAAqB,CAAA;AAE9E,MAAME,SAAS,gBAAGC,MAAM,CAACC,IAAI,CAAC,CAAAC,UAAA,CAAA;EAAAC,WAAA,EAAA,qBAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAAA,CAAA,CAAA,CAAA,uHAAA,EAAA,GAAA,CAAA,EASnBC,QAAQ,CAAC,SAAS,CAAC,CAC7B,CAAA;AAED,MAAMC,YAAY,GAAG;AACnB,EAAA,MAAM,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC;AACvB,EAAA,QAAQ,EAAE,GAAG;AACb,EAAA,WAAW,EAAE,GAAG;AAChB,EAAA,eAAe,EAAE,QAAQ;AACzB,EAAA,MAAM,EAAE,GAAG;AACX,EAAA,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACnC,EAAA,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC,EAAA,SAAS,EAAE,EAAE;AACb,EAAA,QAAQ,EAAE,YAAY;AACtB,EAAA,YAAY,EAAE,MAAM;AACpB,EAAA,cAAc,EAAE,MAAA;AAClB,CAAC,CAAA;AAED,MAAMC,qBAAqB,GAAG;AAC5B,EAAA,GAAG,EAAE,YAAY;AACjB,EAAA,QAAQ,EAAE,YAAY;AACtB,EAAA,GAAG,EAAE,gBAAgB;AACrB,EAAA,QAAQ,EAAE,gBAAgB;AAC1B,EAAA,MAAM,EAAE,UAAU;AAClB,EAAA,GAAG,EAAE,WAAA;AACP,CAAC,CAAA;AAED,IAAIC,uBAAuB,GAAGA,MAAM;AAClC,EAAA,MAAMC,CAAC,GAAGC,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC,CAAA;AACxCF,EAAAA,CAAC,CAACG,KAAK,CAACC,QAAQ,GAAG,QAAQ,CAAA;AAC3BH,EAAAA,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,CAAC,CAAC,CAAA;EAC5B,MAAMI,QAAQ,GAAGG,QAAQ,CAACC,gBAAgB,CAACR,CAAC,CAAC,CAACI,QAAQ,CAAC,CAAA;AACvDH,EAAAA,QAAQ,CAACI,IAAI,CAACI,WAAW,CAACT,CAAC,CAAC,CAAA;AAC5B,EAAA,MAAMU,MAAM,GAAG,CAACN,QAAQ,GAAG,CAAC,GAAG,CAAC,EAAEA,QAAQ,GAAG,CAAC,CAAC,CAAA;EAC/CL,uBAAuB,GAAGA,MAAMW,MAAM,CAAA;AACtC,EAAA,OAAOA,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAMC,QAAQ,GAAGA,CAACC,EAAE,EAACC,OAAO,KAAK;EAC/BD,EAAE,CAACE,UAAU,CAACC,YAAY,CAACF,OAAO,EAAED,EAAE,CAAC,CAAA;AACvCC,EAAAA,OAAO,CAACP,WAAW,CAACM,EAAE,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAMI,SAAS,GAAG;AAChB,EAAA,YAAY,EAAEC,CAACC,CAAC,EAAEN,EAAE,KAAK;AACvB,IAAA,MAAMO,aAAa,GAAGZ,QAAQ,CAACa,MAAM,CAACZ,gBAAgB,CAACI,EAAE,CAAC,CAACK,UAAU,CAAC,CAAA;AACtE,IAAA,OAAOE,aAAa,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;GACxC;AACD,EAAA,UAAU,EAAEf,CAACc,CAAC,EAAEN,EAAE,KAAK;IACrB,MAAM,CAACS,GAAG,EAAEC,GAAG,CAAC,GAAGvB,uBAAuB,EAAE,CAAA;AAC5C,IAAA,MAAMwB,WAAW,GAAGhB,QAAQ,CAACa,MAAM,CAACZ,gBAAgB,CAACI,EAAE,CAAC,CAACR,QAAQ,CAAC,CAAA;AAClE,IAAA,OAAOoB,IAAI,CAACH,GAAG,CAACC,GAAG,EAAEE,IAAI,CAACF,GAAG,CAACD,GAAG,EAAEE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAA;GACxD;AACD,EAAA,gBAAgB,EAAEE,CAACP,CAAC,EAACN,EAAE,KAAK;IAC1B,MAAMc,MAAM,GAAGR,CAAC,CAACS,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAACV,CAAC,IAAIA,CAAC,KAAK,WAAW,IAAIA,CAAC,KAAK,cAAc,CAAC,CAAA;IAClF,IAAIQ,MAAM,CAACG,OAAO,CAAC,WAAW,CAAC,IAAE,CAAC,EAAE;MAClClB,QAAQ,CAACC,EAAE,EAACX,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;AAC1C,KAAA;IACA,IAAIwB,MAAM,CAACG,OAAO,CAAC,cAAc,CAAC,IAAE,CAAC,EAAE;MACrClB,QAAQ,CAACC,EAAE,EAACX,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC/C,KAAA;AACA,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;AACF,CAAC,CAAA;MAEY4B,iBAAiB,gBAAGvC,MAAM,CAACwC,GAAG,CAAAtC,UAAA,CAAA;EAAAC,WAAA,EAAA,6BAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAAA,CAAA,CAAA,CAAA,gDAAA,EAAA,sCAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,6GAAA,CAAA,EAGrBC,QAAQ,CAAC,SAAS,CAAC,EAGrCoC,KAAK,IAAIA,KAAK,CAACC,SAAS,qBAAAC,MAAA,CAAqBtC,QAAQ,CAACoC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAE,EACvEA,KAAK,IAAIA,KAAK,CAACG,WAAW,IAAA,QAAA,CAAAD,MAAA,CACxBE,cAAc,EAMjB,yHAAA,CAAA,EACCJ,KAAK,IAAIA,KAAK,CAACK,KAAK,IAAAH,sBAAAA,CAAAA,MAAA,CACJtC,QAAQ,CAAC,SAAS,CAAC,4DAEpC,EACCoC,KAAK,IAAIA,KAAK,CAACM,MAAM,IAAIC,GAAG,CAAA,CAAA,qDAAA,CAAA,CAG7B,EACCP,KAAK,IAAIA,KAAK,CAACQ,SAAS,IAAID,GAAG,CAEpBP,CAAAA,qCAAAA,EAAAA,kBAAAA,EAAAA,IAAAA,CAAAA,EAAAA,KAAK,CAACQ,SAAS,EAGfC,MAAM,CAAC,IAAI,EAAET,KAAK,CAACQ,SAAS,CAAC,CAEzC,EASF;MAEYE,aAAa,gBAAGnD,MAAM,CAACwC,GAAG,CAAAtC,UAAA,CAAA;EAAAC,WAAA,EAAA,yBAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAAA,CAAA,CAAA,CAAA,uBAAA,EAAA,6FAAA,EAAA,sKAAA,EAAA,EAAA,CAAA,EAE5BC,QAAQ,CAAC,QAAQ,CAAC,EAOXoC,KAAK,IAAEA,KAAK,CAACW,SAAS,IAAI,EAAE,EAa1CX,KAAK,IAAIA,KAAK,CAACY,QAAQ,yHAKxB,EACF;AAED,MAAMR,cAAc,gBAAG7C,MAAM,CAACwC,GAAG,CAAAtC,UAAA,CAAA;EAAAC,WAAA,EAAA,0BAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAAA,CAAA,CAAA,CAAA,aAAA,EAAA,gLAAA,CAAA,EACjBC,QAAQ,CAAC,iBAAiB,CAAC,CAU1C,CAAA;AAED,MAAMiD,UAAU,gBAAGtD,MAAM,CAACuD,MAAM,CAAC,CAAArD,UAAA,CAAA;EAAAC,WAAA,EAAA,sBAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAAA,CAAA,CAAA,CAAA,uJAAA,EAAA,yOAAA,CAAA,EAWlBC,QAAQ,CAAC,QAAQ,CAAC,CAgBhC,CAAA;AAED,MAAMmD,aAAa,gBAAGxD,MAAM,CAACyD,IAAI,CAAAvD,UAAA,CAAA;EAAAC,WAAA,EAAA,yBAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAKhC,CAAA,CAAA,CAAA,8FAAA,CAAA,CAAA,CAAA;AAED,MAAMsD,QAAQ,GAAG,YAAY,CAAA;AAE7B,MAAMC,uBAAuB,GAAGA,CAACC,IAAI,EAAEC,MAAM,EAAEC,SAAS,KAAK;EAC3D,MAAMC,KAAK,GAAG,4EAA4E,CAAA;EAC1F,IAAIC,MAAM,GAAGH,MAAM,CAAA;AACnB,EAAA,OAAO,CAACD,IAAI,CAACI,MAAM,GAAGF,SAAS,CAAC,IAAI,EAAE,EAAEG,KAAK,CAACF,KAAK,CAAC,EAAE;AACpDC,IAAAA,MAAM,IAAIF,SAAS,CAAA;AACrB,GAAA;AACA,EAAA,OAAOE,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAME,OAAO,GAAIzD,CAAC,IAAK;EACrBA,CAAC,GAAGA,CAAC,CAAC0D,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACxB,EAAA,IAAI1D,CAAC,CAAC6B,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI7B,CAAC,CAAC6B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AAC7D,IAAA,OAAO7B,CAAC,CAAA;AACV,GAAC,MAAM;IACL,OAAO,SAAS,GAAGA,CAAC,CAAA;AACtB,GAAA;AACF,CAAC,CAAA;AAUD,MAAM2D,iBAAiB,GAAG,UAACC,KAAK,EAAEC,cAAc,EAAuB;AAAA,EAAA,IAArBC,YAAY,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC,CAAA;EAChE,IAAI,CAACH,KAAK,EAAE,OAAA;AACZ,EAAA,IAAIM,KAAK,GAAGjE,QAAQ,CAACkE,WAAW,EAAE,CAAA;AAClC,EAAA,IAAIC,GAAG,GAAGhD,MAAM,CAACiD,YAAY,EAAE,CAAA;AAC/BH,EAAAA,KAAK,CAACI,QAAQ,CAACV,KAAK,EAAEC,cAAc,CAAC,CAAA;AACrC,EAAA,IAAIC,YAAY,EAAE;AAChBI,IAAAA,KAAK,CAACK,MAAM,CAACX,KAAK,EAAEE,YAAY,CAAC,CAAA;AACnC,GAAC,MAAM;AACLI,IAAAA,KAAK,CAACM,QAAQ,CAAC,IAAI,CAAC,CAAA;AACtB,GAAA;EACAJ,GAAG,CAACK,eAAe,EAAE,CAAA;AACrBL,EAAAA,GAAG,CAACM,QAAQ,CAACR,KAAK,CAAC,CAAA;AACrB,CAAC,CAAA;AAED,MAAMS,WAAW,GAAGA,CAACC,MAAM,EAAEC,YAAY,KAAK;EAC5CC,KAAK,CAACC,SAAS,CAACC,KAAK,CAACC,IAAI,CAACL,MAAM,CAACM,gBAAgB,CAAC,4BAA4B,CAAC,CAAC,CAACC,OAAO,CAACvE,EAAE,IAAIA,EAAE,CAACwE,MAAM,EAAE,CAAC,CAAA;EAC5GN,KAAK,CAACC,SAAS,CAACC,KAAK,CAACC,IAAI,CAACL,MAAM,CAACM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAACC,OAAO,CAACvE,EAAE,IAAIA,EAAE,CAACwE,MAAM,EAAE,CAAC,CAAA;AAExF,EAAA,MAAMC,cAAc,GAAGR,YAAY,CAACS,GAAG,CAACC,CAAC,IAAIzF,qBAAqB,CAACyF,CAAC,CAAC,CAAC,CAAC3D,MAAM,CAAA4D,SAAW,CAAC,CAAA;AAEzF,EAAA,MAAMC,QAAQ,GAAGxF,QAAQ,CAACyF,cAAc,CAAC,QAAQ,CAAC,CAAA;AAClD,EAAA,IAAItE,MAAM,CAACiD,YAAY,EAAE,CAACsB,UAAU,EAAE;AACtC,IAAA,MAAMC,SAAS,GAAGxE,MAAM,CAACiD,YAAY,EAAE,CAACwB,UAAU,CAAC,CAAC,CAAC,CAACC,cAAc,CAAA;AACpE,IAAA,IAAIF,SAAS,CAACG,QAAQ,KAAK,CAAC,EAAE;MAC5BH,SAAS,CAAC9E,UAAU,CAACC,YAAY,CAAC0E,QAAQ,EAAEG,SAAS,CAACI,WAAW,CAAC,CAAA;AACpE,KAAC,MAAM;AACLJ,MAAAA,SAAS,CAACtF,WAAW,CAACmF,QAAQ,CAAC,CAAA;AACjC,KAAA;IACE,IAAIA,QAAQ,CAACQ,eAAe,IAAIR,QAAQ,CAACQ,eAAe,CAACC,WAAW,KAAK,QAAQ,EAAE;AACjFT,MAAAA,QAAQ,CAACQ,eAAe,CAACb,MAAM,EAAE,CAAA;AACrC,KAAA;AACAzB,IAAAA,iBAAiB,CAAC8B,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC9B,GAAA;EAEA,MAAMU,KAAK,GAAIC,QAAQ,IAAK;AAC1BtB,IAAAA,KAAK,CAACC,SAAS,CAACC,KAAK,CAACC,IAAI,CAACmB,QAAQ,CAAC,CAACjB,OAAO,CAACvE,EAAE,IAAI;MACjD,IAAI;AACJ,QAAA,IAAIA,EAAE,CAACmF,QAAQ,KAAK,CAAC,EACnB,OAAA;AACF,QAAA,IAAI,CAACnF,EAAE,CAACyF,OAAO,EAAE;UACfzF,EAAE,CAACwE,MAAM,EAAE,CAAA;AACX,UAAA,OAAA;AACF,SAAA;QACA,IAAIiB,OAAO,GAAGzF,EAAE,CAACyF,OAAO,CAACC,WAAW,EAAE,CAAA;AACtC,QAAA,MAAMnG,KAAK,GAAGK,gBAAgB,CAACI,EAAE,CAAC,CAAA;AAClC,QAAA,MAAM2F,IAAI,GAAG3F,EAAE,CAAC4F,qBAAqB,EAAE,CAAA;AACvC,QAAA,MAAMC,QAAQ,GAAGtG,KAAK,CAACuG,OAAO,KAAK,MAAM,IAAIH,IAAI,CAACI,KAAK,KAAK,CAAC,IAAIJ,IAAI,CAACK,MAAM,KAAK,CAAC,CAAA;AAClF,QAAA,IAAIH,QAAQ,IAAK7F,EAAE,CAACwF,QAAQ,IAAI,CAACxF,EAAE,CAACwF,QAAQ,CAACpC,MAAO,IAAIqC,OAAO,KAAK,IAAI,EAAE;UACxEzF,EAAE,CAACwE,MAAM,EAAE,CAAA;SACZ,MAAM,IAAIP,YAAY,CAAChD,OAAO,CAACwE,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7CF,UAAAA,KAAK,CAACvF,EAAE,CAACiG,UAAU,CAAC,CAAA;AACpBjG,UAAAA,EAAE,CAACkG,eAAe,CAAC,OAAO,CAAC,CAAA;UACzB,IAAIT,OAAO,KAAK,GAAG,EAAE;AACnBzF,YAAAA,EAAE,CAACmG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACrC,WAAA;AACA,UAAA,IAAInG,EAAE,CAACoG,YAAY,CAAC,OAAO,CAAC,EAAE;AAC5B,YAAA,MAAMC,UAAU,GAAGC,QAAA,CAAUC,KAAA,CAAO9B,cAAc,EAAEzE,EAAE,CAACT,KAAK,CAAC,CAAC,CAACyB,MAAM,CAACwF,IAAA,IAAA;AAAA,cAAA,IAAC,CAACC,CAAC,EAAEnG,CAAC,CAAC,GAAAkG,IAAA,CAAA;cAAA,OAAKlG,CAAC,KAAK,EAAE,CAAA;aAAC,CAAA,CAAA;YAC3F,MAAMoG,UAAU,GAAGC,UAAA,CAAYN,UAAU,CAAC3B,GAAG,CAACkC,KAAA,IAAA;AAAA,cAAA,IAAC,CAACH,CAAC,EAAEnG,CAAC,CAAC,GAAAsG,KAAA,CAAA;AAAA,cAAA,OAAK,CAACH,CAAC,EAAE,CAACrG,SAAS,CAACqG,CAAC,CAAC,IAAA7B,SAAc,EAAEtE,CAAC,EAAEN,EAAE,CAAC,CAAC,CAAA;AAAA,aAAA,CAAC,CAAC,CAAA;AACxGA,YAAAA,EAAE,CAACkG,eAAe,CAAC,OAAO,CAAC,CAAA;YACvBW,MAAM,CAACC,MAAM,CAAC9G,EAAE,CAACT,KAAK,EAAEmH,UAAU,CAAC,CAAA;AACrC,WAAA;AACJ,SAAC,MAAM,IAAIjB,OAAO,KAAK,GAAG,EAAE;AAC1BF,UAAAA,KAAK,CAACvF,EAAE,CAACiG,UAAU,CAAC,CAAA;UACpB,IAAIjG,EAAE,CAACsF,WAAW,KAAKtF,EAAE,CAAC+G,IAAI,IAAI/G,EAAE,CAACsF,WAAW,CAAClC,MAAM,GAAG,CAAC,EACzDpD,EAAE,CAACgH,SAAS,GAAGhH,EAAE,CAACiH,SAAS,CAAA;AAC/B,SAAC,MAAM;AACL1B,UAAAA,KAAK,CAACvF,EAAE,CAACiG,UAAU,CAAC,CAAA;AACpB,UAAA,IAAIjG,EAAE,CAACkH,aAAa,EAAE,EAAE;YACtB,MAAMC,UAAU,GAAG5H,KAAK,CAACuG,OAAO,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAA;AAC9D,YAAA,MAAMsB,KAAK,GAAG/H,QAAQ,CAACC,aAAa,CAAC6H,UAAU,CAAC,CAAA;YAChDjD,KAAK,CAACC,SAAS,CAACC,KAAK,CAACC,IAAI,CAACrE,EAAE,CAACiG,UAAU,CAAC,CAAC1B,OAAO,CAAC8C,KAAK,IAAID,KAAK,CAAC1H,WAAW,CAAC2H,KAAK,CAAC,CAAC,CAAA;YACpFrH,EAAE,CAACE,UAAU,CAACoH,YAAY,CAACF,KAAK,EAAEpH,EAAE,CAAC,CAAA;AACvC,WAAC,MAAM;YACLA,EAAE,CAACwE,MAAM,EAAE,CAAA;AACb,WAAA;AACA,SAAA;OACD,CAAC,OAAO+C,CAAC,EAAE;QACV,IAAIvH,EAAE,IAAIA,EAAE,CAACwE,MAAM,EACjBxE,EAAE,CAACwE,MAAM,EAAE,CAAA;AACf,OAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AACDe,EAAAA,KAAK,CAACvB,MAAM,CAACiC,UAAU,CAAC,CAAA;AAC1B,CAAC,CAAA;AAsCYuB,MAAAA,QAAQ,GAAGC,KAAA,IAA2S;EAAA,IAA1S;IAACC,IAAI;IAAEC,QAAQ;IAAEC,KAAK;IAAEC,eAAe;IAAEC,SAAS;IAAE9F,QAAQ;IAAED,SAAS;IAAEgG,WAAW;IAAEC,SAAS;AAAEC,IAAAA,WAAW,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC;AAAEC,IAAAA,YAAY,GAAAtD,SAAa;IAAEuD,SAAS;IAAEC,QAAQ;IAAEC,QAAQ;IAAEzG,SAAS;AAAE0G,IAAAA,QAAQ,GAAG,CAAC;IAAEC,KAAK;IAAEC,QAAQ;IAACC,GAAG;AAAE/G,IAAAA,MAAAA;AAAM,GAAC,GAAA+F,KAAA,CAAA;AAE5T,EAAA,MAAMiB,SAAS,GAAGC,cAAc,EAAE,CAAA;AAElC,EAAA,MAAM3F,KAAK,GAAG4F,YAAY,CAACjB,QAAQ,CAAC,CAAA;AACpC,EAAA,MAAMkB,cAAc,GAAGC,MAAM,EAAE,CAAA;AAC/B,EAAA,MAAM9D,SAAS,GAAG8D,MAAM,EAAE,CAAA;AAC1B,EAAwBC,WAAW,GAAE;;AAErC;AACA,EAA4BA,WAAW,GAAE;AACzC,EAA0BA,WAAW,GAAE;AACvC,EAAiBA,WAAW,CAAC,EAAE,EAAC;AAChC,EAAA,MAAMC,gBAAgB,GAAGC,SAAS,EAAE,CAAA;AAEpC,EAAA,MAAMC,cAAc,GAAGH,WAAW,EAAE,CAAA;AACpC,EAAA,MAAMI,gBAAgB,GAAGJ,WAAW,EAAE,CAAA;;AAEtC;AACA,EAAA,MAAM,CAACK,SAAS,EAAEC,aAAa,EAAE;AAAChI,IAAAA,SAAAA;GAAU,CAAC,GAAGiI,QAAQ,CAAC;IAAC5B,IAAI;IAACa,KAAK;AAACC,IAAAA,QAAAA;GAAS,EAACC,GAAG,CAAC,CAAA;;AAEnF;AACA,EAAA,MAAMc,SAAS,GAAGT,MAAM,CAACM,SAAS,CAAC,CAAA;EACnC,MAAMI,YAAY,GAAIlJ,CAAC,IAAK;IAC1BiJ,SAAS,CAACE,OAAO,GAAGnJ,CAAC,CAAA;IACrB+I,aAAa,CAAC/I,CAAC,CAAC,CAAA;GACjB,CAAA;AAEDoJ,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAInB,KAAK,KAAKa,SAAS,IAAMA,SAAS,KAAKG,SAAU,EAAC;MACpDA,SAAS,CAACE,OAAO,GAAGL,SAAS,CAAA;AAC/B,KAAA;AACF,GAAC,EAAC,CAAC1B,IAAI,CAAC,CAAC,CAAA;EAET,MAAM,CAACiC,cAAc,EAAEC,iBAAiB,CAAC,GAAGC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAExD,EAAA,MAAMC,aAAa,GAAGC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAACzI,MAAM,CAAC0I,QAAA,CAAU/B,WAAW,CAACvD,GAAG,CAACuF,IAAI,IAAIhL,YAAY,CAACgL,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAE5IP,EAAAA,SAAS,CAAC,MAAM;AACd3F,IAAAA,WAAW,CAACf,KAAK,CAACyG,OAAO,EAAEK,aAAa,CAAC,CAAA;GAC1C,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,MAAMrI,KAAK,GAAGA,MAAMuB,KAAK,CAACyG,OAAO,IAAIzG,KAAK,CAACyG,OAAO,CAAChI,KAAK,EAAE,CAAA;;AAE1D;AACA;AACAiI,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAI5B,SAAS,EAAE;MACboC,qBAAqB,CAACzI,KAAK,CAAC,CAAA;AAC9B,KAAA;GACD,EAAE,EAAE,CAAC,CAAA;AAENiI,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIR,cAAc,CAACiB,GAAG,EAAE,EAAE;AACxBnH,MAAAA,KAAK,CAACyG,OAAO,CAACW,SAAS,EAAE,CAAA;AACzBlB,MAAAA,cAAc,CAACmB,GAAG,CAAC,KAAK,CAAC,CAAA;AAC3B,KAAA;AACF,GAAC,CAAC,CAAA;EAEF,MAAMC,qBAAqB,GAAIC,CAAC,IAAK;IACnCL,qBAAqB,CAAEM,IAAI,IAAK;AAC5B,MAAA,IAAIA,IAAI,GAAGD,CAAC,GAAG,GAAG,EAAE,OAAA;MACpB/J,MAAM,CAACiK,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;MACzCJ,qBAAqB,CAACC,CAAC,CAAC,CAAA;AAC1B,KACF,CAAC,CAAA;GACF,CAAA;EAED,MAAMI,cAAc,GAAGA,MAAM;AAC3B3B,IAAAA,gBAAgB,CAAC4B,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC5BN,IAAAA,qBAAqB,CAACO,IAAI,CAACC,GAAG,EAAE,CAAC,CAAA;GAClC,CAAA;EAED,MAAMC,aAAa,GAAIxD,CAAC,IAAK;AAC3B,IAAA,IAAIyB,gBAAgB,CAACgC,MAAM,KAAK,CAAC,EAAE;MACjChC,gBAAgB,CAACiC,KAAK,EAAE,CAAA;AACxBX,MAAAA,qBAAqB,CAACO,IAAI,CAACC,GAAG,EAAE,CAAC,CAAA;AACnC,KAAA;GACD,CAAA;EAGD,MAAMI,MAAM,GAAI3D,CAAC,IAAK;AACpB,IAAA,MAAM4D,QAAQ,GAAGnI,KAAK,CAACyG,OAAO,CAACnE,WAAW,CAAClC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAGJ,KAAK,CAACyG,OAAO,CAACxC,SAAS,CAAA;AACtF;AACA;AACA;AACA,IAAA,IAAIkE,QAAQ,MAAM/B,SAAS,IAAI,EAAE,CAAC,EAAE;MAClCI,YAAY,CAAC2B,QAAQ,CAAC,CAAA;AACxB,KAAA;GACD,CAAA;EAED,MAAMC,cAAc,GAAI7D,CAAC,IAAK;AAC5B,IAAA,IAAIyB,gBAAgB,CAACgC,MAAM,KAAK,CAAC,EAAC;MAChC,IAAI/C,WAAW,CAAChH,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACnC,QAAA,OAAA;AACF,OAAA;AACA,MAAA,IAAIsG,CAAC,CAAC8D,GAAG,KAAK,GAAG,IAAI9D,CAAC,CAAC+D,OAAO,IAAM/D,CAAC,CAAC8D,GAAG,KAAK,GAAG,IAAI9D,CAAC,CAACgE,OAAQ,EAAC;QAC9DhE,CAAC,CAACiE,cAAc,EAAE,CAAA;AAClBC,QAAAA,WAAW,CAAC,IAAI,EAAC,MAAM,CAAC,CAAA;AAC1B,OAAA;AACF,KAAA;GACD,CAAA;AAED/B,EAAAA,SAAS,CAAC,MAAM;AACdrK,IAAAA,QAAQ,CAACqM,gBAAgB,CAAC,SAAS,EAACN,cAAc,CAAC,CAAA;IACnD,OAAO,MAAM/L,QAAQ,CAACsM,mBAAmB,CAAC,SAAS,EAACP,cAAc,CAAC,CAAA;AACrE,GAAC,EAAE,CAACpC,gBAAgB,CAACgC,MAAM,CAAC,CAAC,CAAA;AAE7B,EAAA,MAAMS,WAAW,GAAGA,CAAClE,CAAC,EAAEqE,OAAO,KAAK;IAClC,IAAIA,OAAO,KAAK,MAAM,EAAE;AACtB,MAAA,IAAIC,MAAM,CAAA;AACV,MAAA,IAAI,CAACC,+BAA+B,EAAE,EAAE;AACtC,QAAA,IAAIC,MAAM,GAAG1M,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC,CAAA;QACxCyM,MAAM,CAAC9E,SAAS,GAAG,SAAS,CAAA;AAC5BjE,QAAAA,KAAK,CAACyG,OAAO,CAAC/J,WAAW,CAACqM,MAAM,CAAC,CAAA;AACjCF,QAAAA,MAAM,GAAGE,MAAM,CAAA;AACjB,OAAC,MAAM;QACL,MAAMzI,KAAK,GAAG9C,MAAM,CAACiD,YAAY,EAAE,CAACwB,UAAU,CAAC,CAAC,CAAC,CAAA;AACjD,QAAA,MAAM+G,YAAY,GAAG1I,KAAK,CAAC4B,cAAc,CAAA;QACzC,IAAI5B,KAAK,CAAC2I,SAAS,EAAE;AACnB,UAAA,MAAMC,KAAK,GAAG5J,uBAAuB,CAAC0J,YAAY,CAAC1G,WAAW,EAAEhC,KAAK,CAAC6I,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;AACtF,UAAA,MAAMC,GAAG,GAAG9J,uBAAuB,CAAC0J,YAAY,CAAC1G,WAAW,EAAEhC,KAAK,CAAC6I,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AACvF,UAAA,IAAID,KAAK,GAAG5I,KAAK,CAAC6I,WAAW,IAAIC,GAAG,GAAG9I,KAAK,CAAC6I,WAAW,GAAG,CAAC,EAAE;AAC5D7I,YAAAA,KAAK,CAACI,QAAQ,CAACsI,YAAY,EAAEE,KAAK,CAAC,CAAA;YACnC5I,KAAK,CAACK,MAAM,CAACqI,YAAY,EAAEI,GAAG,GAAG,CAAC,CAAC,CAAA;AACrC,WAAA;AACF,SAAA;AACA,QAAA,MAAMC,UAAU,GAAGL,YAAY,CAAC7G,QAAQ,KAAKmH,IAAI,CAACC,SAAS,GAAGP,YAAY,CAAC9L,UAAU,GAAG8L,YAAY,CAAA;QACpG,MAAMQ,MAAM,GAAGH,UAAU,CAACI,OAAO,CAAC,KAAK,GAACpK,QAAQ,CAAC,CAAA;QACjD,IAAImK,MAAM,IAAIA,MAAM,CAACE,OAAO,CAAC,GAAG,CAAC,EAAE;AACjCb,UAAAA,MAAM,GAAGW,MAAM,CAAA;AACjB,SAAC,MAAM;AACL,UAAA,IAAIT,MAAM,GAAG1M,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC,CAAA;UACxCyM,MAAM,CAAC9E,SAAS,GAAG,SAAS,CAAA;UAC5B,IAAI3D,KAAK,CAAC2I,SAAS,EAAE;AACnB3I,YAAAA,KAAK,CAACqJ,UAAU,CAACZ,MAAM,CAAC,CAAA;AAC1B,WAAC,MAAM;AACL,YAAA,IAAIzI,KAAK,CAACsJ,uBAAuB,KAAK5J,KAAK,CAACyG,OAAO,EAAE;cACnDnG,KAAK,CAACI,QAAQ,CAACJ,KAAK,CAACuJ,YAAY,EAAC,CAAC,CAAC,CAAA;AACtC,aAAA;YACAxN,QAAQ,CAACoM,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;AAC9CM,YAAAA,MAAM,GAAGvL,MAAM,CAACiD,YAAY,EAAE,CAACqJ,UAAU,CAAA;AAC3C,WAAA;AACA,UAAA,MAAMN,MAAM,GAAGlJ,KAAK,CAACsJ,uBAAuB,CAACzH,QAAQ,KAAK,CAAC,GAAG7B,KAAK,CAACsJ,uBAAuB,CAAC1M,UAAU,GAAGoD,KAAK,CAACsJ,uBAAuB,CAAA;AACtI,UAAA,MAAMG,KAAK,GAAGP,MAAM,CAAClI,gBAAgB,CAAC,aAAa,CAAC,CAAA;AACpDJ,UAAAA,KAAK,CAAC8I,IAAI,CAACD,KAAK,CAAC,CAAC3I,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAACG,OAAO,CAAC0I,kBAAkB,CAAC,CAAA;AACzDpB,UAAAA,MAAM,GAAGqB,KAAA,CAAOH,KAAK,CAAC,CAAA;AACtBlB,UAAAA,MAAM,CAAC1F,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAClC,SAAA;AACF,OAAA;AACAoD,MAAAA,SAAS,CAACE,OAAO,GAAGzG,KAAK,CAACyG,OAAO,CAACxC,SAAS,CAAA;MAC3CkG,UAAU,CAACtB,MAAM,CAAC,CAAA;AACpB,KAAC,MAAM;AACL,MAAA,IAAI,CAACC,+BAA+B,EAAE,EAAE;AACtC9I,QAAAA,KAAK,CAACyG,OAAO,CAAChI,KAAK,EAAE,CAAA;AACrB,QAAA,MAAM2L,IAAI,GAAG/N,QAAQ,CAACgO,gBAAgB,CAACrK,KAAK,CAACyG,OAAO,EAAE6D,UAAU,CAACC,SAAS,CAAC,CAACC,SAAS,EAAE,CAAA;AACvF,QAAA,MAAMlK,KAAK,GAAGjE,QAAQ,CAACkE,WAAW,EAAE,CAAA;QACpCD,KAAK,CAACmK,kBAAkB,CAACL,IAAI,IAAIpK,KAAK,CAACyG,OAAO,CAAC,CAAA;AAC/CnG,QAAAA,KAAK,CAACM,QAAQ,CAAC,KAAK,CAAC,CAAA;AACrB,QAAA,MAAMJ,GAAG,GAAGhD,MAAM,CAACiD,YAAY,EAAE,CAAA;QACjCD,GAAG,CAACK,eAAe,EAAE,CAAA;AACrBL,QAAAA,GAAG,CAACM,QAAQ,CAACR,KAAK,CAAC,CAAA;AACrB,OAAA;AACAjE,MAAAA,QAAQ,CAACoM,WAAW,CAACG,OAAO,CAAC,CAAA;AAC7BpC,MAAAA,YAAY,CAACxG,KAAK,CAACyG,OAAO,CAACxC,SAAS,CAAC,CAAA;AACrCyG,MAAAA,kBAAkB,EAAE,CAAA;AACpBjM,MAAAA,KAAK,EAAE,CAAA;AACT,KAAA;GACD,CAAA;EAED,MAAMqK,+BAA+B,GAAGA,MAAM;IAC5C,MAAMxI,KAAK,GAAG9C,MAAM,CAACiD,YAAY,EAAE,CAACwB,UAAU,CAAC,CAAC,CAAC,CAAA;AACjD,IAAA,IAAI,CAAC3B,KAAK,EAAE,OAAO,KAAK,CAAA;AACxB,IAAA,MAAMtD,EAAE,GAAGsD,KAAK,CAAC4B,cAAc,CAAA;AAC/B,IAAA,IAAI,CAAClF,EAAE,EAAE,OAAO,KAAK,CAAA;AACrB,IAAA,MAAM2N,IAAI,GAAG3N,EAAE,CAACyM,OAAO,GAAGzM,EAAE,GAAIA,EAAE,CAACE,UAAU,IAAIb,QAAQ,CAACI,IAAK,CAAA;IAC/D,OAAOkO,IAAI,CAAClB,OAAO,CAAC,GAAG,GAACpK,QAAQ,CAAC,KAAKW,KAAK,CAACyG,OAAO,CAAA;GACpD,CAAA;EAGD,MAAMmE,gBAAgB,GAAGC,KAAA,IAAyB;IAAA,IAAxB;MAACC,OAAO;AAAEC,MAAAA,QAAAA;AAAQ,KAAC,GAAAF,KAAA,CAAA;AAC3C,IAAA,MAAMG,qBAAqB,GAAGnF,cAAc,CAACY,OAAO,CAAA;IACpDuE,qBAAqB,CAAC7H,YAAY,CAAC,MAAM,EAAEtD,OAAO,CAACiL,OAAO,CAAC,CAAC,CAAA;AAC5DE,IAAAA,qBAAqB,CAAC7H,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACtD,IAAA,IAAI6H,qBAAqB,CAAC1I,WAAW,KAAKyI,QAAQ,EAAE;MAClDC,qBAAqB,CAACC,SAAS,GAAGF,QAAQ,CAAA;AAC5C,KAAA;IACArF,SAAS,CAACuC,KAAK,EAAE,CAAA;AACjBlI,IAAAA,iBAAiB,CAACiL,qBAAqB,CAACR,SAAS,EAAEQ,qBAAqB,CAAC1I,WAAW,CAAClC,MAAM,EAAE,CAAC,CAAC,CAAA;AAC/F3B,IAAAA,KAAK,EAAE,CAAA;AACP+H,IAAAA,YAAY,CAACxG,KAAK,CAACyG,OAAO,CAACxC,SAAS,CAAC,CAAA;GACtC,CAAA;EAED,MAAMiH,kBAAkB,GAAI3G,CAAC,IAAK;AAChC,IAAA,IAAI4B,gBAAgB,CAACgB,GAAG,EAAE,EAAE,OAAA;AAC5B,IAAA,MAAM6D,qBAAqB,GAAGnF,cAAc,CAACY,OAAO,CAAA;AACpD,IAAA,MAAMrH,IAAI,GAAG/C,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI0O,qBAAqB,CAAC5I,WAAW,EAClC4I,qBAAqB,CAAC9N,UAAU,CAAEC,YAAY,CAACiC,IAAI,EAAE4L,qBAAqB,CAAC5I,WAAW,CAAC,CAAA,KAEvF4I,qBAAqB,CAAC9N,UAAU,CAAEiO,MAAM,CAAC/L,IAAI,CAAC,CAAA;AACjDW,IAAAA,iBAAiB,CAACX,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAC7BX,IAAAA,KAAK,EAAE,CAAA;IACP,IAAIuM,qBAAqB,CAAC5H,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;MACtDgI,UAAU,CAAC7G,CAAC,CAAC,CAAA;AACf,KAAA;AACA4B,IAAAA,gBAAgB,CAACkB,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1BjI,IAAI,CAACoC,MAAM,EAAE,CAAA;IACb,IAAIxB,KAAK,CAACyG,OAAO,EAAE;AACjBzG,MAAAA,KAAK,CAACyG,OAAO,CAACW,SAAS,EAAE,CAAA;AAC3B,KAAC,MAAM;AACLlB,MAAAA,cAAc,CAACmB,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B,KAAA;IACA3B,SAAS,CAACuC,KAAK,EAAE,CAAA;GAClB,CAAA;EAED,MAAMoD,WAAW,GAAI9G,CAAC,IAAK;AACzBmG,IAAAA,kBAAkB,EAAE,CAAA;IACpBlE,YAAY,CAACtB,YAAY,CAAClF,KAAK,CAACyG,OAAO,CAACxC,SAAS,CAAC,CAAC,CAAA;GACpD,CAAA;EAED,MAAMqH,aAAa,GAAI/G,CAAC,IAAK;AAC3B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;GACG,CAAA;AAwCD,EAAA,MAAMgH,eAAe,GAAIhH,CAAC,IAAKiH,UAAU,CAAC,MAAMC,MAAM,CAAE,CAAC,EAAE,CAAC,CAAC,CAAA;EAE7D,MAAMC,WAAW,GAAInH,CAAC,IAAK;AACzBmG,IAAAA,kBAAkB,EAAE,CAAA;IACpB,MAAM1N,EAAE,GAAGuH,CAAC,CAACoH,MAAM,CAAClC,OAAO,CAAC,KAAK,GAACpK,QAAQ,CAAC,CAAA;AAC3C,IAAA,IAAIrC,EAAE,IAAIA,EAAE,CAAC0M,OAAO,CAAC,GAAG,CAAC,IAAI1M,EAAE,CAACoG,YAAY,CAAC,MAAM,CAAC,EAAE;MACpD+G,UAAU,CAACnN,EAAE,CAAC,CAAA;AAChB,KAAA;GACD,CAAA;EAED,MAAMmN,UAAU,GAAInN,EAAE,IAAK;IACzB6I,cAAc,CAACY,OAAO,GAAGzJ,EAAE,CAAA;AAC3BmJ,IAAAA,gBAAgB,CAACkB,GAAG,CAAC,KAAK,CAAC,CAAA;IAC3B3B,SAAS,CAACkC,QAAQ,CAAC;MAACmD,QAAQ,EAAE/N,EAAE,CAACsF,WAAW;AAAEwI,MAAAA,OAAO,EAAE,CAAC9N,EAAE,CAACoG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAEwI,IAAI,EAAC;AAAC,KAAC,CAAC,CAAA;GAChG,CAAA;EAGD,MAAM3B,kBAAkB,GAAIU,IAAI,IAAK;AACnCA,IAAAA,IAAI,CAAC3G,SAAS,GAAG2G,IAAI,CAAC1G,SAAS,KAAK,QAAQ,GAAG,EAAE,GAAG0G,IAAI,CAAC1G,SAAS,CAAA;GACnE,CAAA;EAED,MAAMmH,UAAU,GAAI7G,CAAC,IAAK;AACxB,IAAA,IAAIA,CAAC,EAAEA,CAAC,CAACiE,cAAc,EAAE,CAAA;AACzBrC,IAAAA,gBAAgB,CAACkB,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B4C,IAAAA,kBAAkB,CAACpE,cAAc,CAACY,OAAO,CAAC,CAAA;IAC1Cf,SAAS,CAACuC,KAAK,EAAE,CAAA;IACjB,IAAIjI,KAAK,CAACyG,OAAO,EAAE;AACjBD,MAAAA,YAAY,CAACxG,KAAK,CAACyG,OAAO,CAACxC,SAAS,CAAC,CAAA;AACrCjE,MAAAA,KAAK,CAACyG,OAAO,CAACW,SAAS,EAAE,CAAA;AAC3B,KAAA;GACD,CAAA;EAED,MAAMqE,MAAM,GAAIlH,CAAC,IAAK;AACpBxD,IAAAA,WAAW,CAACf,KAAK,CAACyG,OAAO,EAAEK,aAAa,CAAC,CAAA;GAC1C,CAAA;EAED,MAAM4D,kBAAkB,GAAGA,MAAM;IAC/B,OAAO9D,iBAAiB,CAACiF,UAAA,CAAY5G,WAAW,EAACA,WAAW,CAACvD,GAAG,CAAEC,CAAC,IAAGnE,MAAM,CAACnB,QAAQ,CAACyP,iBAAiB,CAACnK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;GAC9G,CAAA;EAED,MAAMoK,UAAU,GAAI9E,IAAI,iBAAK+E,KAAA,CAAA1P,aAAA,CAAC2C,UAAU,EAAA;AACtCoJ,IAAAA,GAAG,EAAEpB,IAAK;IACV3B,QAAQ,EAAE,CAAC,CAAE;IACb2G,OAAO,EAAG1H,CAAC,IAAKkE,WAAW,CAAClE,CAAC,EAAE0C,IAAI,CAAE;IACrCjC,SAAS,EAAE,iDAAiD,IAAI2B,cAAc,CAACM,IAAI,CAAC,GAAG,WAAW,GAAG,EAAE,CAAE;AACzGiF,IAAAA,IAAI,EAAC,QAAA;GAELF,eAAAA,KAAA,CAAA1P,aAAA,CAAA,MAAA,EAAA;IAAM0I,SAAS,EAAE,YAAY,GAAGiC,IAAAA;AAAK,GAAC,CAC5B,CAAC,CAAA;AAEb,EAAA,MAAMkF,eAAe,gBAAGH,KAAA,CAAA1P,aAAA,CAAC4B,iBAAiB,EAAA;AACxCU,IAAAA,SAAS,EAAEA,SAAU;AACrBwN,IAAAA,GAAG,EAAEpK,SAAU;AACfqK,IAAAA,OAAO,EAAE1E,cAAe;AACxBO,IAAAA,MAAM,EAAEH,aAAc;IACtBtJ,KAAK,EAAEuH,gBAAgB,CAACgC,MAAO;IAC/BzJ,WAAW,EAAE,CAACS,QAAQ,GAAG,CAAC6F,eAAe,IAAImB,gBAAgB,CAACgC,MAAO;AACrEhD,IAAAA,SAAS,EAAEA,SAAAA;AAAU,GAAA,eAErBgH,KAAA,CAAA1P,aAAA,CAACkC,cAAc,EAAA;AAACwG,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,EACxCC,WAAW,CAACvD,GAAG,CAAC,CAACC,CAAC,EAAE2K,CAAC,KAAK3K,CAAC,KAAK,WAAW,gBAAGqK,KAAA,CAAA1P,aAAA,CAAC6C,aAAa,EAAA;AAAC6F,IAAAA,SAAS,EAAC,WAAW;IACrBqD,GAAG,EAAE,YAAY,GAAGiE,CAAAA;AAAE,GAAC,CAAC,GAAGP,UAAU,CAACpK,CAAC,CAAC,CACxF,CAAC,eACjBqK,KAAA,CAAA1P,aAAA,CAACwC,aAAa,EAAA,IAAA,eACZkN,KAAA,CAAA1P,aAAA,CAACf,eAAe,EAAA;AACdyJ,IAAAA,SAAS,EAAE3F,QAAS;AACpBkN,IAAAA,QAAQ,EAAEvM,KAAM;AAChBwM,IAAAA,IAAI,EAAEjG,SAAS,CAACE,OAAO,IAAI,EAAG;AAC9ByB,IAAAA,MAAM,EAAEA,MAAO;AACf+D,IAAAA,OAAO,EAAEP,WAAY;AACrBe,IAAAA,OAAO,EAAEpB,WAAY;AACrBqB,IAAAA,SAAS,EAAEpB,aAAc;AACzBqB,IAAAA,OAAO,EAAEpB,eAAgB;AACzBqB,IAAAA,MAAM,EAAErB,eAAgB;AACxBjG,IAAAA,QAAQ,EAAEA,QAAS;AACnBtG,IAAAA,QAAQ,EAAEA,QAAS;AACnBD,IAAAA,SAAS,EAAEA,SAAU;AACrBgG,IAAAA,WAAW,EAAEA,WAAAA;GACd,CACY,CAAC,EACfrG,MAAM,iBAAIsN,KAAA,CAAA1P,aAAA,CAACZ,SAAS,EAAA;AAACmR,IAAAA,IAAI,EAAC,MAAA;GAAO,CAAC,EAEjCnH,SAAS,CAACsC,MAAM,iBAChBgE,KAAA,CAAA1P,aAAA,CAACwQ,aAAa,EAAA;AACZ9M,IAAAA,KAAK,EAAEA,KAAM;AACb6F,IAAAA,cAAc,EAAEA,cAAe;AAC/BkH,IAAAA,MAAM,EAAE7B,kBAAmB;IAC3BpN,MAAM,EAAE4H,SAAS,CAACsC,MAAO;AACzBoD,IAAAA,UAAU,EAAEA,UAAW;AACvB4B,IAAAA,QAAQ,EAAEpC,gBAAAA;AAAiB,GAC5B,CAEc,CAAC,CAAA;AACpB,EAAA,OAAQhG,KAAK,gBACPoH,KAAA,CAAA1P,aAAA,CAAC2Q,KAAK,EAAA;AAACC,IAAAA,UAAU,EAAEzO,KAAM;AAAC2G,IAAAA,QAAQ,EAAEA,QAAS;AAACC,IAAAA,QAAQ,EAAEA,QAAS;AAACT,IAAAA,KAAK,EAAEA,KAAM;AAACO,IAAAA,SAAS,EAAEA,SAAAA;GAC5FgH,EAAAA,eACI,CAAC,GACJA,eAAe,CAAA;AAEvB,EAAC;AAED,MAAMW,aAAa,GAAGK,KAAA,IAAmE;EAAA,IAAlE;IAACJ,MAAM;IAAE3B,UAAU;IAAEvF,cAAc;IAAE7F,KAAK;IAAEgN,QAAQ;AAAElP,IAAAA,MAAAA;AAAM,GAAC,GAAAqP,KAAA,CAAA;AAClF,EAAA,MAAMzH,SAAS,GAAGI,MAAM,EAAE,CAAA;AAC1B,EAAA,MAAMsH,OAAO,GAAGtH,MAAM,EAAE,CAAA;AACxB,EAAA,MAAMuH,WAAW,GAAGvH,MAAM,EAAE,CAAA;AAC5B,EAAA,MAAMwH,UAAU,GAAGxH,MAAM,EAAE,CAAA;EAC3B,MAAMyH,MAAM,GAAGC,UAAU,CAACC,gBAAgB,CAAC,CAACC,MAAM,CAAClJ,QAAQ,CAAA;EAG3D,MAAMmJ,aAAa,GAAIC,UAAU,IAAK;AACpC,IAAA,IAAIC,MAAM,CAAA;AACV,IAAA,IAAI,CAACD,UAAU,CAAC7C,QAAQ,EAAE;AACxB8C,MAAAA,MAAM,GAAG;AAAC,QAAA,UAAU,EAAE,CAACN,MAAM,CAACO,aAAa,CAAA;OAAE,CAAA;AAC/C,KAAA;IACA,IAAI,CAACF,UAAU,CAAC9C,OAAO,IAAI8C,UAAU,CAAC9C,OAAO,KAAK,GAAG,IAAI,CAACiD,SAAS,CAACC,IAAI,CAACJ,UAAU,CAAC9C,OAAO,CAACc,IAAI,EAAE,CAAC,EAAE;AACnGiC,MAAAA,MAAM,GAAAI,aAAA,CAAAA,aAAA,KAAOJ,MAAM,CAAA,EAAA,EAAA,EAAA;AAAE,QAAA,SAAS,EAAE,CAACN,MAAM,CAACW,YAAY,CAAA;OAAE,CAAA,CAAA;AACxD,KAAA;AACA,IAAA,OAAOL,MAAM,CAAA;GACd,CAAA;EAED,MAAMM,eAAe,GAAI5J,CAAC,IAAK;AAC7B,IAAA,IAAIA,CAAC,CAAC6J,OAAO,KAAK,EAAE,EAAE;MACpB7J,CAAC,CAAC8J,eAAe,EAAE,CAAA;MACnBtB,MAAM,CAACxI,CAAC,CAAC,CAAA;AACX,KAAC,MAAM,IAAIA,CAAC,CAAC6J,OAAO,KAAK,EAAE,EAAE;MAC3B7J,CAAC,CAACiE,cAAc,EAAE,CAAA;MAClBjE,CAAC,CAAC8J,eAAe,EAAE,CAAA;AACnBjB,MAAAA,OAAO,CAAC3G,OAAO,CAAC6H,UAAU,EAAE,CAAA;AAC9B,KAAA;GACD,CAAA;AAED5H,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,MAAMsE,qBAAqB,GAAGnF,cAAc,CAACY,OAAO,CAAA;AACpD,IAAA,MAAM8H,gBAAgB,GAAG7I,SAAS,CAACe,OAAO,CAAA;AAC1C,IAAA,MAAM+H,UAAU,GAAGxD,qBAAqB,CAACyD,cAAc,EAAE,CAACrO,MAAM,GAAG,CAAC,GAAGJ,KAAK,CAACwO,UAAU,GAAGxD,qBAAqB,CAACwD,UAAU,CAAA;AAC1H,IAAA,MAAME,IAAI,GAAK1D,qBAAqB,CAAC2D,WAAW,GAAI,CAAC,GAAKJ,gBAAgB,CAACI,WAAW,GAAG,CAAE,GAAGH,UAAU,CAAA;IACxG,MAAMI,GAAG,GAAI5D,qBAAqB,CAAC6D,YAAY,GAAI7D,qBAAqB,CAAC8D,SAAS,CAAA;AAClFjL,IAAAA,MAAM,CAACC,MAAM,CAACyK,gBAAgB,CAAChS,KAAK,EAAE;AACpC,MAAA,UAAU,EAAE,UAAU;MACtB,MAAM,EAAEmS,IAAI,GAAG,IAAI;MACnB,KAAK,EAAEE,GAAG,GAAG,IAAA;AACf,KAAC,CAAC,CAAA;IACF,IAAI9Q,MAAM,CAACiN,QAAQ,EAAE;AACnBuC,MAAAA,UAAU,CAAC7G,OAAO,CAAChI,KAAK,EAAE,CAAA;AAC5B,KAAC,MAAM;AACL4O,MAAAA,WAAW,CAAC5G,OAAO,CAAChI,KAAK,EAAE,CAAA;AAC7B,KAAA;AACA,IAAA,OAAOsO,MAAM,CAAA;GACd,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,oBAAOf,KAAA,CAAA1P,aAAA,CAACyS,QAAQ,EAAA;IAACC,OAAO,EAAA,IAAA;AAAC5C,IAAAA,GAAG,EAAEgB,OAAQ;AAAC6B,IAAAA,MAAM,EAAEjC,QAAS;AAAClP,IAAAA,MAAM,EAAEA,MAAO;AAAC6P,IAAAA,aAAa,EAAEA,aAAAA;AAAc,GAAA,EAAEuB,IAAI,iBAC1GlD,KAAA,CAAA1P,aAAA,CAAA,KAAA,EAAA;IAAK2P,OAAO,EAAEoC,eAAe,EAAG;AAACjC,IAAAA,GAAG,EAAE1G,SAAU;AAACgH,IAAAA,SAAS,EAAEyB,eAAgB;AAC1EnJ,IAAAA,SAAS,EAAC,yCAAyC;AAACmK,IAAAA,eAAe,EAAE,KAAA;AAAM,GAAA,eAC3EnD,KAAA,CAAA1P,aAAA,CAAC8S,SAAS,EAAA;AACRhD,IAAAA,GAAG,EAAEiB,WAAY;IACjBlI,SAAS,EAAA,IAAA;AACTT,IAAAA,IAAI,EAAC,UAAU;IACfE,KAAK,EAAE2I,MAAM,CAAC8B,aAAAA;AAAc,GAC7B,CAAC,eACFrD,KAAA,CAAA1P,aAAA,CAAC8S,SAAS,EAAA;AACRhD,IAAAA,GAAG,EAAEkB,UAAW;IAChBnI,SAAS,EAAA,IAAA;AACTT,IAAAA,IAAI,EAAC,SAAS;IACdE,KAAK,EAAE2I,MAAM,CAAC+B,YAAAA;AAAa,GAC5B,CAAC,eACFtD,KAAA,CAAA1P,aAAA,CAAA,KAAA,EAAA;AAAK0I,IAAAA,SAAS,EAAC,cAAA;AAAc,GAAA,eAC3BgH,KAAA,CAAA1P,aAAA,CAAC4C,MAAM,EAAA;AAAC8F,IAAAA,SAAS,EAAC,aAAa;AAAC6H,IAAAA,IAAI,EAAC,QAAQ;AAACZ,IAAAA,OAAO,EAAEb,UAAAA;GACpDmC,EAAAA,MAAM,CAACgC,WACF,CAAC,eACTvD,KAAA,CAAA1P,aAAA,CAAC4C,MAAM,EAAA;AAAC+M,IAAAA,OAAO,EAAEc,MAAO;AAACzH,IAAAA,QAAQ,EAAE,CAAA;GAAIiI,EAAAA,MAAM,CAACiC,WAAoB,CAAC,eACnExD,KAAA,CAAA1P,aAAA,CAAC4C,MAAM,EAAA;IAACuQ,SAAS,EAAA,IAAA;IAACxD,OAAO,EAAEiD,IAAI,CAACQ,cAAAA;AAAe,GAAA,EAAEnC,MAAM,CAACoC,YAAqB,CAC1E,CAAC,eACN3D,KAAA,CAAA1P,aAAA,CAACsT,MAAM,EAAC,IAAA,CACL,CACI,CAAC,CAAA;AACd,CAAC;;;;"}
|
package/lib/index.cjs
CHANGED
|
@@ -36,7 +36,7 @@ var _concat = require('lodash/fp/concat');
|
|
|
36
36
|
var _without = require('lodash/fp/without');
|
|
37
37
|
var _isEqual = require('lodash/fp/isEqual');
|
|
38
38
|
var _last = require('lodash/fp/last');
|
|
39
|
-
var
|
|
39
|
+
var ContentEditableModule = require('react-contenteditable');
|
|
40
40
|
var _isObject = require('lodash/fp/isObject');
|
|
41
41
|
var _unionBy = require('lodash/fp/unionBy');
|
|
42
42
|
var _uniq = require('lodash/fp/uniq');
|
|
@@ -84,7 +84,7 @@ var _concat__default = /*#__PURE__*/_interopDefault(_concat);
|
|
|
84
84
|
var _without__default = /*#__PURE__*/_interopDefault(_without);
|
|
85
85
|
var _isEqual__default = /*#__PURE__*/_interopDefault(_isEqual);
|
|
86
86
|
var _last__default = /*#__PURE__*/_interopDefault(_last);
|
|
87
|
-
var
|
|
87
|
+
var ContentEditableModule__default = /*#__PURE__*/_interopDefault(ContentEditableModule);
|
|
88
88
|
var _isObject__default = /*#__PURE__*/_interopDefault(_isObject);
|
|
89
89
|
var _unionBy__default = /*#__PURE__*/_interopDefault(_unionBy);
|
|
90
90
|
var _uniq__default = /*#__PURE__*/_interopDefault(_uniq);
|
|
@@ -300,7 +300,7 @@ const useDraftConfirmation = (submit, discard, meta) => {
|
|
|
300
300
|
const Dialog = startlibs.dialogs[dialog.isOpen];
|
|
301
301
|
if (process.env.NODE_ENV !== 'production') {
|
|
302
302
|
if (dialog.isOpen && !Dialog) {
|
|
303
|
-
console.log("Dialog [".concat(
|
|
303
|
+
console.log("Dialog [".concat(dialog.isOpen, "] not registered in startlibs.dialogs"));
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
const feedback = dialog.isOpen ? /*#__PURE__*/React__default["default"].createElement(Dialog, _extends__default["default"]({
|
|
@@ -2230,6 +2230,9 @@ const _excluded$b = ["CompletedBox", "isEditable", "getLabel", "cancelEditable",
|
|
|
2230
2230
|
var _templateObject$5, _templateObject2$1, _templateObject3$1, _templateObject4;
|
|
2231
2231
|
function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2232
2232
|
function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
2233
|
+
|
|
2234
|
+
// Node/esbuild interop em .mjs devolve module.exports; Rollup devolve o default. Cobre os dois.
|
|
2235
|
+
const ContentEditable$1 = ContentEditableModule__default["default"].default || ContentEditableModule__default["default"];
|
|
2233
2236
|
const ua = navigator.userAgent.toLowerCase();
|
|
2234
2237
|
const isSafari = ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0;
|
|
2235
2238
|
const InputLoading = /*#__PURE__*/styled__default["default"](components.Loading).withConfig({
|
|
@@ -2244,7 +2247,7 @@ const AutoCompletePlaceholder = /*#__PURE__*/styled__default["default"].span.wit
|
|
|
2244
2247
|
displayName: "AutoComplete__AutoCompletePlaceholder",
|
|
2245
2248
|
componentId: "sc-g0526o-2"
|
|
2246
2249
|
})(["position:absolute;top:50%;transform:translateY(-50%);pointer-events:none;color:rgba(0,0,0,0.3);left:0.7rem;right:0.7rem;", ""], utils.media.mobile(_templateObject3$1 || (_templateObject3$1 = _taggedTemplateLiteral__default["default"](["\n left: 1rem;\n right: 1rem;\n "]))));
|
|
2247
|
-
const AutoCompleteTextboxDiv = /*#__PURE__*/styled__default["default"](
|
|
2250
|
+
const AutoCompleteTextboxDiv = /*#__PURE__*/styled__default["default"](ContentEditable$1).withConfig({
|
|
2248
2251
|
displayName: "AutoComplete__AutoCompleteTextboxDiv",
|
|
2249
2252
|
componentId: "sc-g0526o-3"
|
|
2250
2253
|
})(["display:inline-block;outline:0;outline:none;padding:0 1px;line-height:130%;"]);
|
|
@@ -2699,6 +2702,7 @@ class AutoCompleteTextbox extends React__default["default"].Component {
|
|
|
2699
2702
|
this.onChange = evt => {
|
|
2700
2703
|
this.props.onChange(this.props.index, cleanText(evt.currentTarget.isContentEditable ? evt.currentTarget.innerText : evt.target.value));
|
|
2701
2704
|
};
|
|
2705
|
+
this.setEl = ref => this.el = ref;
|
|
2702
2706
|
this.onPaste = ev => {
|
|
2703
2707
|
ev.preventDefault();
|
|
2704
2708
|
const text = ev.clipboardData.getData('text');
|
|
@@ -2713,12 +2717,19 @@ class AutoCompleteTextbox extends React__default["default"].Component {
|
|
|
2713
2717
|
}
|
|
2714
2718
|
return nextProps.value !== cleanText(this.el.innerText) || !!Object.keys(nextProps).find(k => nextProps[k] !== this.props[k]);
|
|
2715
2719
|
}
|
|
2716
|
-
|
|
2720
|
+
|
|
2721
|
+
// Only a programmatic change (not the user typing) should move the caret to the end
|
|
2722
|
+
getSnapshotBeforeUpdate() {
|
|
2723
|
+
return this.props.value !== cleanText(this.el.innerText);
|
|
2724
|
+
}
|
|
2725
|
+
componentDidUpdate(oldProps, prevState, changedOutside) {
|
|
2726
|
+
let rewritten = false;
|
|
2717
2727
|
if (this.props.value.slice(-1) === ' ' && /\S/.test(this.el.textContent.slice(-1))) {
|
|
2718
2728
|
// does not have blank space as last
|
|
2719
2729
|
this.el.innerHTML = this.props.value.replace(/\s/, ' ');
|
|
2730
|
+
rewritten = true;
|
|
2720
2731
|
}
|
|
2721
|
-
if (this.props.value !== oldProps.value && document.activeElement === this.el) {
|
|
2732
|
+
if (this.props.value !== oldProps.value && (changedOutside || rewritten) && document.activeElement === this.el) {
|
|
2722
2733
|
setSelectionRange$1(this.el.firstChild || this.el, this.el.textContent.length + 1);
|
|
2723
2734
|
}
|
|
2724
2735
|
}
|
|
@@ -2737,7 +2748,8 @@ class AutoCompleteTextbox extends React__default["default"].Component {
|
|
|
2737
2748
|
rest = _objectWithoutProperties__default["default"](_this$props, _excluded2$2);
|
|
2738
2749
|
const valueOrBlank = /*android fix, not needed? value || */_isString__default["default"](value) && value ? value : '\u200b';
|
|
2739
2750
|
const props = _objectSpread$5(_objectSpread$5({
|
|
2740
|
-
|
|
2751
|
+
// stable ref: a new function each render makes ContentEditable re-render and jump the caret to the end
|
|
2752
|
+
innerRef: this.setEl,
|
|
2741
2753
|
onKeyDown: this.onKeyDown,
|
|
2742
2754
|
onPaste: this.onPaste,
|
|
2743
2755
|
value: value,
|
|
@@ -4388,6 +4400,9 @@ const FlipDiv = _ref3 => {
|
|
|
4388
4400
|
|
|
4389
4401
|
function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4390
4402
|
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4403
|
+
|
|
4404
|
+
// Node/esbuild interop em .mjs devolve module.exports; Rollup devolve o default. Cobre os dois.
|
|
4405
|
+
const ContentEditable = ContentEditableModule__default["default"].default || ContentEditableModule__default["default"];
|
|
4391
4406
|
const InputIcon = /*#__PURE__*/styled__default["default"](components.Icon).withConfig({
|
|
4392
4407
|
displayName: "RichText__InputIcon",
|
|
4393
4408
|
componentId: "sc-x8c1ig-0"
|
|
@@ -4872,7 +4887,7 @@ const RichText = _ref3 => {
|
|
|
4872
4887
|
}, formatTools.map((t, i) => t === 'separator' ? /*#__PURE__*/React__default["default"].createElement(ToolSeparator, {
|
|
4873
4888
|
className: "separator",
|
|
4874
4889
|
key: "separator-" + i
|
|
4875
|
-
}) : toolButton(t))), /*#__PURE__*/React__default["default"].createElement(RichTextInput, null, /*#__PURE__*/React__default["default"].createElement(
|
|
4890
|
+
}) : toolButton(t))), /*#__PURE__*/React__default["default"].createElement(RichTextInput, null, /*#__PURE__*/React__default["default"].createElement(ContentEditable, {
|
|
4876
4891
|
className: JS_CLASS,
|
|
4877
4892
|
innerRef: input,
|
|
4878
4893
|
html: tempValue.current || "",
|