{"version":3,"file":"XShapeNotes.mjs","sources":["../../../../src/shapes/canvasx/XShapeNotes.ts"],"sourcesContent":["import { classRegistry } from '../../ClassRegistry';\nimport { createRectNotesDefaultControls } from '../../controls';\nimport { getFabricDocument } from '../../env';\nimport { TClassProperties, TFiller } from '../../typedefs';\nimport { Textbox, TextboxProps } from '../Textbox';\n\nexport type shapeType =\n  | 'rect'\n  | 'diamond'\n  | 'roundedRect'\n  | 'circle'\n  | 'hexagon'\n  | 'triangle'\n  | 'parallelogramIcon'\n  | 'star'\n  | 'cross'\n  | 'leftsideRightTriangle'\n  | 'rightsideRightTriangle'\n  | 'topsideSemicircleCircle'\n  | 'topLeftQuarterCircle'\n  | 'constellationRect'\n  | 'constellationRound';\n\nexport type shapeInfo = {\n  name: shapeType;\n  path: string;\n  offsetX: number;\n  offsetY: number;\n  verticalAlign: 'middle' | 'top' | 'bottom';\n  textAlign: 'center' | 'left' | 'right';\n  textMaxHeight?: number;\n  textMaxWidth?: number;\n};\nexport const shapeList = [\n  {\n    name: 'rect',\n    path: 'M-50,-50L50,-50 50,50 -50,50z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n    textMaxHeight: 50,\n  },\n  {\n    name: 'diamond',\n    path: 'm-50,0 l50,-50 50,50 -50,50 -50,-50z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'roundedRect',\n    path: 'M-50,-35 Q-50,-50 -35,-50 L35,-50 Q50,-50 50,-35 L50,35 Q50,50 35,50 L-35,50 Q-50,50 -50,35 Z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'circle',\n    path: 'M-50,0a50,50 0 1,0 100,0a50,50 0 1,0 -100,0',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'hexagon',\n    path: 'm-43.476 -25.4636 l 43.476 -24.5364 l 43.7551 25.2641 l 0 50.5157 l -43.7551 24.2202 l -43.7551 -25.2654 l 0 -50.5157 z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'triangle',\n    path: 'm-50,50l50,-100l50,100l-100,0z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'bottom',\n    textAlign: 'center',\n  },\n  {\n    name: 'parallelogramIcon',\n    path: 'm-50,50l20,-100l80,0l-20,100l-80,0z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'star',\n    path: 'm-50,-10l38,0l12,-38l12,38l38,0l-30,23l12,38l-30,-24l-30,24l12,-38l-30,-23z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'cross',\n    path: 'm-50,-15l33,0l0,-33l34,0l0,33l33,0l0,34l-33,0l0,33l-34,0l0,-33l-33,0l0,-34z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'leftsideRightTriangle',\n    path: 'm50,50l-100,0l0,-100l100,100z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'bottom',\n    textAlign: 'left',\n    textMaxHeight: 50,\n  },\n  {\n    name: 'rightsideRightTriangle',\n    path: 'm-50,50l100,0l0,-100l-100,100z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'bottom',\n    textAlign: 'right',\n    textMaxHeight: 50,\n  },\n  {\n    name: 'topsideSemicircleCircle',\n    path: 'm50,25l-100,-0.00205c3.5,-27.5 25,-48 50,-48c25,0 46.5,20.5 50,48z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'topLeftQuarterCircle',\n    path: 'm-50,50c7,-55 47,-96 97,-97l0,65l0,32l-97,-0.00392z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'constellationRect',\n    path: 'm20,0l25,23l0,24l-100,0l0,-100l100,0l0,23l-25,24l-0.15,0.14l0.15,0.14l-0.00001,0z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'constellationRound',\n    path: 'm20,1c0.002,0.002 0.004,0.004 0.01,0.001c0.007,0.01 0.015,0.02 0.02,0.03l0,0l0.001,0.0004l0.005,0.003l0.04,0.03l0.3,0.2l2.5,2l20,15c-7,15 -23,26 -42,26c-25,0 -45,-20 -45,-45c0,-25 20,-45 45,-45c19,0 35,10 42,25c-11,9 -17,14 -20,16c-1.5,1 -2,1.5 -2.5,2c-0.2,0.15 -0.3,0.2 -0.35,0.3c-0.02,0.02 -0.04,0.04 -0.05,0.06c-0.006,0.01 -0.02,0.03 -0.03,0.06c-0.005,0.015 -0.02,0.04 -0.03,0.07c-0.005,0.015 -0.01,0.04 -0.007,0.07c0.002,0.02 0.007,0.04 0.015,0.06c0.003,0.006 0.006,0.012 0.009,0.018c0.003,0.004 0.006,0.009 0.009,0.014c0.003,0.005 0.009,0.01 0.01,0.015c0.004,0.005 0.01,0.015 0.012,0.017z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n];\n\nfunction getShapeInfo(shape: string): shapeInfo | null {\n  const shapeObj = shapeList.find((item) => item.name === shape);\n  console.log('### shapeObj:', shapeObj);\n  if (!shapeObj) {\n    return shapeList[0] as shapeInfo;\n  } else {\n    return shapeObj as shapeInfo; // Update the type of shapeObj to shapeInfo\n  }\n}\nexport const XShapeNotesDefaultValues: Partial<TClassProperties<XShapeNotes>> =\n  {\n    minWidth: 20,\n    dynamicMinWidth: 2,\n    lockScalingFlip: true,\n    noScaleCache: false,\n    _wordJoiners: /[ \\t\\r]/,\n    splitByGrapheme: true,\n    objType: 'XShapeNotes',\n    textAlign: 'center',\n    centeredScaling: false,\n    cornerColor: 'white',\n    cornerStrokeColor: 'gray',\n    cornerSize: 10,\n    cornerStyle: 'circle',\n    transparentCorners: false,\n  };\n\ninterface XShapeNotesProps extends TextboxProps {\n  shapeName: string;\n  id: string;\n}\n\nexport class XShapeNotes extends Textbox {\n  bgShape: shapeInfo | null;\n  verticalAlign = 'middle';\n  maxHeight: number = 138;\n\n  constructor(text: string, options: Partial<XShapeNotesProps>) {\n    super(text, options);\n\n    this.bgShape = options.shapeName ? getShapeInfo(options.shapeName) : null;\n    this.width = options.width || 200;\n    this.height = options.height || 200;\n    this.id = options.id || '';\n    this.verticalAlign = this.bgShape?.verticalAlign || 'middle';\n    this.textAlign = this.bgShape?.textAlign || 'center';\n  }\n\n  static ownDefaults: Record<string, any> = XShapeNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createRectNotesDefaultControls(),\n      ...XShapeNotes.ownDefaults,\n    };\n  }\n\n  _renderBackground(ctx: any) {\n    if (!this.backgroundColor) {\n      return;\n    }\n    const dim = this._getNonTransformedDimensions();\n    ctx.fillStyle = this.backgroundColor;\n\n    ctx.save();\n\n    const svgPath = new Path2D(this.bgShape?.path || '');\n    const m = getFabricDocument()\n      .createElementNS('http://www.w3.org/2000/svg', 'svg')\n      .createSVGMatrix();\n    m.a = this.width / 100;\n    m.b = 0;\n    m.c = 0;\n    m.d = this.height / 100;\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\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  _renderTextCommon(ctx: any, method: any) {\n    ctx.save();\n    let lineHeights = 0;\n    const left = this._getLeftOffset() + this.bgShape?.offsetX!;\n    const top = this._getTopOffset() + this.bgShape?.offsetY!;\n    const offsets = this._applyPatternGradientTransform(\n      ctx,\n      ((method === 'fillText' ? this.fill : this.stroke) as TFiller) ||\n        this.fill!\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  /**\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 > this.height && this.fontSize > 6) {\n      this.set('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n    // if (height > this.height && this.fontSize === 6) {\n    //   const prenum = 125 / height;\n    //   const newText = this.text.substring(0, this.text.length * prenum - 5);\n    //   this.set('text', newText + '...');\n    // }\n    // this.height = this.height;\n    return this.height;\n  }\n\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\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\nclassRegistry.setClass(XShapeNotes);\n"],"names":["shapeList","name","path","offsetX","offsetY","verticalAlign","textAlign","textMaxHeight","getShapeInfo","shape","shapeObj","find","item","console","log","XShapeNotesDefaultValues","minWidth","dynamicMinWidth","lockScalingFlip","noScaleCache","_wordJoiners","splitByGrapheme","objType","centeredScaling","cornerColor","cornerStrokeColor","cornerSize","cornerStyle","transparentCorners","XShapeNotes","Textbox","constructor","text","options","_this$bgShape","_this$bgShape2","_defineProperty","bgShape","shapeName","width","height","id","getDefaults","_objectSpread","controls","createRectNotesDefaultControls","ownDefaults","_renderBackground","ctx","_this$bgShape3","backgroundColor","_getNonTransformedDimensions","fillStyle","save","svgPath","Path2D","m","getFabricDocument","createElementNS","createSVGMatrix","a","b","c","d","e","f","addPath","strokeStyle","stroke","fill","restore","_getTopOffset","_getTotalLineHeight","_textLines","reduce","total","_line","index","getHeightOfLine","_renderTextCommon","method","_this$bgShape4","_this$bgShape5","lineHeights","left","_getLeftOffset","top","offsets","_applyPatternGradientTransform","i","len","length","heightOfLine","maxHeight","lineHeight","leftOffset","_getLineLeftOffset","_renderTextLine","initDimensions","initialized","isEditing","initDelayedCursor","_clearCache","_styleMap","_generateStyleMap","_splitText","set","fontSize","_splitTextIntoLines","indexOf","enlargeSpaces","calcTextHeight","_getTotalLineHeights","graphemeSplitForRectNotes","textstring","graphemes","words","split","test","push","j","classRegistry","setClass"],"mappings":"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"}