{"version":3,"file":"BX_Textbox.mjs","sources":["../../../src/shapes/BX_Textbox.ts"],"sourcesContent":["// @ts-nocheck\nimport { TClassProperties } from '../typedefs';\nimport { IText } from './IText/IText';\nimport { classRegistry } from '../ClassRegistry';\nimport { renderCircleControl } from '../controls/controlRendering';\nimport { Control } from '../controls/Control';\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textboxDefaultValues: Partial<TClassProperties<Textbox>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  lockScalingFlip: true,\n  noScaleCache: false,\n  _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: true,\n  obj_type: 'WBTextbox',\n};\n\n/**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n */\nexport class Textbox extends IText {\n  /**\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare obj_type: string;\n\n  declare hasNoText: boolean;\n  /**\n   * Minimum calculated width of a textbox, in pixels.\n   * fixed to 2 so that an empty textbox cannot go to 0\n   * and is still selectable without text.\n   * @type Number\n   * @default\n   */\n  declare dynamicMinWidth: number;\n\n  declare oneLine: boolean;\n\n  declare fromCopy: boolean;\n  /**\n   * Use this boolean property in order to split strings that have no white space concept.\n   * this is a cheap way to help with chinese/japanese\n   * @type Boolean\n   * @since 2.6.0\n   */\n  declare splitByGrapheme: boolean;\n\n  static textLayoutProperties = [...IText.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = textboxDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      ...Textbox.ownDefaults,\n    };\n  }\n  constructor(text: string, options: any) {\n    super(text, options);\n    if (this.obj_type !== 'WBText' && this.obj_type !== 'WBTextbox') {\n      this.addControls();\n    }\n    this.InitializeEvent();\n    this.resetResizeControls();\n  }\n\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n  /**\n   * Unlike superclass's version of this function, Textbox does not update\n   * its width.\n   * @private\n   * @override\n   */\n  initDimensions() {\n    if (!this.initialized) {\n      return;\n    }\n    this.isEditing && this.initDelayedCursor();\n    this._clearCache();\n    // clear dynamicMinWidth as it will be different after we re-wrap line\n    this.dynamicMinWidth = 0;\n    // wrap lines\n    this._styleMap = this._generateStyleMap(this._splitText());\n    // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n    if (this.dynamicMinWidth > this.width) {\n      this._set('width', this.dynamicMinWidth);\n    }\n    if (this.textAlign.indexOf('justify') !== -1) {\n      // once text is measured we need to make space fatter to make justified text.\n      this.enlargeSpaces();\n    }\n    // clear cache and re-calculate height\n    this.height = this.calcTextHeight();\n  }\n  /**\n   * Generate an object that translates the style object so that it is\n   * broken up by visual lines (new lines and automatic wrapping).\n   * The original text styles object is broken up by actual lines (new lines only),\n   * which is only sufficient for Text / IText\n   * @private\n   */\n  _generateStyleMap(textInfo) {\n    let realLineCount = 0,\n      realLineCharCount = 0,\n      charCount = 0;\n    const map = {};\n\n    for (let i = 0; i < textInfo.graphemeLines.length; i++) {\n      if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n        realLineCharCount = 0;\n        charCount++;\n        realLineCount++;\n      } else if (\n        !this.splitByGrapheme &&\n        this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) &&\n        i > 0\n      ) {\n        // this case deals with space's that are removed from end of lines when wrapping\n        realLineCharCount++;\n        charCount++;\n      }\n\n      map[i] = { line: realLineCount, offset: realLineCharCount };\n\n      charCount += textInfo.graphemeLines[i].length;\n      realLineCharCount += textInfo.graphemeLines[i].length;\n    }\n\n    return map;\n  }\n\n  /**\n   * Returns true if object has a style property or has it on a specified line\n   * @param {Number} lineIndex\n   * @return {Boolean}\n   */\n  styleHas(property, lineIndex: number): boolean {\n    if (this._styleMap && !this.isWrapping) {\n      const map = this._styleMap[lineIndex];\n      if (map) {\n        lineIndex = map.line;\n      }\n    }\n    return super.styleHas(property, lineIndex);\n  }\n\n  /**\n   * Returns true if object has no styling or no styling in a line\n   * @param {Number} lineIndex , lineIndex is on wrapped lines.\n   * @return {Boolean}\n   */\n  isEmptyStyles(lineIndex: number): boolean {\n    if (!this.styles) {\n      return true;\n    }\n    let offset = 0,\n      nextLineIndex = lineIndex + 1,\n      nextOffset,\n      shouldLimit = false;\n    const map = this._styleMap[lineIndex],\n      mapNextLine = this._styleMap[lineIndex + 1];\n    if (map) {\n      lineIndex = map.line;\n      offset = map.offset;\n    }\n    if (mapNextLine) {\n      nextLineIndex = mapNextLine.line;\n      shouldLimit = nextLineIndex === lineIndex;\n      nextOffset = mapNextLine.offset;\n    }\n    const obj =\n      typeof lineIndex === 'undefined'\n        ? this.styles\n        : { line: this.styles[lineIndex] };\n    for (const p1 in obj) {\n      for (const p2 in obj[p1]) {\n        if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {\n          // eslint-disable-next-line no-unused-vars\n          for (const p3 in obj[p1][p2]) {\n            return false;\n          }\n        }\n      }\n    }\n    return true;\n  }\n\n  /**\n   * @param {Number} lineIndex\n   * @param {Number} charIndex\n   * @private\n   */\n  _getStyleDeclaration(lineIndex: number, charIndex: number) {\n    if (this._styleMap && !this.isWrapping) {\n      const map = this._styleMap[lineIndex];\n      if (!map) {\n        return null;\n      }\n      lineIndex = map.line;\n      charIndex = map.offset + charIndex;\n    }\n    return super._getStyleDeclaration(lineIndex, charIndex);\n  }\n\n  /**\n   * @param {Number} lineIndex\n   * @param {Number} charIndex\n   * @param {Object} style\n   * @private\n   */\n  _setStyleDeclaration(lineIndex: number, charIndex: number, style: object) {\n    const map = this._styleMap[lineIndex];\n    lineIndex = map.line;\n    charIndex = map.offset + charIndex;\n\n    this.styles[lineIndex][charIndex] = style;\n  }\n\n  /**\n   * @param {Number} lineIndex\n   * @param {Number} charIndex\n   * @private\n   */\n  _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n    const map = this._styleMap[lineIndex];\n    lineIndex = map.line;\n    charIndex = map.offset + charIndex;\n    delete this.styles[lineIndex][charIndex];\n  }\n\n  /**\n   * probably broken need a fix\n   * Returns the real style line that correspond to the wrapped lineIndex line\n   * Used just to verify if the line does exist or not.\n   * @param {Number} lineIndex\n   * @returns {Boolean} if the line exists or not\n   * @private\n   */\n  _getLineStyle(lineIndex: number): boolean {\n    const map = this._styleMap[lineIndex];\n    return !!this.styles[map.line];\n  }\n\n  /**\n   * Set the line style to an empty object so that is initialized\n   * @param {Number} lineIndex\n   * @param {Object} style\n   * @private\n   */\n  _setLineStyle(lineIndex: number) {\n    const map = this._styleMap[lineIndex];\n    this.styles[map.line] = {};\n  }\n\n  /**\n   * Wraps text using the 'width' property of Textbox. First this function\n   * splits text on newlines, so we preserve newlines entered by the user.\n   * Then it wraps each line using the width of the Textbox by calling\n   * _wrapLine().\n   * @param {Array} lines The string array of text that is split into lines\n   * @param {Number} desiredWidth width you want to wrap to\n   * @returns {Array} Array of lines\n   */\n  _wrapText(lines: Array<any>, desiredWidth: number): Array<any> {\n    const wrapped = [];\n    this.isWrapping = true;\n    for (let i = 0; i < lines.length; i++) {\n      wrapped.push(...this._wrapLine(lines[i], i, desiredWidth));\n    }\n    this.isWrapping = false;\n    return wrapped;\n  }\n\n  /**\n   * Helper function to measure a string of text, given its lineIndex and charIndex offset\n   * It gets called when charBounds are not available yet.\n   * Override if necessary\n   * Use with {@link Textbox#wordSplit}\n   *\n   * @param {CanvasRenderingContext2D} ctx\n   * @param {String} text\n   * @param {number} lineIndex\n   * @param {number} charOffset\n   * @returns {number}\n   */\n  _measureWord(word, lineIndex: number, charOffset = 0): number {\n    let width = 0,\n      prevGrapheme;\n    const skipLeft = true;\n    for (let i = 0, len = word.length; i < len; i++) {\n      const box = this._getGraphemeBox(\n        word[i],\n        lineIndex,\n        i + charOffset,\n        prevGrapheme,\n        skipLeft\n      );\n      width += box.kernedWidth;\n      prevGrapheme = word[i];\n    }\n    return width;\n  }\n\n  /**\n   * Override this method to customize word splitting\n   * Use with {@link Textbox#_measureWord}\n   * @param {string} value\n   * @returns {string[]} array of words\n   */\n  wordSplit(value: string): string[] {\n    return value.split(this._wordJoiners);\n  }\n\n  /**\n   * Wraps a line of text using the width of the Textbox and a context.\n   * @param {Array} line The grapheme array that represent the line\n   * @param {Number} lineIndex\n   * @param {Number} desiredWidth width you want to wrap the line to\n   * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n   * @returns {Array} Array of line(s) into which the given text is wrapped\n   * to.\n   */\n  graphemeSplitForRectNotes(textstring: string): string[] {\n    const graphemes = [];\n    const words = textstring.split(/\\b/);\n    for (let i = 0; i < words.length; i++) {\n      // 检查单词是否全为拉丁字母，长度不大于16\n      if (/^[a-zA-Z]{1,16}$/.test(words[i])) {\n        graphemes.push(words[i]);\n      } else {\n        for (let j = 0; j < words[i].length; j++) {\n          graphemes.push(words[i][j]);\n        }\n      }\n    }\n    return graphemes;\n  }\n\n  _wrapLine(\n    _line,\n    lineIndex: number,\n    desiredWidth: number,\n    reservedSpace = 0\n  ): Array<any> {\n    const additionalSpace = this._getWidthOfCharSpacing(),\n      splitByGrapheme = this.splitByGrapheme,\n      graphemeLines = [],\n      words = splitByGrapheme\n        ? this.graphemeSplitForRectNotes(_line)\n        : this.wordSplit(_line),\n      infix = splitByGrapheme ? '' : ' ';\n\n    let lineWidth = 0,\n      line = [],\n      // spaces in different languages?\n      offset = 0,\n      infixWidth = 0,\n      largestWordWidth = 0,\n      lineJustStarted = true;\n    // fix a difference between split and graphemeSplit\n    if (words.length === 0) {\n      words.push([]);\n    }\n    desiredWidth -= reservedSpace;\n    // measure words\n    const data = words.map((word) => {\n      // if using splitByGrapheme words are already in graphemes.\n      word = splitByGrapheme ? word : this.graphemeSplitForRectNotes(word);\n      const width = this._measureWord(word, lineIndex, offset);\n      largestWordWidth = Math.max(width, largestWordWidth);\n      offset += word.length + 1;\n      return { word: word, width: width };\n    });\n    const maxWidth = Math.max(\n      desiredWidth,\n      largestWordWidth,\n      this.dynamicMinWidth\n    );\n    // layout words\n    offset = 0;\n    let i;\n    for (i = 0; i < words.length; i++) {\n      const word = data[i].word;\n      const wordWidth = data[i].width;\n      offset += word.length;\n\n      lineWidth += infixWidth + wordWidth - additionalSpace;\n      if (lineWidth > maxWidth && !lineJustStarted) {\n        graphemeLines.push(line);\n        line = [];\n        lineWidth = wordWidth;\n        lineJustStarted = true;\n      } else {\n        lineWidth += additionalSpace;\n      }\n\n      if (!lineJustStarted && !splitByGrapheme) {\n        line.push(infix);\n      }\n      if (word.length > 1) {\n        line = line.concat(word.split(''));\n      } else {\n        line = line.concat(word);\n      }\n\n      infixWidth = splitByGrapheme\n        ? 0\n        : this._measureWord([infix], lineIndex, offset);\n      offset++;\n      lineJustStarted = false;\n    }\n\n    i && graphemeLines.push(line);\n\n    if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n      this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n    }\n    return graphemeLines;\n  }\n\n  /**\n   * Detect if the text line is ended with an hard break\n   * text and itext do not have wrapping, return false\n   * @param {Number} lineIndex text to split\n   * @return {Boolean}\n   */\n  isEndOfWrapping(lineIndex: number): boolean {\n    if (!this._styleMap[lineIndex + 1]) {\n      // is last line, return true;\n      return true;\n    }\n    if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n      // this is last line before a line break, return true;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Detect if a line has a linebreak and so we need to account for it when moving\n   * and counting style.\n   * @return Number\n   */\n  missingNewlineOffset(lineIndex) {\n    if (this.splitByGrapheme) {\n      return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n    }\n    return 1;\n  }\n\n  /**\n   * Gets lines of text to render in the Textbox. This function calculates\n   * text wrapping on the fly every time it is called.\n   * @param {String} text text to split\n   * @returns {Array} Array of lines in the Textbox.\n   * @override\n   */\n  _splitTextIntoLines(text: string) {\n    const newText = super._splitTextIntoLines(text);\n    if (!this.fromCopy) {\n      if (\n        (this.obj_type === 'WBText' || this.obj_type === 'WBTextbox') &&\n        this.textLines &&\n        this.textLines.length > 1 &&\n        this.isEditing\n      ) {\n        this.oneLine = false;\n      } else {\n        this.oneLine = true;\n      }\n    } else {\n      this.oneLine = false;\n    }\n    if (\n      (this.obj_type === 'WBText' || this.obj_type === 'WBTextbox') &&\n      newText &&\n      newText.lines &&\n      this.oneLine &&\n      this.isEditing\n    ) {\n      if (newText.lines[0].length > 1) {\n        this.width =\n          this._measureWord(newText.lines[0], 0, 0) > this.width\n            ? this._measureWord(newText.lines[0], 0, 0) + 10\n            : this.width;\n      }\n    }\n    const graphemeLines = this._wrapText(newText.lines, this.width);\n    const lines = new Array(graphemeLines.length);\n    for (let i = 0; i < graphemeLines.length; i++) {\n      lines[i] = graphemeLines[i].join('');\n    }\n    newText.lines = lines;\n    newText.graphemeLines = graphemeLines;\n    return newText;\n  }\n\n  getMinWidth() {\n    return Math.max(this.minWidth, this.dynamicMinWidth);\n  }\n\n  _removeExtraneousStyles() {\n    const linesToKeep = {};\n    for (const prop in this._styleMap) {\n      if (this._textLines[prop]) {\n        linesToKeep[this._styleMap[prop].line] = 1;\n      }\n    }\n    for (const prop in this.styles) {\n      if (!linesToKeep[prop]) {\n        delete this.styles[prop];\n      }\n    }\n  }\n  addControls() {\n    function renderCustomControl(ctx, left, top, fabricObject) {\n      const styleOverride1 = {\n        cornerSize: 10,\n        cornerStrokeColor: this.isHovering ? '#31A4F5' : '#b3cdfd',\n        cornerColor: this.isHovering ? '#31A4F5' : '#b3cdfd',\n        lineWidth: 2,\n      };\n      renderCircleControl.call(\n        fabricObject,\n        ctx,\n        left,\n        top,\n        styleOverride1,\n        fabricObject\n      );\n    }\n\n    this.controls.mtaStart = new Control({\n      x: 0,\n      y: -0.5,\n      offsetX: 0,\n      offsetY: -20,\n      render: renderCustomControl,\n      mouseDownHandler: (eventData, transformData) => {\n        this.controlMousedownProcess(transformData, 0.0, -0.5);\n        return true;\n      },\n      name: 'mtaStart',\n    });\n\n    this.controls.mbaStart = new Control({\n      x: 0,\n      y: 0.5,\n      offsetX: 0,\n      offsetY: 20,\n      render: renderCustomControl,\n      mouseDownHandler: (eventData, transformData) => {\n        this.controlMousedownProcess(transformData, 0.0, 0.5);\n        return true;\n      },\n      name: 'mbaStart',\n    });\n\n    this.controls.mlaStart = new Control({\n      x: -0.5,\n      y: 0,\n      offsetX: -20,\n      offsetY: 0,\n      render: renderCustomControl,\n      mouseDownHandler: (eventData, transformData) => {\n        this.controlMousedownProcess(transformData, -0.5, 0.0);\n        return true;\n      },\n      name: 'mlaStart',\n    });\n\n    this.controls.mraStart = new Control({\n      x: 0.5,\n      y: 0,\n      offsetX: 20,\n      offsetY: 0,\n      render: renderCustomControl,\n      mouseDownHandler: (eventData, transformData) => {\n        this.controlMousedownProcess(transformData, 0.5, 0.0);\n        return true;\n      },\n      name: 'mraStart',\n    });\n  }\n\n  controlMousedownProcess(transformData, rx, ry) {\n    return;\n  }\n  /**\n   * Returns object representation of an instance\n   * @method toObject\n   * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n   * @return {Object} object representation of an instance\n   */\n\n  getObject() {\n    const object = {};\n\n    const keys = [\n      '_id', // string, the id of the object\n      'angle', //  integer, angle for recording rotating\n      'backgroundColor', // string,  background color, works when the image is transparent\n      'fill', // the font color\n      'width', // integer, width of the object\n      'height', // integer, height of the object\n      'left', // integer left for position\n      'lines', // array, the arrows array [{…}]\n      'locked', // boolean, lock status for the widget， this is connected to lock\n      'lockMovementX', // boolean, lock the verticle movement\n      'lockMovementY', // boolean, lock the horizontal movement\n      'lockScalingFlip', // boolean,  make it can not be inverted by pulling the width to the negative side\n      'obj_type', // object type\n      'originX', // string, Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'originY', // string, Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'scaleX', // nunber, Object scale factor (horizontal)\n      'scaleY', // number, Object scale factor (vertical)\n      'selectable', // boolean, When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection). But events still fire on it.\n      'top', // integer, Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n      'userNo', // string, the unique id for the user, one user id could open mutiple browser, each browser has unique user no\n      'userId', // string, user identity\n      'whiteboardId', // whiteboard id, string\n      'zIndex', // the index for the object on whiteboard, integer\n      'version', // version of the app, string\n      'isPanel', // is this a panel, boolean\n      'panelObj', // if this is a panel, the id of the panel, string\n      'relationship', // array, viewporttransform\n      'subObjList', // [\"5H9qYfNGt4vizhcuS\"] array list _id for sub objects\n      'fontFamily', // string, font family\n      'fontSize', // integer, font size\n      'fontWeight', // integer, font weight\n      'lineHeight', // integer, font height\n      'text', // string, text\n      'textAlign', // string, alignment\n      'editable',\n      'shapeScaleX',\n      'shapeScaleY',\n      'maxHeight',\n      'tempTop',\n      'fixedScaleChange',\n      'preTop',\n    ];\n    keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\n  }\n\n  toObject(propertiesToInclude: Array<any>): object {\n    return super.toObject(\n      ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude)\n    );\n  }\n  /**extend function for fronted */\n  checkTextboxChange() {}\n  InitializeEvent() {\n    const self = this;\n\n    self.on(EventName.EDITINGENTERED, () => {\n      // if it is in draw widget mode, then skip update\n      if (canvas.drawTempWidget) return;\n\n      self.originX = self.textAlign;\n\n      if (self.textAlign === TextAlign.LEFT) {\n        self.left -= (self.width * self.scaleX) / 2;\n      }\n\n      if (self.textAlign === TextAlign.RIGHT) {\n        self.left += (self.width * self.scaleX) / 2;\n      }\n\n      if (self.obj_type === WidgetType.WBText) {\n        self.originY = 'top';\n\n        self.top -= (self.height * self.scaleY) / 2;\n\n        self.tempTop = self.top;\n\n        if (self.text === 'Type here...') {\n          self.selectAll();\n\n          self.text = '';\n\n          self.hiddenTextarea.value = '';\n\n          self.dirty = true;\n\n          self.fill = 'rgb(0, 0, 0)';\n\n          canvas.requestRenderAll();\n        }\n      }\n    });\n\n    self.on(EventName.EDITINGEXITED, () => {\n      // if it is in draw widget mode, then skip update\n      if (canvas.drawTempWidget) return;\n\n      if (self.text === '' && self.obj_type === WidgetType.WBText) {\n        canvas.removeWidget(self);\n\n        return;\n      }\n\n      self.originX = Origin.Center;\n\n      self.originY = Origin.Center;\n\n      if (self.textAlign === Origin.Left) {\n        self.left += (self.width * self.scaleX) / 2;\n      }\n\n      if (self.textAlign === Origin.Right) {\n        self.left -= (self.width * self.scaleX) / 2;\n      }\n\n      if (self.obj_type === WidgetType.WBText) {\n        self.top = self.tempTop + (self.height * self.scaleY) / 2;\n        self.tempTop = self.top;\n      }\n    });\n\n    self.on(EventName.MODIFIED, () => {\n      self.checkTextboxChange(self);\n\n      canvas.requestRenderAll();\n    });\n    self.on(EventName.CHANGED, () => {\n      if (self.styles[0]) {\n        self.styles = {};\n\n        self.canvas.requestRenderAll();\n      }\n    });\n  }\n\n  changeWidth(eventData, transform, x, y) {\n    store.dispatch(handleWidgetMenuDisplay(false));\n\n    var target = transform.target,\n      localPoint = fabric.controlsUtils.getLocalPoint(\n        transform,\n        transform.originX,\n        transform.originY,\n        x,\n        y\n      ),\n      strokePadding =\n        target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n      multiplier = isTransformCentered(transform) ? 2 : 1,\n      oldWidth = target.width,\n      newWidth =\n        Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding,\n      shapeScaleX =\n        Math.abs(target.aCoords['tl'].x - target.aCoords['tr'].x) / 138;\n    target.set('shapeScaleX', shapeScaleX);\n    target.set('width', Math.max(newWidth, 0));\n\n    target.initDimensions();\n\n    target.set('dirty', true);\n\n    if (target.obj_type === 'WBTextbox' || target.obj_type === 'WBText') {\n      target.set('fixedScaleChange', false);\n    }\n\n    if (target.obj_type !== 'WBText') {\n      target.saveData('MODIFIED', ['width']);\n    }\n\n    return oldWidth !== newWidth;\n  }\n\n  resetResizeControls() {\n    const self = this;\n    const textAlign = self.textAlign;\n\n    if (\n      self.obj_type === 'WBText' &&\n      (textAlign === 'left' || textAlign === 'center')\n    ) {\n      self.setControlVisible('ml', false);\n      self.setControlVisible('mr', true);\n    }\n\n    if (self.obj_type === 'WBText' && textAlign === 'right') {\n      self.setControlVisible('ml', true);\n      self.setControlVisible('mr', false);\n    }\n    if (self.canvas) self.canvas.requestRenderAll();\n  }\n}\n\nclassRegistry.setClass(Textbox);\nclassRegistry.getSVGClass(Textbox, 'textbox');\nexport enum EventName {\n  MODIFIED = 'modified',\n  CHANGED = 'changed',\n  TRIPLECLICK = 'tripleclick',\n  DBLCLICK = 'dblclick',\n  MOUSEOUT = 'mouseout',\n  EDITINGENTERED = 'editing:entered',\n  MOUSEOVER = 'mouseover',\n  EDITINGEXITED = 'editing:exited',\n  INITIALIZE = 'initialize',\n  INSERTNEWSTYLEBLOCK = 'insertNewStyleBlock',\n  RENDER = '_render',\n  SET = 'set',\n  OBJECTMOVING = 'object:moving',\n  OBJECTMOVED = 'object:moved',\n  SELECTIONCREATED = 'selection:created',\n  SELECTIONCLEARED = 'selection:cleared',\n  SELECTED = 'selected',\n  DESELECTED = 'deselected',\n  MOUSEDBLCLICK = 'mousedblclick',\n  MOUSEUP = 'mouseup',\n  MOUSE_UP = 'mouse:up',\n  TOUCHSTART = 'touchstart',\n  SETSRC = 'setSrc',\n  REMOVED = 'removed',\n  MOUSEDOWN = 'mousedown',\n  MOVING = 'moving',\n  SELECTABLE = 'selectable',\n  EVENTED = 'evented',\n  FILL = 'fill',\n  ROTATING = 'rotating',\n  SCALING = 'scaling',\n  ADDED = 'added',\n  OBJECTSCALING = 'object:scaling',\n  OBJECTSCALED = 'object:scaled',\n  OBJECTROTATING = 'object:rotating',\n  OBJECTROTATED = 'object:rotated',\n  SELECTIONUPDATED = 'selection:updated',\n  DRAGENTER = 'dragenter',\n  DRAGLEAVE = 'dragleave',\n\n  CANVAS_MOUSE_DOWN = 'canvas:mousedown',\n  CANVAS_MOUSE_DOWN_BEFORE = 'canvas:mousedownbefore',\n  CANVAS_MOUSE_MOVE = 'canvas:mousemove',\n  CANVAS_MOUSE_UP = 'canvas:mouseup',\n  CANVAS_MOUSE_OUT = 'canvas:mouseout',\n  CANVAS_SCROLL = 'canvas:scroll',\n  DOCUMENT_KEY_UP = 'document:keyup',\n  DOCUMENT_KEY_DOWN = 'document:keydown',\n  DOCUMENT_MOUSE_DOWN = 'mousedown',\n  DOCUMENT_MOUSE_UP = 'mouseup',\n  DOCUMENT_MOUSE_MOVE = 'mousemove',\n  DOCUMENT_MOUSE_WHEEL = 'wheel',\n  DOCUMENT_DRAG_OVER = 'dragover',\n  DOCUMENT_PAUSE = 'pause',\n  DOCUMENT_RESUME = 'resume',\n  DOCUMENT_VISIBILITY_CHANGE = 'visibilitychange',\n  DOCUMENT_PASTE = 'paste',\n  WINDOW_BEFORE_UNLOAD = 'beforeunload',\n  WINDOW_MOUSE_MOVE = 'mousemove',\n  WINDOW_GESTURE_START = 'gesturestart',\n  WINDOW_GESTURE_CHANGE = 'gesturechange',\n  A_CTRL_KEY_DOWN = 'a_ctrl:keydown',\n  B_CTRL_KEY_DOWN = 'b_ctrl:keydown',\n  D_CTRL_KEY_DOWN = 'd_ctrl:keydown',\n  G_CTRL_SHIFT_KEY_DOWN = 'g_ctrl_shift:keydown',\n  G_CTRL_KEY_DOWN = 'g_ctrl:keydown',\n  T_KEY_DOWN = 't:keydown',\n  P_KEY_DOWN = 'p:keydown',\n  S_KEY_UP = 's:keyup',\n  S_KEY_DOWN = 's:keydown',\n  O_KEY_UP = 'o:keyup',\n  O_KEY_DOWN = 'o:keydown',\n  R_KEY_UP = 'r:keyup',\n  R_KEY_DOWN = 'r:keydown',\n  F_KEY_UP = 'f:keyup',\n  F_KEY_DOWN = 'f:keydown',\n  L_KEY_UP = 'l:keyup',\n  L_KEY_DOWN = 'l:keydown',\n\n  Z_CTRL_KEY_UP = 'z_ctrl:keyup',\n\n  Z_CTRL_KEY_DOWN = 'z_ctrl:keydown',\n\n  Z_CTRL_SHIFT_KEY_UP = 'z_ctrl_shift:keyup',\n\n  Z_CTRL_SHIFT_KEY_DOWN = 'z_ctrl_shift:keydown',\n\n  SPACE_KEY_UP = 'space:keyup',\n\n  SPACE_KEY_DOWN = 'space:keydown',\n\n  SHIFT_KEY_UP = 'shift:keyup',\n\n  SHIFT_KEY_DOWN = 'shift:keydown',\n\n  SLASH_SHIFT_KEY_DOWN = 'slash_shift:keydown',\n\n  ESC_KEY_DOWN = 'esc:keydown',\n\n  DELETE_KEY_DOWN = 'delete:keydown',\n\n  CTRL_SHIFT_FIVE_KEY_DOWN = 'ctrl_shift_five:keydown',\n\n  CTRL_PLUS_KEY_DOWN = 'ctrl_plus:keydown',\n\n  CTRL_MINUS_KEY_DOWN = 'ctrl_minus:keydown',\n\n  CTRL_ZERO_KEY_DOWN = 'ctrl_zero:keydown',\n\n  UP_DOWN_LEFT_RIGHT_KEY_DOWN = 'up_down_left_right:keydown',\n\n  CANVAS_BEFORE_SELECTION_CLEARED = 'before:selection:cleared',\n\n  CANVAS_SELECTION_UPDATED = 'selection:updated',\n\n  CANVAS_SELECTION_CREATED = 'selection:created',\n\n  SELECTION_CLEARED = 'selection:cleared',\n\n  TEXT_CHANGED = 'text:changed',\n\n  BEFORE_RENDER = 'before:render',\n\n  AFTER_RENDER = 'after:render',\n\n  MOUSE_DOWN_BEFORE = 'mouse:down:before',\n  MOUSE_DOWN = 'mouse:down',\n\n  TEXT_EDITING_EXISTED = 'text:editing:exited',\n\n  MOUSE_DBCLICK = 'mouse:dblclick',\n\n  HAMMER_TAP1 = 'tap1',\n\n  HAMMER_DOUBLE_TAP = 'doubletap',\n\n  HAMMER_PAN1_START = 'pan1start',\n\n  HAMMER_PAN1_MOVE = 'pan1move',\n\n  HAMMER_PAN1_END = 'pan1end',\n\n  HAMMER_PAN3 = 'pan3',\n\n  HAMMER_PINCH_START = 'pinchstart',\n\n  HAMMER_PINCH_MOVE = 'pinchmove',\n\n  RETURN_DEFAULT_ZOOMM = 'returndefaultzoom',\n\n  MOUSE_MOVE = 'mouse:move',\n  RESIZING = 'resizing',\n}\n\nexport enum TextAlign {\n  LEFT = 'left',\n  CENTER = 'center',\n  RIGHT = 'right',\n  JUSTIFY = 'justify',\n  JUSTIFYLEFT = 'justify-left',\n  JUSTIFYCENTER = 'justify-center',\n  JUSTIFYRIGHT = 'justify-right',\n}\nexport enum WidgetType {\n  WBActiveSelection = 'activeSelection',\n  WBArrow = 'WBArrow',\n  WBCircle = 'WBCircle',\n  WBCircleNotes = 'WBCircleNotes',\n  WBFile = 'WBFile',\n  WBGroup = 'WBGroup',\n  WBImage = 'WBImage',\n  WBIText = 'WBIText',\n  WBObject = 'WBObject',\n  WBPath = 'WBPath',\n  WBPolyline = 'WBPolyline',\n  WBLine = 'WBLine',\n  WBRdRectPanel = 'WBRdRectPanel',\n  WBRect = 'WBRect',\n  WBRectNotes = 'WBRectNotes',\n  WBRectPanel = 'WBRectPanel',\n  WBShape = 'WBShape',\n  WBShapeNotes = 'WBShapeNotes',\n  WBTriangle = 'WBTriangle',\n  WBUrlImage = 'WBUrlImage',\n  WBText = 'WBText',\n  WBTextbox = 'WBTextbox',\n  Common = 'common',\n}\n\nexport enum NoteType {\n  RECT = 'rect',\n  SQUARE = 'square',\n  CIRCLE = 'circle',\n  TEXT = 'text',\n}\n\nexport enum Origin {\n  Left = 'left',\n  Right = 'right',\n  Center = 'center',\n}\nexport enum ModifiedField {\n  Width = 'width',\n  Height = 'height',\n  Left = 'left',\n  Top = 'top',\n  ShapeScalex = 'shapeScaleX',\n  ScaleX = 'scaleX',\n  ScaleY = 'scaleY',\n  FlipX = 'flipX',\n  FLipY = 'flipY',\n  MaxHeight = 'maxHeight',\n  FixedScaleChange = 'fixedScaleChange',\n  Lines = 'lines',\n  PanelObj = 'panelObj',\n  Relationship = 'relationship',\n  ZIndex = 'zIndex',\n  x1 = 'x1',\n  x2 = 'x2',\n  y1 = 'y1',\n  y2 = 'y2',\n  ConnectorStart = 'connectorStart',\n  ConnectorEnd = 'connectorEnd',\n  Fill = 'fill',\n  Text = 'text',\n}\nexport enum SaveAction {\n  MOVED = 'MOVED',\n  SCALED = 'SCALED',\n  ADDED = 'ADDED',\n  PASTE = 'PASTE',\n  REMOVED = 'REMOVED',\n  MODIFIED = 'MODIFIED',\n  UNBIND = 'UNBIND',\n  BIND = 'BIND',\n  ROTATED = 'ROTATED',\n}\n"],"names":["textboxDefaultValues","minWidth","dynamicMinWidth","lockScalingFlip","noScaleCache","_wordJoiners","splitByGrapheme","obj_type","Textbox","IText","getDefaults","_objectSpread","ownDefaults","constructor","text","options","addControls","InitializeEvent","resetResizeControls","_getTotalLineHeights","_textLines","reduce","total","_line","index","getHeightOfLine","initDimensions","initialized","isEditing","initDelayedCursor","_clearCache","_styleMap","_generateStyleMap","_splitText","width","_set","textAlign","indexOf","enlargeSpaces","height","calcTextHeight","textInfo","realLineCount","realLineCharCount","charCount","map","i","graphemeLines","length","graphemeText","_reSpaceAndTab","test","line","offset","styleHas","property","lineIndex","isWrapping","isEmptyStyles","styles","nextLineIndex","nextOffset","shouldLimit","mapNextLine","obj","p1","p2","p3","_getStyleDeclaration","charIndex","_setStyleDeclaration","style","_deleteStyleDeclaration","_getLineStyle","_setLineStyle","_wrapText","lines","desiredWidth","wrapped","push","_wrapLine","_measureWord","word","charOffset","arguments","undefined","prevGrapheme","skipLeft","len","box","_getGraphemeBox","kernedWidth","wordSplit","value","split","graphemeSplitForRectNotes","textstring","graphemes","words","j","reservedSpace","additionalSpace","_getWidthOfCharSpacing","infix","lineWidth","infixWidth","largestWordWidth","lineJustStarted","data","Math","max","maxWidth","wordWidth","concat","isEndOfWrapping","missingNewlineOffset","_splitTextIntoLines","newText","fromCopy","textLines","oneLine","Array","join","getMinWidth","_removeExtraneousStyles","linesToKeep","prop","renderCustomControl","ctx","left","top","fabricObject","styleOverride1","cornerSize","cornerStrokeColor","isHovering","cornerColor","renderCircleControl","call","controls","mtaStart","Control","x","y","offsetX","offsetY","render","mouseDownHandler","eventData","transformData","controlMousedownProcess","name","mbaStart","mlaStart","mraStart","rx","ry","getObject","object","keys","forEach","key","toObject","propertiesToInclude","checkTextboxChange","self","on","EventName","EDITINGENTERED","canvas","drawTempWidget","originX","TextAlign","LEFT","scaleX","RIGHT","WidgetType","WBText","originY","scaleY","tempTop","selectAll","hiddenTextarea","dirty","fill","requestRenderAll","EDITINGEXITED","removeWidget","Origin","Center","Left","Right","MODIFIED","CHANGED","changeWidth","transform","store","dispatch","handleWidgetMenuDisplay","target","localPoint","fabric","controlsUtils","getLocalPoint","strokePadding","strokeWidth","strokeUniform","multiplier","isTransformCentered","oldWidth","newWidth","abs","shapeScaleX","aCoords","set","saveData","setControlVisible","_defineProperty","textLayoutProperties","classRegistry","setClass","getSVGClass"],"mappings":"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"}