{"version":3,"file":"XShapeNotes.min.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};\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  },\n  {\n    name: 'diamond',\n    path: 'm-50,0 l50,-50 50,50 -50,50 -50,-50z',\n    offsetX: 0,\n    offsetY: 0,\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  },\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  },\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  },\n  {\n    name: 'triangle',\n    path: 'm-50,50l50,-100l50,100l-100,0z',\n    offsetX: 0,\n    offsetY: 0,\n  },\n  {\n    name: 'parallelogramIcon',\n    path: 'm-50,50l20,-100l80,0l-20,100l-80,0z',\n    offsetX: 0,\n    offsetY: 0,\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  },\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  },\n  {\n    name: 'leftsideRightTriangle',\n    path: 'm50,50l-100,0l0,-100l100,100z',\n    offsetX: 0,\n    offsetY: 0,\n  },\n  {\n    name: 'rightsideRightTriangle',\n    path: 'm-50,50l100,0l0,-100l-100,100z',\n    offsetX: 0,\n    offsetY: 0,\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  },\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  },\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  },\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  },\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}\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  }\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.strokeStyle = this.stroke;\n    ctx.stroke(path);\n    ctx.fillStyle = this.backgroundColor;\n    ctx.fill(path);\n    ctx.restore();\n  }\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\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();\n    const top = this._getTopOffset();\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  initDimensions() {\n    console.log('### initDimensions');\n    this.clearContextTop();\n    this._clearCache();\n\n    const newLines = this._splitText();\n\n    if (this.isEditing) {\n      this.initDelayedCursor();\n    } else if (this._textLines && this._textLines.length > 0) {\n      let totalHeight = this._getTotalLineHeights();\n      while (totalHeight > this.maxHeight && this.fontSize > 6) {\n        this.fontSize -= 1;\n        this._splitTextIntoLines(this.text);\n        totalHeight = this._getTotalLineHeights();\n      }\n    }\n\n    this.dynamicMinWidth = 0;\n    this._styleMap = this._generateStyleMap(newLines);\n\n    if (this.dynamicMinWidth > this.width) {\n      this._set('width', this.dynamicMinWidth);\n    }\n    if (this.textAlign.indexOf('justify') !== -1) {\n      this.enlargeSpaces();\n    }\n\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  graphemeSplitForRectNotes(textstring: string): string[] {\n    const graphemes = [];\n    const words = textstring.split(/\\b/);\n    for (let i = 0; i < words.length; i++) {\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","XShapeNotesDefaultValues","minWidth","dynamicMinWidth","lockScalingFlip","noScaleCache","_wordJoiners","splitByGrapheme","objType","textAlign","centeredScaling","cornerColor","cornerStrokeColor","cornerSize","cornerStyle","transparentCorners","XShapeNotes","Textbox","constructor","text","options","super","_defineProperty","this","bgShape","shapeName","shape","shapeObj","find","item","console","log","getShapeInfo","width","height","id","getDefaults","_objectSpread","controls","createRectNotesDefaultControls","ownDefaults","_renderBackground","ctx","_this$bgShape","backgroundColor","_getNonTransformedDimensions","fillStyle","save","svgPath","Path2D","m","getFabricDocument","createElementNS","createSVGMatrix","a","b","c","d","e","f","addPath","strokeStyle","stroke","fill","restore","_getTopOffset","verticalAlign","_getTotalLineHeight","_textLines","reduce","total","_line","index","getHeightOfLine","_renderTextCommon","method","lineHeights","left","_getLeftOffset","top","offsets","_applyPatternGradientTransform","i","len","length","heightOfLine","maxHeight","lineHeight","leftOffset","_getLineLeftOffset","_renderTextLine","initDimensions","clearContextTop","_clearCache","newLines","_splitText","isEditing","initDelayedCursor","totalHeight","_getTotalLineHeights","fontSize","_splitTextIntoLines","_styleMap","_generateStyleMap","_set","indexOf","enlargeSpaces","graphemeSplitForRectNotes","textstring","graphemes","words","split","test","push","j","classRegistry","setClass"],"mappings":"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"}