{"version":3,"file":"XRectNotes.mjs","sources":["../../../../src/shapes/canvasx/XRectNotes.ts"],"sourcesContent":["import { classRegistry } from '../../ClassRegistry';\nimport { XTextbase } from './XTextbase';\nimport type { TClassProperties, TOriginX, TOriginY } from '../../typedefs';\nimport { createRectNotesDefaultControls } from '../../controls/X_commonControls';\n\n\nimport { WidgetRectNotesInterface, EntityKeys } from './type/widget.entity.rectnote';\n// this will be a separated effort\nexport const rectNotesDefaultValues: Partial<TClassProperties<XRectNotes>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  splitByGrapheme: true,\n  height: 138,\n  maxHeight: 138,\n  width: 230,\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 */\n///@ts-ignore\nexport class XRectNotes extends XTextbase implements WidgetRectNotesInterface {\n  /**selectable\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n  static type = 'XRectNotes';\n  static objType = 'XRectNotes';\n  declare locked: boolean;\n  declare cornerStyle: any;\n  declare verticalAlign: string;\n  declare originX: TOriginX;\n  declare originY: TOriginY;\n  declare width: number;\n  declare cornerStrokeColor: string;\n\n  declare cornerColor: string;\n  declare transparentCorners: boolean;\n  declare zIndex: number;\n  declare height: number;\n  declare maxHeight: number;\n\n  declare id: string;\n  declare boardId: string;\n\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 = [...XTextbase.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = rectNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n\n      ...XRectNotes.ownDefaults,\n    };\n  }\n  constructor(\n    text: string,\n    options: Partial<TClassProperties<XRectNotes>> = {}\n  ) {\n\n    options.createdByName = options.createdByName ?? '';\n    options.fontFamily = options.fontFamily ?? 'Inter';\n    options.fontSize = options.fontSize ?? 12;\n    options.fontWeight = options.fontWeight ?? \"400\";\n    options.lineHeight = 1.2;\n    options.text = options.text ?? '';\n    options.textAlign = options.textAlign ?? 'center';\n    options.editable = options.editable ?? true;\n    options.fixedScaleChange = options.fixedScaleChange ?? false;\n    options.connectors = options.connectors ?? [];\n    options.id = options.id ?? '';\n    options.boardId = options.boardId ?? '';\n    options.backgroundColor = options.backgroundColor ?? '#FCEC8A';\n    options.left = options.left ?? 0;\n    options.locked = options.locked ?? false;\n    options.objType = options.objType ?? 'XRectNotes';\n    options.originX = options.originX ?? 'center';\n    options.originY = options.originY ?? 'center';\n    options.scaleX = options.scaleX ?? 1;\n    options.scaleY = options.scaleY ?? 1;\n    options.selectable = options.selectable ?? true;\n    options.top = options.top ?? 0;\n    options.userId = options.userId ?? '';\n    options.zIndex = options.zIndex ?? Date.now() * 100;\n    options.version = options.version ?? '1.0';\n    options.updatedAt = options.updatedAt ?? Date.now();\n    options.updatedBy = options.updatedBy ?? '';\n    options.updatedByName = options.updatedByName ?? '';\n    options.createdAt = options.createdAt ?? Date.now();\n    options.createdBy = options.createdBy ?? '';\n    options.visible = options.visible ?? true;\n    options.splitByGrapheme = true;\n\n    //fixed default value\n    options.perPixelTargetFind = false;\n    options.height = 138;\n    options.oneLine = false;\n\n    super(text, options);\n    this.maxHeight = 138;\n    Object.assign(this, {\n      controls: {\n        ...createRectNotesDefaultControls(this),\n        // mr: { /* add your desired value here */ },\n      },\n    });\n    // Object.assign(this, options);\n\n    this.splitByGrapheme = true;\n    this.dirty = true;\n    this.objType = 'XRectNotes';\n    // this.initializeEvent();\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.maxHeight && this.fontSize > 6) {\n      this.set('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n    if (height > 130 && 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.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: any) {\n  //   let realLineCount = 0;\n  //   let realLineCharCount = 0;\n  //   let 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] = {\n  //       line: realLineCount,\n  //       offset: realLineCharCount,\n  //     };\n\n  //     charCount += textInfo.graphemeLines[i].length;\n  //     realLineCharCount += textInfo.graphemeLines[i].length;\n  //   }\n\n  //   return map;\n  // }\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\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   * 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   * 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\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  /**\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      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  /* caculate cusor positon in the middle of the textbox */\n  getCenteredTop(rectHeight: number) {\n    const textHeight = this.height;\n    return (rectHeight - textHeight) / 2;\n  }\n\n  _render(ctx: CanvasRenderingContext2D) {\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\n  _renderBackground(ctx: CanvasRenderingContext2D) {\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  _getTopOffset() {\n    return -this._getTotalLineHeights() / 2;\n  }\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, line, index) => total + this.getHeightOfLine(index),\n      0\n    );\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: CanvasRenderingContext2D) {\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  drawRoundRectPath(\n    cxt: CanvasRenderingContext2D,\n    width: number,\n    height: number,\n    radius: number\n  ) {\n    cxt.beginPath();\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(XRectNotes);\nclassRegistry.setSVGClass(XRectNotes, 'XRectNotes');\n"],"names":["rectNotesDefaultValues","minWidth","dynamicMinWidth","splitByGrapheme","height","maxHeight","width","cornerStrokeColor","cornerStyle","cornerColor","transparentCorners","XRectNotes","XTextbase","getDefaults","_objectSpread","ownDefaults","constructor","text","_options$createdByNam","_options$fontFamily","_options$fontSize","_options$fontWeight","_options$text","_options$textAlign","_options$editable","_options$fixedScaleCh","_options$connectors","_options$id","_options$boardId","_options$backgroundCo","_options$left","_options$locked","_options$objType","_options$originX","_options$originY","_options$scaleX","_options$scaleY","_options$selectable","_options$top","_options$userId","_options$zIndex","_options$version","_options$updatedAt","_options$updatedBy","_options$updatedByNam","_options$createdAt","_options$createdBy","_options$visible","options","arguments","length","undefined","createdByName","fontFamily","fontSize","fontWeight","lineHeight","textAlign","editable","fixedScaleChange","connectors","id","boardId","backgroundColor","left","locked","objType","originX","originY","scaleX","scaleY","selectable","top","userId","zIndex","Date","now","version","updatedAt","updatedBy","updatedByName","createdAt","createdBy","visible","perPixelTargetFind","oneLine","Object","assign","controls","createRectNotesDefaultControls","dirty","initDimensions","initialized","isEditing","initDelayedCursor","_clearCache","_styleMap","_generateStyleMap","_splitText","set","_splitTextIntoLines","indexOf","enlargeSpaces","calcTextHeight","prenum","newText","substring","getObject","entityKeys","EntityKeys","result","forEach","key","styleHas","property","lineIndex","isWrapping","map","line","_getLineStyle","styles","_setLineStyle","wordSplit","value","split","_wordJoiners","isEndOfWrapping","missingNewlineOffset","graphemeLines","_wrapText","lines","Array","i","join","getMinWidth","Math","max","getCenteredTop","rectHeight","textHeight","_render","ctx","path","isNotVisible","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","_renderBackground","dim","_getNonTransformedDimensions","fillStyle","fillRect","x","y","_getTopOffset","_getTotalLineHeights","_textLines","reduce","total","index","getHeightOfLine","_getTotalLineHeight","_line","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","paintFirst","_renderTextStroke","_renderTextFill","drawRoundRectPath","cxt","radius","beginPath","arc","PI","lineTo","closePath","_defineProperty","textLayoutProperties","classRegistry","setClass","setSVGClass"],"mappings":"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"}