{"version":3,"file":"BX_CircleNotes.mjs","sources":["../../../src/shapes/BX_CircleNotes.ts"],"sourcesContent":["// @ts-nocheck\nimport { TClassProperties } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { Textbox } from './Textbox';\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 circleNotesDefaultValues: Partial<TClassProperties<CircleNotes>> =\n  {\n    minWidth: 20,\n    dynamicMinWidth: 2,\n    verticalAlign: 'middle',\n    lockScalingFlip: true,\n    noScaleCache: false,\n    _wordJoiners: /[ \\t\\r]/,\n    splitByGrapheme: true,\n    obj_type: 'WBCircleNotes',\n    height: 138,\n    maxHeight: 138,\n    width: 138,\n    noteType: 'circle',\n    radius: 138,\n    breakWords: true,\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 CircleNotes 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 emoj: object[];\n\n  declare userEmoji: object[];\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    'emoj',\n    'userEmoji',\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> = circleNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createRectNotesDefaultControls(),\n      ...CircleNotes.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.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('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\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    const height = this.calcTextHeight();\n    if (height > 76 && this.fontSize > 2) {\n      this.set('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n\n    this.height = this.maxHeight;\n    return this.height;\n  }\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      // 检查单词是否全为拉丁字母，长度不大于13，且没有四个或更多的连续相同的字母\n      if (\n        /^[a-zA-Z]+$/.test(words[i]) &&\n        words[i].length <= 13 &&\n        !/(\\w)\\1{3,}/.test(words[i])\n      ) {\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      graphemeLines = this._wrapText(newText.lines, this.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', // 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      'strokeWidth', //\n      'text', // string, text\n      'textAlign', // string, alignment\n      'imageSrc', // src for the note draw\n      'isDraw', // is this a draw note\n      'emoji', // [0,0,0,0,0], record the emoji\n      'userEmoji', // [{userid,[0,0,0,0,1]},{userid,[0,0,0,0,1]}], record who vote the emoji\n      'editable', // text editable,\n      'lastEditedBy', // last edited by\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\n  getWidgetMenuList() {\n    if (this.isDraw) {\n      return [\n        'textNote',\n        'borderLineIcon',\n        'backgroundColor',\n        'resetDraw',\n        'switchNoteType',\n        'drawOption',\n        'lineWidth',\n        'noteDrawColor', // strokeColor\n        'emojiMenu',\n        'more',\n        'objectLock',\n        'aiassist',\n      ];\n    }\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'drawNote',\n      'more',\n      'borderLineIcon',\n      'switchNoteType',\n      'fontSize',\n      'textAlign',\n      'backgroundColor',\n      'emojiMenu',\n      'fontWeight',\n      'textBullet',\n      'objectLock',\n      'delete',\n      'aiassist',\n    ];\n  }\n  getWidgetMenuTouchList() {\n    if (this.isDraw) {\n      return ['emojiMenu', 'objectLock'];\n    }\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'objectDelete',\n      'moreMenuStickyNote',\n      'backgroundColor',\n      'fontColor',\n      'emojiMenu',\n      'objectLock',\n      'aiassist',\n    ];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    if (this.isDraw) {\n      return 308;\n    }\n    return 420;\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  _getTopOffset() {\n    switch (this.verticalAlign) {\n      case 'middle':\n        return -this._getTotalLineHeights() / 2;\n      case 'bottom':\n        return this.height / 2 - this._getTotalLineHeights();\n      default:\n        return -this.height / 2;\n    }\n  }\n\n  _getTotalLineHeight() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _render(ctx) {\n    const path: any = this.path;\n\n    path && !path.isNotVisible() && path._render(ctx);\n    this._setTextStyles(ctx);\n    this._renderTextLinesBackground(ctx);\n    this._renderTextDecoration(ctx, 'underline');\n    this._renderText(ctx);\n    this._renderTextDecoration(ctx, 'overline');\n    this._renderTextDecoration(ctx, 'linethrough');\n\n    const isEmojiExist = !(\n      this.emoji === undefined || this.emoji.join() === '0,0,0,0,0'\n    );\n    if (isEmojiExist) {\n      this.renderEmoji(ctx);\n    }\n  }\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 + this.padding / 2;\n    const y = this.height / 2 - 18 + this.padding / 2;\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 + this.padding / 2;\n        const imageY = this.height / 2 - 15 + this.padding / 2;\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 + this.padding / 2,\n          y + 12\n        );\n        modifier -= 23.6;\n      }\n    }\n  }\n  _renderBackground(ctx) {\n    if (!this.backgroundColor) {\n      return;\n    }\n    const dim = this._getNonTransformedDimensions();\n    ctx.fillStyle = this.backgroundColor;\n    ctx.beginPath(); // start new path\n    const radius =\n      dim.x / 2 + this.padding / this.scaleX / this.canvas?.getZoom();\n    ctx.arc(0, 0, radius, 0, 2 * Math.PI); // draw circle path\n    ctx.closePath(); // close path\n    ctx.strokeStyle = this.backgroundColor;\n    ctx.fillStyle = this.backgroundColor;\n    ctx.stroke();\n    ctx.fill();\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  _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\n  _getSVGLeftTopOffsets() {\n    return {\n      textLeft: -this.width / 2,\n      textTop: this._getTopOffset(),\n      lineTop: this.getHeightOfLine(0),\n    };\n  }\n\n  drawRoundRectPath(cxt, width, height, radius) {\n    cxt.beginPath(0);\n    //从右下角顺时针绘制，弧度从0到1/2PI\n    cxt.arc(width - radius, height - radius, radius, 0, Math.PI / 2);\n\n    //矩形下边线\n    cxt.lineTo(radius, height);\n\n    //左下角圆弧，弧度从1/2PI到PI\n    cxt.arc(radius, height - radius, radius, Math.PI / 2, Math.PI);\n\n    //矩形左边线\n    cxt.lineTo(0, radius);\n\n    //左上角圆弧，弧度从PI到3/2PI\n    cxt.arc(radius, radius, radius, Math.PI, (Math.PI * 3) / 2);\n\n    //上边线\n    cxt.lineTo(width - radius, 0);\n\n    //右上角圆弧\n    cxt.arc(width - radius, radius, radius, (Math.PI * 3) / 2, Math.PI * 2);\n\n    //右边线\n    cxt.lineTo(width, height - radius);\n    cxt.closePath();\n  }\n}\n\nclassRegistry.setClass(CircleNotes);\nclassRegistry.setSVGClass(CircleNotes, 'circleNotes');\n"],"names":["circleNotesDefaultValues","minWidth","dynamicMinWidth","verticalAlign","lockScalingFlip","noScaleCache","_wordJoiners","splitByGrapheme","obj_type","height","maxHeight","width","noteType","radius","breakWords","cornerStrokeColor","cornerStyle","cornerColor","transparentCorners","CircleNotes","Textbox","constructor","arguments","_defineProperty","getDefaults","_objectSpread","controls","createRectNotesDefaultControls","ownDefaults","initDimensions","initialized","isEditing","initDelayedCursor","_clearCache","_styleMap","_generateStyleMap","_splitText","set","fontSize","_splitTextIntoLines","text","textAlign","indexOf","enlargeSpaces","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","undefined","prevGrapheme","skipLeft","len","box","_getGraphemeBox","kernedWidth","wordSplit","value","split","graphemeSplitForRectNotes","textstring","graphemes","words","j","_line","reservedSpace","additionalSpace","_getWidthOfCharSpacing","infix","lineWidth","infixWidth","largestWordWidth","lineJustStarted","data","Math","max","maxWidth","wordWidth","concat","isEndOfWrapping","missingNewlineOffset","newText","Array","join","getMinWidth","_removeExtraneousStyles","linesToKeep","prop","_textLines","getObject","object","keys","forEach","key","toObject","propertiesToInclude","extendPropeties","getWidgetMenuList","isDraw","locked","getWidgetMenuTouchList","getWidgetMenuLength","getCenteredTop","rectHeight","textHeight","_getTopOffset","_getTotalLineHeights","_getTotalLineHeight","reduce","total","index","getHeightOfLine","_render","ctx","path","isNotVisible","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","isEmojiExist","emoji","renderEmoji","imageList","canvas","emoji_thumb","emoji_love","emoji_smile","emoji_shock","emoji_question","imageListArray","emojiList","x","padding","y","font","lineJoin","save","translate","drawRoundRectPath","fillStyle","fill","restore","isEmojiThumbExist","modifier","imageX","imageY","imageW","imageH","drawImage","fillText","toString","_renderBackground","_this$canvas","backgroundColor","dim","_getNonTransformedDimensions","beginPath","scaleX","getZoom","arc","PI","closePath","strokeStyle","stroke","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","paintFirst","_renderTextStroke","_renderTextFill","_renderTextCommon","method","lineHeights","left","_getLeftOffset","top","offsets","_applyPatternGradientTransform","heightOfLine","lineHeight","leftOffset","_getLineLeftOffset","_renderTextLine","offsetX","offsetY","_getSVGLeftTopOffsets","textLeft","textTop","lineTop","cxt","lineTo","textLayoutProperties","classRegistry","setClass","setSVGClass"],"mappings":"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"}