{"version":3,"file":"XTextbase.mjs","sources":["../../../../src/shapes/canvasx/XTextbase.ts"],"sourcesContent":["import { TClassProperties, TOriginX, TOriginY } from '../../typedefs';\nimport { IText } from '../IText/IText';\nimport { classRegistry } from '../../ClassRegistry';\nimport { createTextboxDefaultControls } from '../../controls/X_commonControls';\nimport { EventName, Origin } from './types';\nimport { Textbox } from '../Textbox';\n\nimport { WidgetType } from './type/widget.type';\nimport { WidgetTextboxInterface, EntityKeys } from './type/widget.entity.textbox';\n\n\nimport { Point } from '../../Point';\nimport { XConnector } from './XConnector';\nimport { FabricObject } from '../Object/Object';\n\n\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<XTextbase>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  // _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: false,\n  cornerColor: 'white',\n  cornerSize: 10,\n  cornerStyle: 'circle',\n  transparentCorners: false,\n  cornerStrokeColor: 'gray',\n  connectors: [],\n};\n\nclass Connector {\n  connectorId: string;\n  connectorType: string;\n  point: Point;\n}\n\nexport const XTextbaseProps: Partial<TClassProperties<XTextbase>> = {};\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 XTextbase\n  extends Textbox\n  implements WidgetTextboxInterface {\n  static type: WidgetType = 'XTextbase';\n  static objType: WidgetType = 'XTextbase';\n  /**\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n\n  declare tempTop: number;\n\n  declare hasNoText: boolean;\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  declare oneLine: boolean;\n\n  declare fromCopy: boolean;\n  declare originX: TOriginX;\n  declare originY: TOriginY;\n  declare connectors: Connector[];\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\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createTextboxDefaultControls(),\n      ...XTextbase.ownDefaults,\n    };\n  }\n\n\n\n  constructor(text: string, options: any) {\n\n    options.oneLine = options.oneLine || true;\n    options.connectors = options.connectors || [];\n    options.originX = options.originX || 'center';\n    options.originY = options.originY || 'center';\n    options.minWidth = options.minWidth || 20;\n    options.dynamicMinWidth = options.dynamicMinWidth || 2;\n    options.splitByGrapheme = options.splitByGrapheme || false;\n    options.fixedScaleChange = options.fixedScaleChange || false;\n    options.boardId = options.boardId || '';\n\n    options.userId = options.userId || '';\n    options.zIndex = options.zIndex || 0;\n    options.version = options.version || '';\n    options.updatedAt = options.updatedAt || Date.now();\n    options.lastEditedByName = options.lastEditedByName || '';\n    options.createdByName = options.createdByName || '';\n    options.objType = 'XTextbase';\n\n\n    super(text, options);\n    this.initializeEvent();\n    delete options.height;\n    Object.assign(this, options);\n\n\n    // this.resetResizeControls();\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  maxHeight: number;\n  fixedScaleChange: boolean;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n  /* boardx extend function */\n\n  updateConnector(point: any, connector: XConnector, type: string) {\n    const controlPoint = this.calculateControlPoint(\n      new Point(point.x, point.y)\n    );\n\n    //recalculate the startpoint or endpoint of the connector, and also the ControlPoint\n    if (type === 'from') {\n      connector.update({\n        fromPoint: point,\n        control1: controlPoint,\n      });\n    }\n    if (type === 'to') {\n      connector.update({\n        toPoint: point,\n        control2: controlPoint,\n      });\n    }\n  }\n\n  moveOrScaleHandler(e: any) {\n    //if there is a connector, move the connector\n    if (this.connectors?.length === 0) return;\n    this.connectors?.forEach((connector: any) => {\n      const pointConnector = connector.point;\n\n      //get canvas point of the connector point\n      const point = new Point(pointConnector.x, pointConnector.y);\n      //@ts-ignore\n      const transformedPoint = this.transformPointToCanvas(point);\n\n      //use the connectorId to find the connector and then update the connector\n      //@ts-ignore\n      const connectorObj = this.canvas?.findById(connector.connectorId);\n\n      if (!connectorObj) return;\n\n      if (\n        this.id === connectorObj.fromObjectId &&\n        connector.connectorType === 'from'\n      ) {\n        this.updateConnector(transformedPoint, connectorObj, 'from');\n      }\n\n      if (\n        this.id === connectorObj.toObjectId &&\n        connector.connectorType === 'to'\n      ) {\n        this.updateConnector(transformedPoint, connectorObj, 'to');\n      }\n    });\n  }\n\n  calculateControlPoint(connectingPoint: Point): Point {\n    const boundingBox = this.getBoundingRect();\n    let left = boundingBox.left;\n    let top = boundingBox.top;\n\n    const width = boundingBox.width;\n    const height = boundingBox.height;\n\n    const right = left + width;\n    const bottom = top + height;\n\n    const connectingX = connectingPoint.x;\n    const connectingY = connectingPoint.y;\n\n    let controlX: number = 0;\n    let controlY: number = 0;\n\n    // Find the nearest border and calculate the control point outside the bounding box\n    const distances = [\n      { side: 'left', distance: Math.abs(connectingX - left) },\n      { side: 'right', distance: Math.abs(connectingX - right) },\n      { side: 'top', distance: Math.abs(connectingY - top) },\n      { side: 'bottom', distance: Math.abs(connectingY - bottom) },\n    ];\n\n    const nearestBorder = distances.reduce((min, current) =>\n      current.distance < min.distance ? current : min\n    );\n\n    switch (nearestBorder.side) {\n      case 'left':\n        controlX = left - 220 * this.scaleX;\n        controlY = connectingY;\n        break;\n      case 'right':\n        controlX = right + 220 * this.scaleX;\n        controlY = connectingY;\n        break;\n      case 'top':\n        controlX = connectingX;\n        controlY = top - 220 * this.scaleY;\n        break;\n      case 'bottom':\n        controlX = connectingX;\n        controlY = bottom + 220 * this.scaleY;\n        break;\n    }\n\n    return new Point(controlX, controlY);\n  }\n\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: any) {\n    let realLineCount = 0,\n      realLineCharCount = 0,\n      charCount = 0;\n    const map: any = {};\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: any, 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: number = 0,\n      nextLineIndex = lineIndex + 1,\n      nextOffset: any,\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 as any) {\n      for (const p2 in obj[p1] as any) {\n        if (Number(p2) >= offset && (!shouldLimit || Number(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   * 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: any, 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  /**\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: number) {\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    // Check if text contains Chinese characters\n    if (/[\\u3400-\\u9FBF]/.test(this.text)) {\n      this.splitByGrapheme = true;\n    }\n\n    if (!this.fromCopy) {\n      if (\n        (this.objType === 'XText' || this.objType === 'XTextbase') &&\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.objType === 'XText' || this.objType === 'XTextbase') &&\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  controlMousedownProcess(transformData: any, rx: any, ry: any) {\n    return;\n  }\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\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    const canvas = this.canvas;\n\n    self.on(EventName.EDITINGENTERED, () => {\n      // Set originX based on textAlign\n      // self.originX = self.textAlign as TOriginX;\n\n      // Adjust left position to maintain visual consistency\n      // if (self.textAlign === TextAlign.LEFT) {\n      //   self.left -= (self.width * self.scaleX) / 2;\n      // }\n\n      // if (self.textAlign === TextAlign.RIGHT) {\n      //   // Corrected adjustment: Subtract instead of Add\n      //   self.left -= (self.width * self.scaleX) / 2;\n      // }\n\n      if (self.objType === 'XTextbase') {\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.dirty = true;\n\n          self.fill = 'rgb(0, 0, 0)';\n\n          canvas?.requestRenderAll();\n        }\n      }\n    });\n\n    self.on(EventName.EDITINGEXITED, () => {\n      // Revert originX and originY to center\n      self.originX = Origin.Center;\n      self.originY = Origin.Center;\n\n      // // Reverse the left adjustment based on textAlign\n      // if (self.textAlign === TextAlign.LEFT) {\n      //   self.left += (self.width * self.scaleX) / 2;\n      // }\n\n      // if (self.textAlign === TextAlign.RIGHT) {\n      //   // Reverse the corrected adjustment: Add back\n      //   self.left += (self.width * self.scaleX) / 2;\n      // }\n\n      if (self.objType === 'XTextbase') {\n        self.top = self.tempTop + (self.height * self.scaleY) / 2;\n        self.tempTop = self.top;\n      }\n    });\n\n\n    this.on('moving', (e: any) => {\n      this.moveOrScaleHandler(e);\n    });\n\n    this.on('scaling', (e: any) => {\n      this.moveOrScaleHandler(e);\n    });\n    self.on(EventName.MODIFIED, () => {\n      self.checkTextboxChange();\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    // Other event listeners remain unchanged...\n  }\n\n\n\n\n\n  drawObject(ctx: CanvasRenderingContext2D) {\n    super.drawObject(ctx);\n    // console.log('!@@ drawObject', this.canvas?.dockingWidget, this);\n    //@ts-ignore\n    if (this == this.canvas?.dockingWidget) {\n      this.renderDockingControls(ctx);\n    }\n  }\n\n  renderDockingControls(ctx: CanvasRenderingContext2D) {\n    console.log('!!@renderDockingControls');\n    const self = this;\n    const canvas = self.canvas;\n    const controls = self.controls;\n\n    let cornerColor = 'white';\n\n    if (!canvas) return;\n\n    for (const controlKey in controls) {\n      const control = controls[controlKey];\n      if (\n        !(\n          controlKey === 'mbaStart' ||\n          controlKey === 'mlaStart' ||\n          controlKey === 'mraStart' ||\n          controlKey === 'mtaStart'\n        )\n      )\n        continue;\n\n      if (\n        //@ts-ignore\n        this.canvas!.hoveringControl &&\n        //@ts-ignore\n        this.canvas!.hoveringControl === controlKey\n      ) {\n        cornerColor = '#F21D6B';\n      } else {\n        cornerColor = 'white';\n      }\n\n      //render 4 controls, mbaStart, mlaStart, mraStart, mtaStart\n\n      this._renderControl(\n        ctx,\n        control.x * self.width,\n        control.y * self.height,\n        { cornerStyle: 'circle', cornerColor },\n        self\n      );\n    }\n  }\n\n  _renderControl(\n    ctx: any,\n    left: number,\n    top: number,\n    styleOverride: any,\n    fabricObject: FabricObject\n  ) {\n    console.log('!!@  _renderControl', left, top);\n    let color = styleOverride.cornerColor || 'white';\n\n    ctx.save();\n    ctx.fillStyle = color;\n    ctx.strokeStyle = 'gray';\n    ctx.beginPath();\n    ctx.arc(left, top, 6, 0, Math.PI * 2, false);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n    ctx.restore();\n  }\n\n\n\n  resetResizeControls() {\n    const self = this;\n    const textAlign = self.textAlign;\n\n    if (\n      self.objType === 'XTextbase' &&\n      (textAlign === 'left' || textAlign === 'center')\n    ) {\n      self.setControlVisible('ml', false);\n      self.setControlVisible('mr', true);\n    }\n\n    if (self.objType === 'XText' && 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(XTextbase);\n// classRegistry.getSVGClass(Textbox);\n"],"names":["textboxDefaultValues","minWidth","dynamicMinWidth","splitByGrapheme","cornerColor","cornerSize","cornerStyle","transparentCorners","cornerStrokeColor","connectors","XTextbase","Textbox","getDefaults","_objectSpread","controls","createTextboxDefaultControls","ownDefaults","constructor","text","options","oneLine","originX","originY","fixedScaleChange","boardId","userId","zIndex","version","updatedAt","Date","now","lastEditedByName","createdByName","objType","_defineProperty","initializeEvent","height","Object","assign","updateConnector","point","connector","type","controlPoint","calculateControlPoint","Point","x","y","update","fromPoint","control1","toPoint","control2","moveOrScaleHandler","e","_this$connectors","_this$connectors2","length","forEach","_this$canvas","pointConnector","transformedPoint","transformPointToCanvas","connectorObj","canvas","findById","connectorId","id","fromObjectId","connectorType","toObjectId","connectingPoint","boundingBox","getBoundingRect","left","top","width","right","bottom","connectingX","connectingY","controlX","controlY","distances","side","distance","Math","abs","nearestBorder","reduce","min","current","scaleX","scaleY","_generateStyleMap","textInfo","realLineCount","realLineCharCount","charCount","map","i","graphemeLines","graphemeText","_reSpaceAndTab","test","line","offset","styleHas","property","lineIndex","_styleMap","isWrapping","isEmptyStyles","styles","nextLineIndex","nextOffset","shouldLimit","mapNextLine","obj","p1","p2","Number","p3","_measureWord","word","charOffset","arguments","undefined","prevGrapheme","skipLeft","len","box","_getGraphemeBox","kernedWidth","wordSplit","value","split","_wordJoiners","isEndOfWrapping","missingNewlineOffset","_splitTextIntoLines","newText","fromCopy","textLines","isEditing","lines","_wrapText","Array","join","getMinWidth","max","controlMousedownProcess","transformData","rx","ry","getObject","entityKeys","EntityKeys","result","key","checkTextboxChange","self","on","EventName","EDITINGENTERED","tempTop","selectAll","dirty","fill","requestRenderAll","EDITINGEXITED","Origin","Center","MODIFIED","CHANGED","drawObject","ctx","_this$canvas2","dockingWidget","renderDockingControls","console","log","controlKey","control","hoveringControl","_renderControl","styleOverride","fabricObject","color","save","fillStyle","strokeStyle","beginPath","arc","PI","closePath","stroke","restore","resetResizeControls","textAlign","setControlVisible","IText","textLayoutProperties","classRegistry","setClass"],"mappings":"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"}