@pie-lib/editable-html 7.17.4-next.324 → 7.17.4-next.328

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/editor.js CHANGED
@@ -418,9 +418,15 @@ var Editor = /*#__PURE__*/function (_React$Component) {
418
418
 
419
419
  _defineProperty(_assertThisInitialized(_this), "onChange", function (change, done) {
420
420
  log('[onChange]');
421
+ var value = change.value;
422
+ var charactersLimit = _this.props.charactersLimit;
423
+
424
+ if (value && value.document && value.document.text && value.document.text.length > charactersLimit) {
425
+ return;
426
+ }
421
427
 
422
428
  _this.setState({
423
- value: change.value
429
+ value: value
424
430
  }, function () {
425
431
  log('[onChange], call done()');
426
432
 
@@ -679,6 +685,7 @@ _defineProperty(Editor, "propTypes", {
679
685
  focus: _propTypes["default"].func.isRequired,
680
686
  value: _slatePropTypes["default"].value.isRequired,
681
687
  imageSupport: _propTypes["default"].object,
688
+ charactersLimit: _propTypes["default"].number,
682
689
  width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
683
690
  height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
684
691
  minHeight: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
package/lib/editor.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","names":["log","debug","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","buildPlugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","image","onDelete","imageSupport","src","done","e","state","value","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","error","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","relatedTarget","target","node","findNode","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","isEqual","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","classNames","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","oneOfType","string","number","any","shape","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop","withStyles"],"sources":["../src/editor.jsx"],"sourcesContent":["import { Editor as SlateEditor, findNode } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string))\n })\n ),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = props => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n\n if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {\n this.handlePlugins(nextProps);\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState({ focusedNode: node }, this.handleBlur.bind(this, resolve));\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n this.onBlur(e);\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n this.setState({ value: change.value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value\n });\n }\n }\n\n valueToSize = v => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight)\n };\n }\n\n validateNode = node => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\n\n const { value, focusedNode, toolbarOpts } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'\n },\n className\n );\n\n return (\n <div\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\n <SlateEditor\n plugins={this.plugins}\n innerRef={r => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={r => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={r => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classes.slateEditor}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"mappings":"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"}
1
+ {"version":3,"file":"editor.js","names":["log","debug","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","buildPlugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","image","onDelete","imageSupport","src","done","e","state","value","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","error","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","relatedTarget","target","node","findNode","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","isEqual","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","classNames","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","number","oneOfType","string","any","shape","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop","withStyles"],"sources":["../src/editor.jsx"],"sourcesContent":["import { Editor as SlateEditor, findNode } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string))\n })\n ),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = props => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n\n if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {\n this.handlePlugins(nextProps);\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState({ focusedNode: node }, this.handleBlur.bind(this, resolve));\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n this.onBlur(e);\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n\n const { value } = change;\n const { charactersLimit } = this.props;\n\n if (\n value &&\n value.document &&\n value.document.text &&\n value.document.text.length > charactersLimit\n ) {\n return;\n }\n\n this.setState({ value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value\n });\n }\n }\n\n valueToSize = v => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight)\n };\n }\n\n validateNode = node => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\n\n const { value, focusedNode, toolbarOpts } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'\n },\n className\n );\n\n return (\n <div\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\n <SlateEditor\n plugins={this.plugins}\n innerRef={r => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={r => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={r => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classes.slateEditor}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAMA,GAAG,GAAG,IAAAC,iBAAA,EAAM,sBAAN,CAAZ;AAEA,IAAMC,kBAAkB,GAAG;EACzBC,QAAQ,EAAE,QADe;EAEzBC,SAAS,EAAE,MAFc;EAGzBC,aAAa,EAAE,KAHU;EAIzBC,QAAQ,EAAE,IAJe;EAKzBC,MAAM,EAAE;AALiB,CAA3B;AAQA,IAAMC,wBAAwB,GAAG;EAC/BC,OAAO,EAAE,EADsB;EAE/BC,eAAe,EAAE,2BAAM,CAAE,CAFM;EAG/BC,kBAAkB,EAAE,8BAAM,CAAE;AAHG,CAAjC;AAMA,IAAMC,8BAA8B,GAAG,EAAvC;;AAEA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAC,WAAW,EAAI;EACvC,uCACKZ,kBADL,GAEKY,WAFL;AAID,CALD;;IAOaC,M;;;;;EAuEX,gBAAYC,MAAZ,EAAmB;IAAA;;IAAA;;IACjB,0BAAMA,MAAN;;IADiB,gEAcH,UAAAA,KAAK,EAAI;MACvB,IAAMC,2BAA2B,mCAC5BT,wBAD4B,GAE5BQ,KAAK,CAACE,iBAFsB,CAAjC;;MAKA,MAAKC,OAAL,GAAe,IAAAC,qBAAA,EAAaJ,KAAK,CAACK,aAAnB,EAAkC;QAC/CC,IAAI,EAAE;UACJC,OAAO,EAAE,MAAKC,WADV;UAEJC,OAAO,EAAE,MAAKC,aAFV;UAGJC,MAAM,EAAE,MAAKC;QAHT,CADyC;QAM/CC,KAAK,EAAE;UACLC,QAAQ,EACNd,KAAK,CAACe,YAAN,IACAf,KAAK,CAACe,YAAN,UADA,IAEC,UAACC,GAAD,EAAMC,IAAN,EAAe;YACdjB,KAAK,CAACe,YAAN,WAA0BC,GAA1B,EAA+B,UAAAE,CAAC,EAAI;cAClCD,IAAI,CAACC,CAAD,EAAI,MAAKC,KAAL,CAAWC,KAAf,CAAJ;YACD,CAFD;UAGD,CARE;UASLC,oBAAoB,EAClBrB,KAAK,CAACe,YAAN,IACC,UAAAO,UAAU,EAAI;YACb;AACZ;AACA;AACA;YACY,IAAMC,OAAO,GAAGD,UAAU,CAAC;cAAA,OAAM,MAAKH,KAAL,CAAWC,KAAjB;YAAA,CAAD,CAA1B;YACApB,KAAK,CAACe,YAAN,CAAmBS,GAAnB,CAAuBD,OAAvB;UACD,CAlBE;UAmBLd,OAAO,EAAE,MAAKC,aAnBT;UAoBLC,MAAM,EAAE,MAAKC;QApBR,CANwC;QA4B/Ca,OAAO,EAAE;UACP;AACR;AACA;AACA;UACQC,gBAAgB,EAAE1B,KAAK,CAAC0B,gBALjB;UAMPC,SAAS,EAAE3B,KAAK,CAAC4B,gBANV;UAOPC,MAAM,EAAE,kBAAM;YACZ,IAAQC,QAAR,GAAqB9B,KAArB,CAAQ8B,QAAR;YAEA9C,GAAG,CAAC,UAAD,CAAH;;YACA,MAAK+C,QAAL,CAAc;cAAEC,cAAc,EAAE,KAAlB;cAAyBC,WAAW,EAAE;YAAtC,CAAd;;YACA,MAAKC,MAAL,CAAYC,IAAZ;;YAEA,IAAIL,QAAQ,IAAI,MAAKX,KAAL,CAAWC,KAAX,CAAiBgB,SAAjB,CAA2BC,IAA3B,CAAgCC,MAAhC,KAA2C,CAA3D,EAA8D;cAC5D,MAAKC,UAAL,CAAgB,IAAhB,EAAsBC,IAAtB,CAA2B,YAAM;gBAC/B,MAAKC,aAAL;cACD,CAFD;YAGD,CAJD,MAIO;cACL,MAAKA,aAAL;YACD;UACF;QArBM,CA5BsC;QAmD/CC,KAAK,EAAE;UACLjC,OAAO,EAAE,mBAAM;YACbzB,GAAG,CAAC,oBAAD,CAAH;;YACA,MAAK0B,aAAL;UACD,CAJI;UAKLC,MAAM,EAAE,kBAAM;YACZ3B,GAAG,CAAC,mBAAD,CAAH;;YACA,MAAK4B,YAAL;UACD;QARI,CAnDwC;QA6D/C+B,YAAY,EAAE;UACZC,IAAI,EAAE3C,2BAA2B,CAAC2C,IADtB;UAEZnD,OAAO,EAAEQ,2BAA2B,CAACR,OAFzB;UAGZoD,gBAAgB,EAAE5C,2BAA2B,CAAC4C,gBAHlC;UAIZnD,eAAe,EAAEO,2BAA2B,CAACP,eAJjC;UAKZC,kBAAkB,EAAEM,2BAA2B,CAACN,kBALpC;UAMZmD,KAAK,EAAE7C,2BAA2B,CAAC6C,KANvB;UAOZrC,OAAO,EAAE,mBAAM;YACbzB,GAAG,CAAC,oBAAD,CAAH;;YACA,MAAK0B,aAAL;UACD,CAVW;UAWZC,MAAM,EAAE,kBAAM;YACZ3B,GAAG,CAAC,mBAAD,CAAH;;YACA,MAAK4B,YAAL;UACD;QAdW,CA7DiC;QA6E/CmC,kBAAkB,EAAE/C,KAAK,CAACgD,uBA7EqB;QA8E/CC,KAAK,EAAE;UACLC,KAAK,EAAE,MAAKA,KADP;UAELC,YAAY,EAAE;YAAA,OAAM,MAAKhC,KAAL,CAAWC,KAAX,CAAiBgC,MAAjB,EAAN;UAAA,CAFT;UAGLC,QAAQ,EAAE,MAAKA;QAHV;MA9EwC,CAAlC,CAAf;IAoFD,CAxGkB;;IAAA,+DA2JJ,UAAAnC,CAAC,EAAI;MAClBlC,GAAG,CAAC,gBAAD,EAAmBkC,CAAC,IAAIA,CAAC,CAACoC,aAA1B,CAAH;MACA,IAAMC,MAAM,GAAGrC,CAAC,IAAIA,CAAC,CAACoC,aAAtB;MAEA,IAAME,IAAI,GAAGD,MAAM,GAAG,IAAAE,oBAAA,EAASF,MAAT,EAAiB,MAAKpC,KAAL,CAAWC,KAA5B,CAAH,GAAwC,IAA3D;MACApC,GAAG,CAAC,uBAAD,EAA0BwE,IAA1B,CAAH;;MACA,MAAKzB,QAAL,CAAc;QAAEE,WAAW,EAAEuB;MAAf,CAAd,EAAqC,YAAM;QACzC,MAAKjB,UAAL;MACD,CAFD;IAGD,CApKkB;;IAAA,gEAsKH,UAAArB,CAAC,EAAI;MACnBlC,GAAG,CAAC,iBAAD,EAAoBkC,CAAC,IAAIA,CAAC,CAACqC,MAA3B,CAAH;MACA,IAAMA,MAAM,GAAGrC,CAAC,IAAIA,CAAC,CAACqC,MAAtB;;MACA,IAAIA,MAAJ,EAAY;QACV,IAAMC,IAAI,GAAG,IAAAC,oBAAA,EAASF,MAAT,EAAiB,MAAKpC,KAAL,CAAWC,KAA5B,CAAb;QACApC,GAAG,CAAC,wBAAD,EAA2BwE,IAA3B,CAAH;QAEA,IAAME,YAAY,GAAG,MAAKvC,KAAL,CAAWuC,YAAX,IAA2B,MAAKvC,KAAL,CAAWC,KAA3D;;QACA,MAAKW,QAAL,CAAc;UAAEE,WAAW,EAAEuB,IAAf;UAAqBE,YAAY,EAAZA;QAArB,CAAd;MACD,CAND,MAMO;QACL,MAAK3B,QAAL,CAAc;UAAEE,WAAW,EAAE;QAAf,CAAd;MACD;;MACD,MAAK0B,UAAL;IACD,CAnLkB;;IAAA,8DAqLL,UAAAH,IAAI,EAAI;MACpB,MAAKtB,MAAL,CAAYkB,MAAZ,CAAmB,UAAAQ,CAAC;QAAA,OAAIA,CAAC,CAACC,iBAAF,CAAoBL,IAApB,CAAJ;MAAA,CAApB;;MACA,MAAKzB,QAAL,CAAc;QAAE+B,YAAY,EAAEN;MAAhB,CAAd;IACD,CAxLkB;;IAAA,gEA0LH,YAAM;MACpBxE,GAAG,CAAC,iBAAD,CAAH;;MACA,MAAK+C,QAAL,CAAc;QAAE2B,YAAY,EAAE,IAAhB;QAAsBzB,WAAW,EAAE;MAAnC,CAAd;;MACAjD,GAAG,CAAC,yBAAD,EAA4B,MAAKmC,KAAL,CAAWC,KAAvC,CAAH;;MACA,MAAKpB,KAAL,CAAWqD,QAAX,CAAoB,MAAKlC,KAAL,CAAWC,KAA/B,EAAsC,IAAtC;IACD,CA/LkB;;IAAA,6DAyMN,UAAA2C,OAAO,EAAI;MACtB,IAAQjC,QAAR,GAAqB,MAAK9B,KAA1B,CAAQ8B,QAAR;MACA,IACiBvC,MADjB,GAEI,MAAK4B,KAFT,CACErB,WADF,CACiBP,MADjB;;MAIA,MAAKwC,QAAL,CAAc;QAAEC,cAAc,EAAE,KAAlB;QAAyBC,WAAW,EAAE;MAAtC,CAAd;;MAEA,IAAI,MAAKC,MAAT,EAAiB;QACf,MAAKA,MAAL,CAAYC,IAAZ;MACD;;MAED,IAAI5C,MAAM,KAAK,MAAf,EAAuB;QACrB,IAAIuC,QAAQ,IAAI,MAAKX,KAAL,CAAWC,KAAX,CAAiBgB,SAAjB,CAA2BC,IAA3B,CAAgCC,MAAhC,KAA2C,CAA3D,EAA8D;UAC5D,MAAKC,UAAL,CAAgB,IAAhB,EAAsBC,IAAtB,CAA2B,YAAM;YAC/B,MAAKC,aAAL;;YACAsB,OAAO;UACR,CAHD;QAID,CALD,MAKO;UACL,MAAKtB,aAAL;;UACAsB,OAAO;QACR;MACF;IACF,CAhOkB;;IAAA,yDAkOV,UAAAC,KAAK,EAAI;MAChBhF,GAAG,CAAC,UAAD,CAAH;MACA,IAAMuE,MAAM,GAAGS,KAAK,CAACV,aAArB;MAEA,IAAME,IAAI,GAAGD,MAAM,GAAG,IAAAE,oBAAA,EAASF,MAAT,EAAiB,MAAKpC,KAAL,CAAWC,KAA5B,CAAH,GAAwC,IAA3D;MAEApC,GAAG,CAAC,iBAAD,EAAoBwE,IAApB,CAAH;MAEA,OAAO,IAAIS,OAAJ,CAAY,UAAAF,OAAO,EAAI;QAC5B,MAAKhC,QAAL,CAAc;UAAEE,WAAW,EAAEuB;QAAf,CAAd,EAAqC,MAAKU,UAAL,CAAgBC,IAAhB,gCAA2BJ,OAA3B,CAArC;;QACA,MAAK/D,KAAL,CAAWW,MAAX,CAAkBqD,KAAlB;MACD,CAHM,CAAP;IAID,CA9OkB;;IAAA,gEAgPH,UAAA9C,CAAC,EAAI;MACnB,IAAMkD,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBAAqC,MAAKnD,KAAL,CAAWC,KAAX,CAAiBiD,QAAjB,CAA0BE,GAA/D,SAAlB;MAEAC,UAAU,CAAC,YAAM;QACf,IAAI,CAAC,MAAKC,UAAV,EAAsB;UACpB;QACD;;QAED,IAAMC,aAAa,GACjB,CAACN,SAAD,IAAcC,QAAQ,CAACM,aAAT,CAAuBC,OAAvB,qBAA2CR,SAAS,CAACS,SAArD,SADhB;QAEA,IAAMC,cAAc,GAClB,CAAC,MAAKC,UAAN,IACAV,QAAQ,CAACM,aAAT,CAAuBC,OAAvB,qBAA2C,MAAKG,UAAL,CAAgBF,SAA3D,SAFF;;QAGA,IAAMG,oBAAoB,GACxB,MAAKP,UAAL,CAAgBQ,QAAhB,CAAyBP,aAAzB,KAA2C,MAAKD,UAAL,CAAgBQ,QAAhB,CAAyBH,cAAzB,CAD7C;;QAGA,IAAI,CAACE,oBAAL,EAA2B;UACzBZ,SAAS,CAACc,mBAAV,CAA8B,MAA9B,EAAsC,MAAKC,aAA3C;;UACA,MAAKxE,MAAL,CAAYO,CAAZ;QACD;MACF,CAjBS,EAiBP,EAjBO,CAAV;IAkBD,CArQkB;;IAAA,0DA8QT;MAAA,OACR,IAAI+C,OAAJ,CAAY,UAAAF,OAAO,EAAI;QACrB,IAAMK,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBAAqC,MAAKnD,KAAL,CAAWC,KAAX,CAAiBiD,QAAjB,CAA0BE,GAA/D,SAAlB;QAEAvF,GAAG,CAAC,WAAD,EAAcqF,QAAQ,CAACM,aAAvB,CAAH;QAEA;AACN;AACA;;QACM,IAAI,MAAKS,uBAAT,EAAkC;UAChC,4BAAsB,MAAKA,uBAA3B;UAAA,IAAQb,GAAR,yBAAQA,GAAR;UAAA,IAAac,IAAb,yBAAaA,IAAb;UACA,IAAMC,KAAK,GAAGjB,QAAQ,CAACC,aAAT,uBAAqCC,GAArC,SAAd;;UAEA,IAAIe,KAAJ,EAAW;YACT,IAAIlC,MAAM,GAAG,MAAKjC,KAAL,CAAWC,KAAX,CAAiBgC,MAAjB,GAA0BmC,YAA1B,CAAuChB,GAAvC,EAA4C;cAAEc,IAAI,EAAJA;YAAF,CAA5C,CAAb;;YAEA,MAAKtD,QAAL,CAAc;cAAEX,KAAK,EAAEgC,MAAM,CAAChC;YAAhB,CAAd,EAAuC,YAAM;cAC3C,MAAKgE,uBAAL,GAA+B,IAA/B;YACD,CAFD;UAGD;QACF;QAED;AACN;AACA;AACA;AACA;AACA;;;QACM,IAAIhB,SAAS,KAAKC,QAAQ,CAACM,aAA3B,EAA0C;UACxCP,SAAS,CAACc,mBAAV,CAA8B,MAA9B,EAAsC,MAAKC,aAA3C;UACAf,SAAS,CAACoB,gBAAV,CAA2B,MAA3B,EAAmC,MAAKL,aAAxC;QACD;;QAED,MAAKxB,UAAL;;QACA,MAAK3D,KAAL,CAAWS,OAAX;;QAEAsD,OAAO;MACR,CApCD,CADQ;IAAA,CA9QS;;IAAA,6DAqTN,YAAM;MACjB/E,GAAG,CAAC,cAAD,CAAH;;MACA,IAAI,CAAC,MAAKmC,KAAL,CAAWuC,YAAhB,EAA8B;QAC5B,MAAK3B,QAAL,CAAc;UAAE2B,YAAY,EAAE,MAAKvC,KAAL,CAAWC;QAA3B,CAAd;MACD;IACF,CA1TkB;;IAAA,6DA+TN,UAAAqE,KAAK,EAAI;MACpB,kBAA+B,MAAKtE,KAApC;MAAA,IAAQC,KAAR,eAAQA,KAAR;MAAA,IAAea,WAAf,eAAeA,WAAf;;MAEA,IAAMyD,SAAS,GAAG,MAAKvF,OAAL,CAAawF,MAAb,CAAoB,UAACC,CAAD,EAAIC,CAAJ,EAAU;QAC9C,OAAOD,CAAC,IAAKC,CAAC,CAACH,SAAF,IAAeG,CAAC,CAACH,SAAF,CAAY,MAAKvE,KAAL,CAAWC,KAAvB,CAA5B;MACD,CAFiB,EAEf,KAFe,CAAlB;;MAIApC,GAAG,CAAC,cAAD,EAAiBoC,KAAK,CAAC0E,SAAvB,EAAkC7D,WAAlC,EAA+C,aAA/C,EAA8DyD,SAA9D,CAAH;;MACA,IAAK,MAAKvE,KAAL,CAAWuC,YAAX,IAA2B,CAACtC,KAAK,CAAC0E,SAAlC,IAA+C,CAAC7D,WAAhD,IAA+D,CAACyD,SAAjE,IAA+ED,KAAnF,EAA0F;QACxFzG,GAAG,CAAC,2BAAD,CAAH;QACAA,GAAG,CAAC,SAAD,EAAY,MAAKmC,KAAL,CAAWuC,YAAX,CAAwBW,QAAxB,CAAiC0B,QAAjC,EAAZ,CAAH;QACA/G,GAAG,CAAC,SAAD,EAAY,MAAKmC,KAAL,CAAWC,KAAX,CAAiBiD,QAAjB,CAA0B0B,QAA1B,EAAZ,CAAH;;QAEA,IAAMC,QAAQ,GAAGC,YAAA,CAAMC,QAAN,CAAe,MAAK/E,KAAL,CAAWuC,YAAX,CAAwByC,MAAxB,EAAf,CAAjB;;QAEAnH,GAAG,CAAC,YAAD,EAAegH,QAAQ,CAAC3B,QAAxB,CAAH;QACA,OAAO,IAAIJ,OAAJ,CAAY,UAAAF,OAAO,EAAI;UAC5BS,UAAU,CAAC,YAAM;YACf,MAAKzC,QAAL,CAAc;cAAEX,KAAK,EAAE4E,QAAT;cAAmBtC,YAAY,EAAE;YAAjC,CAAd,EAAuD,YAAM;cAC3D1E,GAAG,CAAC,aAAD,EAAgB,MAAKmC,KAAL,CAAWC,KAAX,CAAiBiD,QAAjB,CAA0B8B,MAA1B,EAAhB,CAAH;cACApC,OAAO;YACR,CAHD;UAID,CALS,EAKP,EALO,CAAV;QAMD,CAPM,CAAP;MAQD,CAhBD,MAgBO;QACL,OAAOE,OAAO,CAACF,OAAR,CAAgB,EAAhB,CAAP;MACD;IACF,CA1VkB;;IAAA,2DA4VR,UAACX,MAAD,EAASnC,IAAT,EAAkB;MAC3BjC,GAAG,CAAC,YAAD,CAAH;MAEA,IAAQoC,KAAR,GAAkBgC,MAAlB,CAAQhC,KAAR;MACA,IAAQgF,eAAR,GAA4B,MAAKpG,KAAjC,CAAQoG,eAAR;;MAEA,IACEhF,KAAK,IACLA,KAAK,CAACiD,QADN,IAEAjD,KAAK,CAACiD,QAAN,CAAehC,IAFf,IAGAjB,KAAK,CAACiD,QAAN,CAAehC,IAAf,CAAoBC,MAApB,GAA6B8D,eAJ/B,EAKE;QACA;MACD;;MAED,MAAKrE,QAAL,CAAc;QAAEX,KAAK,EAALA;MAAF,CAAd,EAAyB,YAAM;QAC7BpC,GAAG,CAAC,yBAAD,CAAH;;QAEA,IAAIiC,IAAJ,EAAU;UACRA,IAAI;QACL;MACF,CAND;IAOD,CAlXkB;;IAAA,8DA6XL,UAAAoF,CAAC,EAAI;MACjB,IAAI,CAACA,CAAL,EAAQ;QACN;MACD;;MAED,IAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;QACzB,IAAIA,CAAC,CAACC,QAAF,CAAW,GAAX,CAAJ,EAAqB;UACnB,OAAOC,SAAP;QACD,CAFD,MAEO,IAAIF,CAAC,CAACC,QAAF,CAAW,IAAX,KAAoBD,CAAC,CAACC,QAAF,CAAW,IAAX,CAApB,IAAwCD,CAAC,CAACC,QAAF,CAAW,IAAX,CAA5C,EAA8D;UACnE,OAAOD,CAAP;QACD,CAFM,MAEA;UACL,IAAMjF,KAAK,GAAGoF,QAAQ,CAACH,CAAD,EAAI,EAAJ,CAAtB;UACA,OAAOI,KAAK,CAACrF,KAAD,CAAL,GAAeA,KAAf,aAA0BA,KAA1B,OAAP;QACD;MACF;;MACD,IAAI,OAAOiF,CAAP,KAAa,QAAjB,EAA2B;QACzB,iBAAUA,CAAV;MACD;;MAED;IACD,CAjZkB;;IAAA,+DA8ZJ,UAAA7C,IAAI,EAAI;MACrB,IAAIA,IAAI,CAACkD,MAAL,KAAgB,OAApB,EAA6B;MAE7B,IAAMC,IAAI,GAAGnD,IAAI,CAACoD,KAAL,CAAWD,IAAX,EAAb;MACA,IAAI,CAACA,IAAL,EAAW;MAEX,IAAIA,IAAI,CAAC/D,IAAL,KAAc,OAAlB,EAA2B;MAE3B5D,GAAG,CAAC,gCAAD,CAAH;MAEA,IAAM6H,MAAM,GAAGF,IAAI,CAACG,SAAL,CAAeH,IAAI,CAACpC,GAApB,CAAf;;MACA,IAAMsB,CAAC,GAAGkB,YAAA,CAAMD,SAAN,CAAgBH,IAAI,CAACpC,GAArB,CAAV;;MACAvF,GAAG,CAAC,wBAAD,EAA2B6H,MAA3B,EAAmChB,CAAnC,CAAH;MAEA,OAAOU,SAAP;IACD,CA7akB;;IAAA,6DA+aN,UAAChC,GAAD,EAAMc,IAAN,EAAe;MAC1BrG,GAAG,CAAC,mBAAD,EAAsBuF,GAAtB,EAA2Bc,IAA3B,CAAH;MAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAEI;MACA;;MAEA,MAAKD,uBAAL,GAA+B;QAAEb,GAAG,EAAHA,GAAF;QAAOc,IAAI,EAAJA;MAAP,CAA/B;IACD,CAhckB;;IAAA,wDAkcX,UAAC2B,GAAD,EAAMxD,IAAN,EAAe;MACrB,IAAMrE,QAAQ,GAAG6H,GAAG,IAAI,KAAxB;;MAEA,MAAKhH,KAAL,CAAWkD,KAAX,CAAiB/D,QAAjB,EAA2BqE,IAA3B;IACD,CAtckB;;IAEjB,MAAKrC,KAAL,GAAa;MACXC,KAAK,EAAEpB,MAAK,CAACoB,KADF;MAEXtB,WAAW,EAAED,iBAAiB,CAACG,MAAK,CAACF,WAAP;IAFnB,CAAb;;IAKA,MAAKmH,QAAL,GAAgB,YAAM;MACpBjH,MAAK,CAACqD,QAAN,CAAe,MAAKlC,KAAL,CAAWC,KAA1B,EAAiC,IAAjC;IACD,CAFD;;IAIA,MAAK8F,aAAL,CAAmB,MAAKlH,KAAxB;;IAXiB;EAYlB;;;;WA8FD,6BAAoB;MAAA;;MAClB;MACA,KAAKA,KAAL,CAAWmH,KAAX,CAAiB,IAAjB;MAEAC,MAAM,CAAC5B,gBAAP,CAAwB,QAAxB,EAAkC,KAAKyB,QAAvC;;MAEA,IAAI,KAAK/E,MAAL,IAAe,KAAKlC,KAAL,CAAWqH,SAA9B,EAAyC;QACvCpD,OAAO,CAACF,OAAR,GAAkBvB,IAAlB,CAAuB,YAAM;UAC3B,IAAI,MAAI,CAACN,MAAT,EAAiB;YACf,IAAMkC,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBACF,MAAI,CAACpC,MAAL,CAAYd,KAAZ,CAAkBiD,QAAlB,CAA2BE,GADzB,SAAlB;;YAIA,MAAI,CAACrC,MAAL,CAAYgB,KAAZ;;YAEA,IAAIkB,SAAJ,EAAe;cACbA,SAAS,CAAClB,KAAV;YACD;UACF;QACF,CAZD;MAaD;IACF;;;WAED,mCAA0BoE,SAA1B,EAAqC;MACnC,IAAQxH,WAAR,GAAwB,KAAKqB,KAA7B,CAAQrB,WAAR;MACA,IAAMyH,cAAc,GAAG1H,iBAAiB,CAACyH,SAAS,CAACxH,WAAX,CAAxC;;MAEA,IAAI,CAAC,IAAA0H,mBAAA,EAAQD,cAAR,EAAwBzH,WAAxB,CAAL,EAA2C;QACzC,KAAKiC,QAAL,CAAc;UACZjC,WAAW,EAAEyH;QADD,CAAd;MAGD;;MAED,IAAI,CAAC,IAAAC,mBAAA,EAAQF,SAAS,CAACtE,uBAAlB,EAA2C,KAAKhD,KAAL,CAAWgD,uBAAtD,CAAL,EAAqF;QACnF,KAAKkE,aAAL,CAAmBI,SAAnB;MACD;IACF;;;WAED,8BAAqB;MACnB;MACA;MACA,IAAMG,YAAY,GAAGpD,QAAQ,CAACqD,gBAAT,CAA0B,6BAA1B,CAArB;MAEAC,KAAK,CAACC,IAAN,CAAWH,YAAX,EAAyBI,OAAzB,CAAiC,UAAAC,EAAE,EAAI;QACrCA,EAAE,CAACC,KAAH,CAASC,QAAT,GAAoB,KAApB;QACAF,EAAE,CAACC,KAAH,CAASE,OAAT,GAAmB,cAAnB;MACD,CAHD;IAID;;;;IAwCD;AACF;AACA;IACE,gCAAuB;MACrBb,MAAM,CAAClC,mBAAP,CAA2B,QAA3B,EAAqC,KAAK+B,QAA1C;IACD,C,CAED;;;;WA4KA,0CAAiCjH,KAAjC,EAAwC;MACtC,IAAI,CAACA,KAAK,CAACoB,KAAN,CAAYiD,QAAZ,CAAqB6D,MAArB,CAA4B,KAAKlI,KAAL,CAAWoB,KAAX,CAAiBiD,QAA7C,CAAL,EAA6D;QAC3D,KAAKtC,QAAL,CAAc;UACZmB,KAAK,EAAE,KADK;UAEZ9B,KAAK,EAAEpB,KAAK,CAACoB;QAFD,CAAd;MAID;IACF;;;WAwBD,0BAAiB;MACf,kBAAgD,KAAKpB,KAArD;MAAA,IAAQmI,KAAR,eAAQA,KAAR;MAAA,IAAeC,SAAf,eAAeA,SAAf;MAAA,IAA0BC,MAA1B,eAA0BA,MAA1B;MAAA,IAAkCC,SAAlC,eAAkCA,SAAlC;MAEA,OAAO;QACLH,KAAK,EAAE,KAAKI,WAAL,CAAiBJ,KAAjB,CADF;QAELE,MAAM,EAAE,KAAKE,WAAL,CAAiBF,MAAjB,CAFH;QAGLD,SAAS,EAAE,KAAKG,WAAL,CAAiBH,SAAjB,CAHN;QAILE,SAAS,EAAE,KAAKC,WAAL,CAAiBD,SAAjB;MAJN,CAAP;IAMD;;;WA4CD,kBAAS;MAAA;MAAA;;MACP,mBASI,KAAKtI,KATT;MAAA,IACEwI,QADF,gBACEA,QADF;MAAA,IAEEC,UAFF,gBAEEA,UAFF;MAAA,IAGEC,cAHF,gBAGEA,cAHF;MAAA,IAIEC,OAJF,gBAIEA,OAJF;MAAA,IAKE9D,SALF,gBAKEA,SALF;MAAA,IAME+D,WANF,gBAMEA,WANF;MAAA,IAOEC,WAPF,gBAOEA,WAPF;MAAA,IAQEC,SARF,gBAQEA,SARF;MAWA,mBAA4C,KAAK3H,KAAjD;MAAA,IAAQC,KAAR,gBAAQA,KAAR;MAAA,IAAea,WAAf,gBAAeA,WAAf;MAAA,IAA4BnC,WAA5B,gBAA4BA,WAA5B;MAEAd,GAAG,CAAC,kBAAD,EAAqBoC,KAArB,CAAH;MACA,IAAM2H,SAAS,GAAG,KAAKC,cAAL,EAAlB;MACA,IAAMC,KAAK,GAAG,IAAAC,sBAAA,kDAETP,OAAO,CAACQ,MAFC,EAEQT,cAFR,gCAGTC,OAAO,CAACS,YAHC,EAGctJ,WAAW,CAACT,aAAZ,IAA6BS,WAAW,CAACX,QAAZ,KAAyB,KAHpE,iBAKZ0F,SALY,CAAd;MAQA,oBACE;QACE,GAAG,EAAE,aAAAwE,IAAG;UAAA,OAAK,MAAI,CAAC5E,UAAL,GAAkB4E,IAAvB;QAAA,CADV;QAEE,KAAK,EAAE;UAAElB,KAAK,EAAEY,SAAS,CAACZ;QAAnB,CAFT;QAGE,SAAS,EAAEc;MAHb,gBAKE,gCAAC,kBAAD;QACE,OAAO,EAAE,KAAK9I,OADhB;QAEE,QAAQ,EAAE,kBAAAmJ,CAAC,EAAI;UACb,IAAIA,CAAJ,EAAO;YACL,MAAI,CAACC,WAAL,GAAmBD,CAAnB;UACD;QACF,CANH;QAOE,GAAG,EAAE,aAAAA,CAAC;UAAA,OAAK,MAAI,CAACpH,MAAL,GAAcoH,CAAC,IAAI,MAAI,CAACtJ,KAAL,CAAWwJ,SAAX,CAAqBF,CAArB,CAAxB;QAAA,CAPR;QAQE,UAAU,EAAE,oBAAAA,CAAC,EAAI;UACf,IAAIA,CAAJ,EAAO;YACL,MAAI,CAACvE,UAAL,GAAkBuE,CAAlB;UACD;QACF,CAZH;QAaE,KAAK,EAAElI,KAbT;QAcE,KAAK,EAAE,KAAK8B,KAdd;QAeE,SAAS,EAAE4F,SAfb;QAgBE,QAAQ,EAAE,KAAKzF,QAhBjB;QAiBE,MAAM,EAAE,KAAK1C,MAjBf;QAkBE,OAAO,EAAE,KAAKF,OAlBhB;QAmBE,aAAa,EAAE,KAAKgC,aAnBtB;QAoBE,WAAW,EAAER,WApBf;QAqBE,SAAS,EAAE,KAAKwH,SArBlB;QAsBE,QAAQ,EAAEjB,QAtBZ;QAuBE,UAAU,EAAEC,UAvBd;QAwBE,SAAS,EAAEE,OAAO,CAACY,WAxBrB;QAyBE,KAAK,EAAE;UACLnB,SAAS,EAAEW,SAAS,CAACX,SADhB;UAELC,MAAM,EAAEU,SAAS,CAACV,MAFb;UAGLC,SAAS,EAAES,SAAS,CAACT;QAHhB,CAzBT;QA8BE,WAAW,EAAEO,WA9Bf;QA+BE,WAAW,EAAE/I,WA/Bf;QAgCE,WAAW,EAAE8I,WAhCf;QAiCE,YAAY,EAAE,KAAKc;MAjCrB,EALF,CADF;IA2CD;;;;EAllByBC,iBAAA,CAAMC,S,GAqlBlC;;;;;gBArlBa7J,M,eACQ;EACjBsH,SAAS,EAAEwC,qBAAA,CAAUC,IADJ;EAEjBN,SAAS,EAAEK,qBAAA,CAAUE,IAAV,CAAeC,UAFT;EAGjB7C,KAAK,EAAE0C,qBAAA,CAAUE,IAAV,CAAeC,UAHL;EAIjB3G,QAAQ,EAAEwG,qBAAA,CAAUE,IAAV,CAAeC,UAJR;EAKjBvJ,OAAO,EAAEoJ,qBAAA,CAAUE,IALF;EAMjBpJ,MAAM,EAAEkJ,qBAAA,CAAUE,IAND;EAOjBjB,SAAS,EAAEe,qBAAA,CAAUE,IAPJ;EAQjB7G,KAAK,EAAE2G,qBAAA,CAAUE,IAAV,CAAeC,UARL;EASjB5I,KAAK,EAAE6I,0BAAA,CAAW7I,KAAX,CAAiB4I,UATP;EAUjBjJ,YAAY,EAAE8I,qBAAA,CAAUnD,MAVP;EAWjBN,eAAe,EAAEyD,qBAAA,CAAUK,MAXV;EAYjB/B,KAAK,EAAE0B,qBAAA,CAAUM,SAAV,CAAoB,CAACN,qBAAA,CAAUO,MAAX,EAAmBP,qBAAA,CAAUK,MAA7B,CAApB,CAZU;EAajB7B,MAAM,EAAEwB,qBAAA,CAAUM,SAAV,CAAoB,CAACN,qBAAA,CAAUO,MAAX,EAAmBP,qBAAA,CAAUK,MAA7B,CAApB,CAbS;EAcjB9B,SAAS,EAAEyB,qBAAA,CAAUM,SAAV,CAAoB,CAACN,qBAAA,CAAUO,MAAX,EAAmBP,qBAAA,CAAUK,MAA7B,CAApB,CAdM;EAejB5B,SAAS,EAAEuB,qBAAA,CAAUM,SAAV,CAAoB,CAACN,qBAAA,CAAUO,MAAX,EAAmBP,qBAAA,CAAUK,MAA7B,CAApB,CAfM;EAgBjBvB,OAAO,EAAEkB,qBAAA,CAAUnD,MAAV,CAAiBsD,UAhBT;EAiBjBtB,cAAc,EAAEmB,qBAAA,CAAUC,IAjBT;EAkBjBtB,QAAQ,EAAEqB,qBAAA,CAAUC,IAlBH;EAmBjBrB,UAAU,EAAEoB,qBAAA,CAAUC,IAnBL;EAoBjBhI,QAAQ,EAAE+H,qBAAA,CAAUC,IApBH;EAqBjBpI,gBAAgB,EAAEmI,qBAAA,CAAUC,IArBX;EAsBjBlI,gBAAgB,EAAEiI,qBAAA,CAAUC,IAtBX;EAuBjBjB,WAAW,EAAEgB,qBAAA,CAAUQ,GAvBN;EAwBjBzB,WAAW,EAAEiB,qBAAA,CAAUO,MAxBN;EAyBjBlK,iBAAiB,EAAE2J,qBAAA,CAAUS,KAAV,CAAgB;IACjC1H,IAAI,EAAEiH,qBAAA,CAAUU,KAAV,CAAgB,CACpB,+BADoB,EAEpB,iBAFoB,EAGpB,mBAHoB,CAAhB,CAD2B;IAMjC9K,OAAO,EAAEoK,qBAAA,CAAUnD,MANc;IAOjChH,eAAe,EAAEmK,qBAAA,CAAUE,IAPM;IAQjCpK,kBAAkB,EAAEkK,qBAAA,CAAUE;EARG,CAAhB,CAzBF;EAmCjB/G,uBAAuB,EAAE6G,qBAAA,CAAUW,OAAV,CACvBX,qBAAA,CAAUS,KAAV,CAAgB;IACdG,QAAQ,EAAEZ,qBAAA,CAAUO,MADN;IAEdM,aAAa,EAAEb,qBAAA,CAAUO,MAFX;IAGdO,UAAU,EAAEd,qBAAA,CAAUW,OAAV,CAAkBX,qBAAA,CAAUW,OAAV,CAAkBX,qBAAA,CAAUO,MAA5B,CAAlB;EAHE,CAAhB,CADuB,CAnCR;EA0CjBtK,WAAW,EAAE+J,qBAAA,CAAUS,KAAV,CAAgB;IAC3BnL,QAAQ,EAAE0K,qBAAA,CAAUU,KAAV,CAAgB,CAAC,QAAD,EAAW,KAAX,CAAhB,CADiB;IAE3BnL,SAAS,EAAEyK,qBAAA,CAAUU,KAAV,CAAgB,CAAC,MAAD,EAAS,OAAT,CAAhB,CAFgB;IAG3BlL,aAAa,EAAEwK,qBAAA,CAAUC,IAHE;IAI3BxK,QAAQ,EAAEuK,qBAAA,CAAUC,IAJO;IAK3BvK,MAAM,EAAEsK,qBAAA,CAAUO;EALS,CAAhB,CA1CI;EAiDjB/J,aAAa,EAAEwJ,qBAAA,CAAUW,OAAV,CAAkB,UAAAI,MAAM,EAAI;IACzC,IAAMC,QAAQ,GAAGD,MAAM,CAACE,KAAP,CAAa,UAAAzE,CAAC;MAAA,OAAI0E,oBAAA,CAAYC,QAAZ,CAAqB3E,CAArB,CAAJ;IAAA,CAAd,CAAjB;IAEA,OACE,CAACwE,QAAD,IACA,IAAII,KAAJ,2BAA6BL,MAA7B,sCAA+DG,oBAAA,CAAYG,IAAZ,CAAiB,GAAjB,CAA/D,OAFF;EAID,CAPc,CAjDE;EAyDjBrG,SAAS,EAAEgF,qBAAA,CAAUO;AAzDJ,C;;gBADRrK,M,kBA6DW;EACpB2B,gBAAgB,EAAE,IADE;EAEpBjB,OAAO,EAAE,mBAAM,CAAE,CAFG;EAGpBE,MAAM,EAAE,kBAAM,CAAE,CAHI;EAIpBmI,SAAS,EAAE,qBAAM,CAAE,CAJC;EAKpBhJ,WAAW,EAAEZ,kBALO;EAMpBgB,iBAAiB,EAAEV,wBANC;EAOpBwD,uBAAuB,EAAEpD;AAPL,C;;AAyhBxB,IAAMuL,MAAM,GAAG;EACbhC,MAAM,EAAE;IACNiC,eAAe,EAAE;EADX,CADK;EAIb7B,WAAW,EAAE;IACX8B,UAAU,EAAE,oBADD;IAGX,WAAW;MACTC,WAAW,EAAE,OADJ;MAETnD,KAAK,EAAE,MAFE;MAGToD,cAAc,EAAE,UAHP;MAITC,KAAK,EAAEA,eAAA,CAAMnJ,IAAN,EAJE;MAKT+I,eAAe,EAAEI,eAAA,CAAMC,UAAN;IALR,CAHA;IAUX,gCAAgC;MAC9BC,SAAS,EAAE,mBADmB,CAE9B;MACA;MACA;MACA;;IAL8B,CAVrB;IAiBX,YAAY;MACVC,OAAO,EAAE,UADC;MAEVC,SAAS,EAAE;IAFD,CAjBD;IAqBX,oCAAoC;MAClCC,MAAM,EAAE;IAD0B;EArBzB,CAJA;EA6BbzC,YAAY,EAAE;IACZ0C,SAAS,EAAE;EADC;AA7BD,CAAf;;eAkCe,IAAAC,kBAAA,EAAWZ,MAAX,EAAmBpL,MAAnB,C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "7.17.4-next.324+5a1d569b",
3
+ "version": "7.17.4-next.328+64625d46",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -12,7 +12,7 @@
12
12
  "@material-ui/styles": "^3.0.0-alpha.10",
13
13
  "@pie-lib/drag": "^1.1.52",
14
14
  "@pie-lib/math-rendering": "^2.4.0",
15
- "@pie-lib/math-toolbar": "^1.8.1-next.324+5a1d569b",
15
+ "@pie-lib/math-toolbar": "^1.8.0",
16
16
  "@pie-lib/render-ui": "^4.12.0",
17
17
  "change-case": "^3.0.2",
18
18
  "classnames": "^2.2.6",
@@ -46,6 +46,6 @@
46
46
  "publishConfig": {
47
47
  "access": "public"
48
48
  },
49
- "gitHead": "5a1d569b144ca3eec387306bf5ff046aa13ab485",
49
+ "gitHead": "64625d46815814b7d5388a2e5950d03dfdd54c1b",
50
50
  "scripts": {}
51
51
  }
package/src/editor.jsx CHANGED
@@ -51,6 +51,7 @@ export class Editor extends React.Component {
51
51
  focus: PropTypes.func.isRequired,
52
52
  value: SlateTypes.value.isRequired,
53
53
  imageSupport: PropTypes.object,
54
+ charactersLimit: PropTypes.number,
54
55
  width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
55
56
  height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
56
57
  minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
@@ -459,7 +460,20 @@ export class Editor extends React.Component {
459
460
 
460
461
  onChange = (change, done) => {
461
462
  log('[onChange]');
462
- this.setState({ value: change.value }, () => {
463
+
464
+ const { value } = change;
465
+ const { charactersLimit } = this.props;
466
+
467
+ if (
468
+ value &&
469
+ value.document &&
470
+ value.document.text &&
471
+ value.document.text.length > charactersLimit
472
+ ) {
473
+ return;
474
+ }
475
+
476
+ this.setState({ value }, () => {
463
477
  log('[onChange], call done()');
464
478
 
465
479
  if (done) {