{"version":3,"file":"BX_ShapeNotes.mjs","sources":["../../../src/shapes/BX_ShapeNotes.ts"],"sourcesContent":["//@ts-nocheck\nimport { getFabricDocument } from '../env';\nimport { TClassProperties } from '../typedefs';\nimport { Textbox } from './Textbox';\nimport { classRegistry } from '../ClassRegistry';\nimport { createRectNotesDefaultControls } from '../controls/commonControls';\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 shapeNotesDefaultValues: Partial<TClassProperties<ShapeNotes>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  lockScalingFlip: true,\n  noScaleCache: false,\n  _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: true,\n  obj_type: 'WBShapeNotes',\n  height: 138,\n  maxHeight: 138,\n  textAlign: 'center',\n  uniformScaling: false,\n  centeredScaling: false,\n  verticalAlign: 'middle',\n  cornerStrokeColor: 'gray',\n  cornerStyle: 'circle',\n  cornerColor: 'white',\n  transparentCorners: false,\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 ShapeNotes extends Textbox {\n  /**selectable\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare _id: string;\n\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: string;\n\n  declare userId: string;\n\n  declare timestamp: Date;\n\n  declare verticalAlign: string;\n\n  declare zIndex: number;\n\n  declare lines: object[];\n\n  declare relationship: object[];\n\n  declare icon: string;\n\n  public extendPropeties = [\n    'obj_type',\n    'whiteboardId',\n    'userId',\n    'timestamp',\n    'zIndex',\n    'locked',\n    'verticalAlign',\n    'lines',\n    '_id',\n    'zIndex',\n    'relationship',\n    'icon',\n  ];\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  /**\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 = [...Textbox.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = shapeNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createRectNotesDefaultControls(),\n      ...ShapeNotes.ownDefaults,\n    };\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.__skipDimension) {\n      return;\n    }\n\n    this.clearContextTop();\n    this._clearCache();\n\n    const newLines = this._splitText();\n\n    if (this.isEditing) {\n      this.initDelayedCursor();\n\n      const preHeight = this.height;\n      const total = this._getTotalLineHeights() + this.getTopOffset();\n      this.height = Math.max(this.maxHeight, total);\n      const yOffset = this.height - preHeight;\n      this.top += yOffset / 2;\n    } else if (this._textLines && this._textLines.length > 0) {\n      if (this.height === this.maxHeight) {\n        /**\n         * scaling\n         * total height of _textLines < maxHeight\n         */\n        let lineHeights = 0;\n        const tmp = [];\n        for (let i = 0, len = this._textLines.length; i < len; i++) {\n          const heightOfLine = this.getHeightOfLine(i);\n          lineHeights += heightOfLine;\n          if (lineHeights <= this.height - this.getTopOffset()) {\n            tmp.push(this._textLines[i]);\n          }\n        }\n        if (tmp.length > 0) {\n          const preLines = this._textLines.length;\n          this._textLines = tmp;\n          if (tmp.length !== preLines) {\n            // need add ellipsis at last line\n            const lastIndex = this._textLines.length - 1,\n              lastLine = this._textLines[lastIndex];\n            lastLine.pop();\n            lastLine.pop();\n            lastLine.pop();\n            lastLine.push('.');\n            lastLine.push('.');\n            lastLine.push('.');\n          }\n        }\n      } else if (this.height > this.maxHeight) {\n        /**\n         * height > maxHeight\n         * exit editing and _textlines total height > maxHeight\n         */\n        // console.log('### exit editing & initDimensions');\n      }\n    }\n\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(newLines);\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\n    return this.height;\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  /** This is the method of char split */\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  textSplitTextIntoLines(text: string) {\n    const lines = text.split(this._reNewline),\n      newLines = new Array<string[]>(lines.length),\n      newLine = ['\\n'];\n    let newText: string[] = [];\n    for (let i = 0; i < lines.length; i++) {\n      newLines[i] = this.graphemeSplit(lines[i]);\n      newText = newText.concat(newLines[i], newLine);\n    }\n    newText.pop();\n    return {\n      _unwrappedLines: newLines,\n      lines: lines,\n      graphemeText: newText,\n      graphemeLines: newLines,\n    };\n  }\n  _splitTextIntoLines(text) {\n    const width = this.width - this.getLeftOffset();\n\n    const newText = this.textSplitTextIntoLines(text),\n      graphemeLines = this._wrapText(newText.lines, width),\n      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\n  getObject() {\n    const object = {};\n    const keys = [\n      '_id',\n      'angle',\n      'backgroundColor',\n      'fill',\n      'fontFamily',\n      'fontSize',\n      'height',\n      'width',\n      'left',\n      'lines', // the arrows array [{…}]\n      'lockUniScaling',\n      'locked',\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      'fontWeight',\n      'lineHeight',\n      'obj_type',\n      'originX',\n      'originY',\n      'panelObj', // the parent panel string\n      'relationship', // relationship with panel for transform  [1.43, 0, 0, 1.43, 7.031931057304291, 16.531768328466796]\n      'scaleX',\n      'scaleY',\n      'selectable',\n      'text',\n      'textAlign',\n      'top',\n      'userNo',\n      'userId',\n      'whiteboardId',\n      'zIndex',\n      'version',\n      'isPanel',\n      'editable',\n      'path',\n      'strokeWidth',\n      'strokeUniform', // set up to true then strokewidth doesn't change when scaling\n      'stroke', // border color\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      'icon',\n      'lineWidth',\n      'fixedLineWidth',\n      'aCoords',\n      'shapeScaleX',\n      'shapeScaleY',\n      'verticalAlign',\n      'maxHeight',\n      'shadow',\n      'subObjs',\n    ];\n    keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\n  }\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  toObject(propertiesToInclude: Array<any>): object {\n    return super.toObject(\n      [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(\n        propertiesToInclude\n      )\n    );\n  }\n  /**boardx custom function */\n  getObjectsIntersected() {\n    const objects = this.canvas._getIntersectedObjects(this);\n    objects.filter((obj) => {\n      return obj._id !== this._id && obj.obj_type !== 'WBArrow';\n    });\n    return objects;\n  }\n\n  setLockedShadow(locked) {\n    if (locked) {\n      this.shadow = new fabric.Shadow({\n        blur: 2,\n        offsetX: 0,\n        offsetY: 0,\n        color: 'rgba(0, 0, 0, 0.5)',\n      });\n    } else {\n      this.shadow = new fabric.Shadow({\n        blur: 8,\n        offsetX: 0,\n        offsetY: 4,\n        color: 'rgba(0,0,0,0.04)',\n      });\n    }\n  }\n\n  /* caculate cusor positon in the middle of the textbox */\n  getCenteredTop(rectHeight) {\n    const textHeight = this.height;\n    return (rectHeight - textHeight) / 2;\n  }\n\n  _renderBackground(ctx) {\n    if (!this.backgroundColor) {\n      return;\n    }\n    const dim = this._getNonTransformedDimensions();\n    ctx.fillStyle = this.backgroundColor;\n\n    //ctx.shadowBlur = 20;\n    // ctx.shadowOffsetX = 2 * this.scaleX * canvas.getZoom();\n    // ctx.shadowOffsetY = 6 * this.scaleY * canvas.getZoom();\n    //ctx.shadowColor = 'rgba(0,0,0,0.1)';\n    // ctx.shadowColor = 'rgba(0,0,0,1)';\n\n    //ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n\n    // if there is background color no other shadows\n    // should be casted\n    //this._removeShadow(ctx);\n    /*\n      0: rect\n      1: diamond\n      2: rounded rect\n      3: circle\n      4: hexagon\n      5: triangle\n      6: parallelogramIcon\n      7: star\n      8: cross\n      9: leftside right triangle\n      10: rightside right triangle\n      11: topside semicirle circle\n      12: top-left quarter circle\n      13: Constallation Rect\n      14: Constellation Round\n    */\n\n    const shapeArray = [\n      'M-69,-69L69,-69 69,69 -69,69z',\n      'm-69,0 l69,-69 69,69 -69,69 -69,-69z',\n      'm51.14083,-70l-101.28163,0c-10.96794,0 -19.8592,8.76514 -19.8592,19.5775l0,99.84501c0,10.81235 8.89125,19.5775 19.8592,19.5775l101.28163,0c10.96792,0 19.8592,-8.76516 19.8592,-19.5775l0,-99.84501c0,-10.81237 -8.89127,-19.5775 -19.8592,-19.5775z',\n      'M-69,0a69,69 0 1,0 138,0a69,69 0 1,0 -138,0',\n      'm-60,-35.1325l60.3923,-34.8675l60.3923,34.8675l0,69.73493l-60.3923,34.86799l-60.3923,-34.86799l0,-69.73493z',\n      'm-71,70.74999l70.5,-139.74999l70.5,139.74999l-140.99999,0z',\n      'm-70.21501,70.82836l28,-140.00001l112,0l-28,140.00001l-112,0z',\n      'm-69,-16.38404l52.71168,0l16.28832,-52.61596l16.28833,52.61596l52.71167,0l-42.64457,32.51808l16.28916,52.61596l-42.64459,-32.51897l-42.64458,32.51897l16.28916,-52.61596l-42.64458,-32.51808z',\n      'm-70,-23.40091l46.59909,0l0,-46.59909l47.80182,0l0,46.59909l46.59909,0l0,47.80182l-46.59909,0l0,46.59909l-47.80182,0l0,-46.59909l-46.59909,0l0,-47.80182z',\n      'm69,69l-138,0l0,-138l138,138z',\n      'm-69,70l139,0l0,-139l-139,139z',\n      'm70.87066,36.0449l-140.87066,-0.00205c5.11499,-39.91161 35.12907,-69.54285 70.43538,-69.54285c35.30263,0 65.31841,29.63308 70.43528,69.5449z',\n      'm-69,68.5488c9.55735,-78.68015 68.34233,-137.52537 137.9372,-138.04693l0,90.66818l0,47.38267l-137.9372,-0.00392z',\n      'm30.81958,0.12008l37.68039,34.8592l0,35.52068l-139.99994,0l0,-141.99993l139.99994,0l0,34.81153l-37.68601,36.28619l-0.27367,0.26402l0.2793,0.25831l-0.00001,0z',\n      'm29.19742,0.94831c0.00348,0.00417 0.00696,0.00835 0.01948,0.00209c0.01113,0.01879 0.02435,0.03757 0.03896,0.05566l0,0l0.00139,0.0007l0.00765,0.00557l0.06123,0.04731l0.48914,0.37851l3.91657,3.02875l31.11617,24.06231c-10.70812,24.39489 -35.07657,41.43186 -63.42351,41.43186c-38.23501,0 -69.23061,-30.9958 -69.23061,-69.23053c0,-38.23494 30.9956,-69.23053 69.23061,-69.23053c28.07281,0 52.24365,16.70877 63.10832,40.72522c-17.77729,13.90775 -26.59983,20.96711 -30.9784,24.5504c-2.19729,1.79825 -3.27854,2.72365 -3.8122,3.20102c-0.26509,0.23754 -0.40077,0.36953 -0.47244,0.44593c-0.0334,0.03597 -0.06401,0.07132 -0.08767,0.1068c-0.00974,0.01524 -0.0334,0.05267 -0.04801,0.10465c-0.00765,0.02721 -0.01739,0.07466 -0.01113,0.13338c0.00348,0.03131 0.01113,0.0661 0.02714,0.10228c0.00417,0.01044 0.00905,0.02018 0.01461,0.02992c0.00417,0.00765 0.00905,0.016 0.01461,0.02366c0.00557,0.00835 0.01531,0.02087 0.01809,0.02505z',\n    ];\n\n    ctx.save();\n\n    const svgPath = new Path2D(shapeArray[this.icon]);\n    const m = getFabricDocument()\n      .createElementNS('http://www.w3.org/2000/svg', 'svg')\n      .createSVGMatrix();\n    m.a = this.width / 138;\n    m.b = 0;\n    m.c = 0;\n    m.d = this.height / 138;\n    m.e = 0;\n    m.f = 0;\n    const path = new Path2D();\n    path.addPath(svgPath, m);\n    // ctx.lineWidth = this.lineWidth / (this.width / 138 + this.height / 138) / 2;\n    ctx.lineWidth = this.lineWidth;\n    ctx.strokeStyle = this.stroke;\n    ctx.stroke(path);\n    ctx.fillStyle = this.backgroundColor;\n    ctx.fill(path);\n    ctx.restore();\n  }\n  getTopOffset() {\n    let tOffset = 0;\n    switch (this.icon) {\n      case 0:\n      case 2:\n        tOffset = 40;\n        break;\n      case 1:\n      case 3:\n      case 5:\n        tOffset = this.height / 2;\n        break;\n      case 4:\n        tOffset = this.height / 3;\n        break;\n      default:\n    }\n    return tOffset;\n  }\n  getLeftOffset() {\n    let lOffset = 0;\n    switch (this.icon) {\n      case 0:\n      case 2:\n      case 4:\n        lOffset = 40;\n        break;\n      case 1:\n      case 3:\n      case 5:\n        lOffset = this.width / 2;\n        break;\n      default:\n    }\n    return lOffset;\n  }\n  _getTopOffset() {\n    switch (this.verticalAlign) {\n      case 'middle':\n        return -this._getTotalLineHeight() / 2;\n      case 'bottom':\n        return this.height / 2 - this._getTotalLineHeight();\n      default:\n        return -this.height / 2;\n    }\n  }\n  _getTotalLineHeight() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _renderText(ctx) {\n    ctx.shadowOffsetX = ctx.shadowOffsetY = ctx.shadowBlur = 0;\n    ctx.shadowColor = '';\n\n    if (this.paintFirst === 'stroke') {\n      this._renderTextStroke(ctx);\n      this._renderTextFill(ctx);\n    } else {\n      this._renderTextFill(ctx);\n      this._renderTextStroke(ctx);\n    }\n  }\n  calcTextHeight() {\n    let lineHeight;\n    let height = 0;\n    for (let i = 0, len = this._textLines.length; i < len; i++) {\n      lineHeight = this.getHeightOfLine(i);\n      height += i === len - 1 ? lineHeight / this.lineHeight : lineHeight;\n    }\n\n    const desiredHeight = this.height * (100 / 138);\n\n    if (height > desiredHeight) {\n      this.set('fontSize', this.fontSize - 2);\n      //@ts-ignore\n      this._splitTextIntoLines(this.text);\n      height = this.maxHeight;\n      return Math.max(height, this.height);\n    }\n    if (\n      height < this.maxHeight &&\n      this.maxHeight - height > 60 &&\n      this.fontSize < 24\n    ) {\n      this.fontSize += 2;\n      //@ts-ignore\n      this._splitTextIntoLines(this.text.trim());\n\n      return Math.max(height, this.height);\n    }\n\n    this.height = this.maxHeight;\n  }\n  _renderTextCommon(ctx, method) {\n    ctx.save();\n    let lineHeights = 0;\n    const left = this._getLeftOffset();\n    const top = this._getTopOffset();\n    const offsets = this._applyPatternGradientTransform(\n      ctx,\n      method === 'fillText' ? this.fill : this.stroke\n    );\n\n    for (let i = 0, len = this._textLines.length; i < len; i++) {\n      const heightOfLine = this.getHeightOfLine(i);\n      const maxHeight = heightOfLine / this.lineHeight;\n      const leftOffset = this._getLineLeftOffset(i);\n      this._renderTextLine(\n        method,\n        ctx,\n        this._textLines[i],\n        left + leftOffset - offsets.offsetX,\n        top + lineHeights + maxHeight - offsets.offsetY,\n        i\n      );\n      lineHeights += heightOfLine;\n    }\n    ctx.restore();\n  }\n  renderEmoji(ctx) {\n    if (this.emoji === undefined) {\n      return;\n    }\n\n    let width = 0;\n    const imageList = [\n      this.canvas.emoji_thumb,\n      this.canvas.emoji_love,\n      this.canvas.emoji_smile,\n      this.canvas.emoji_shock,\n      this.canvas.emoji_question,\n    ];\n    const imageListArray = [];\n    const emojiList = [];\n    for (let i = 0; i < 5; i++) {\n      if (this.emoji[i] !== 0) {\n        imageListArray.push(imageList[i]);\n        emojiList.push(this.emoji[i]);\n        width += 26.6;\n      }\n    }\n\n    if (emojiList.length === 0) return;\n\n    const x = this.width / 2 - width;\n    const y = this.height / 2 - 18;\n    ctx.font = '10px Inter ';\n    ctx.lineJoin = 'round';\n    ctx.save();\n    ctx.translate(x - 10, y);\n    this.drawRoundRectPath(ctx, width, 15, 2);\n    ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n    ctx.fill();\n    ctx.restore();\n\n    //ctx.strokeRect(x - 10, y, width, 16);\n    //ctx.fillRect(x - 10 + 10 / 2, y + 10 / 2, width - 10, 16 - 10);\n    ctx.fillStyle = '#000';\n    const isEmojiThumbExist = !(this.canvas.emoji_thumb === undefined);\n    if (isEmojiThumbExist) {\n      let modifier = 0;\n      for (let i = 0; i < imageListArray.length; i++) {\n        const imageX = this.width / 2 - 33.6 + modifier + 2;\n        const imageY = this.height / 2 - 15;\n        const imageW = 10;\n        const imageH = 10;\n        ctx.drawImage(imageListArray[i], imageX, imageY, imageW, imageH);\n        ctx.fillText(\n          emojiList[i].toString(),\n          this.width / 2 - 20.6 + modifier + 1,\n          y + 12\n        );\n        modifier -= 23.6;\n      }\n    }\n  }\n\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _getSVGLeftTopOffsets() {\n    return {\n      textLeft: -this.width / 2,\n      textTop: this._getTopOffset(),\n      lineTop: this.getHeightOfLine(0),\n    };\n  }\n  getWidgetMenuList() {\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'more',\n      'fontSize',\n      'textAlign',\n      'changeFont',\n      'backgroundColor',\n      'fontColor',\n      'borderLineIcon',\n      'fontWeight',\n      'objectLock',\n      'shapeBorderColor',\n      'lineWidth',\n      'borderLineIcon',\n      'delete',\n      'aiassist',\n    ];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 420;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Copy as image',\n        'Copy As Text',\n      ];\n    } else {\n      menuList = [\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Copy as image',\n        'Copy As Text',\n        'Paste',\n        'Cut',\n        'Edit',\n        'Delete',\n      ];\n    }\n    menuList.push('Select All');\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n    // const notLockedPanel = this.isPanel && !this.locked;\n    // if (notLockedPanel) {\n    //   menuList.push('Switch to non-panel');\n    // } else {\n    //   menuList.push('Switch to panel');\n    // }\n    return menuList;\n  }\n}\n\nclassRegistry.setClass(ShapeNotes);\n"],"names":["shapeNotesDefaultValues","minWidth","dynamicMinWidth","lockScalingFlip","noScaleCache","_wordJoiners","splitByGrapheme","obj_type","height","maxHeight","textAlign","uniformScaling","centeredScaling","verticalAlign","cornerStrokeColor","cornerStyle","cornerColor","transparentCorners","ShapeNotes","Textbox","constructor","arguments","_defineProperty","getDefaults","_objectSpread","controls","createRectNotesDefaultControls","ownDefaults","initDimensions","__skipDimension","clearContextTop","_clearCache","newLines","_splitText","isEditing","initDelayedCursor","preHeight","total","_getTotalLineHeights","getTopOffset","Math","max","yOffset","top","_textLines","length","lineHeights","tmp","i","len","heightOfLine","getHeightOfLine","push","preLines","lastIndex","lastLine","pop","_styleMap","_generateStyleMap","width","_set","indexOf","enlargeSpaces","textInfo","realLineCount","realLineCharCount","charCount","map","graphemeLines","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","_wrapLine","_measureWord","word","charOffset","undefined","prevGrapheme","skipLeft","box","_getGraphemeBox","kernedWidth","wordSplit","value","split","graphemeSplitForRectNotes","textstring","graphemes","words","j","_line","reservedSpace","additionalSpace","_getWidthOfCharSpacing","infix","lineWidth","infixWidth","largestWordWidth","lineJustStarted","data","maxWidth","wordWidth","concat","isEndOfWrapping","missingNewlineOffset","textSplitTextIntoLines","text","_reNewline","Array","newLine","newText","graphemeSplit","_unwrappedLines","_splitTextIntoLines","getLeftOffset","join","getMinWidth","_removeExtraneousStyles","linesToKeep","prop","getObject","object","keys","forEach","key","toObject","propertiesToInclude","extendPropeties","getObjectsIntersected","objects","canvas","_getIntersectedObjects","filter","_id","setLockedShadow","locked","shadow","fabric","Shadow","blur","offsetX","offsetY","color","getCenteredTop","rectHeight","textHeight","_renderBackground","ctx","backgroundColor","_getNonTransformedDimensions","fillStyle","shapeArray","save","svgPath","Path2D","icon","m","getFabricDocument","createElementNS","createSVGMatrix","a","b","c","d","e","f","path","addPath","strokeStyle","stroke","fill","restore","tOffset","lOffset","_getTopOffset","_getTotalLineHeight","reduce","index","_renderText","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","paintFirst","_renderTextStroke","_renderTextFill","calcTextHeight","lineHeight","desiredHeight","set","fontSize","trim","_renderTextCommon","method","left","_getLeftOffset","offsets","_applyPatternGradientTransform","leftOffset","_getLineLeftOffset","_renderTextLine","renderEmoji","emoji","imageList","emoji_thumb","emoji_love","emoji_smile","emoji_shock","emoji_question","imageListArray","emojiList","x","y","font","lineJoin","translate","drawRoundRectPath","isEmojiThumbExist","modifier","imageX","imageY","imageW","imageH","drawImage","fillText","toString","_getSVGLeftTopOffsets","textLeft","textTop","lineTop","getWidgetMenuList","getWidgetMenuLength","getContextMenuList","menuList","textLayoutProperties","classRegistry","setClass"],"mappings":"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"}